android中的音频音调变化

时间:2012-10-24 08:00:00

标签: android

我正在开发一个声音相关的应用程序。我正在尝试将音频声音更改为完全不同的机器人声音或使音频回声。我尝试使用soundpool,但不知道,有谁知道如何实现这一目标?我只需要一个基本的想法来实现这一点,请帮助。非常感谢。

3 个答案:

答案 0 :(得分:5)

Pitch和echo是两个不同的东西。

<强>间距:

您可以通过修改播放速率来改变音高。您可以通过两种方式完成此操作,包括 audioTrack setPlayBackRate SoundPool setRate。取决于您的需求,AudioTrack允许在大文件上使用更大范围的音高(从1hz到x2),SoundPool用于音效和picth可以在x0.5和x2之间变化。

<强>回声/混响:

您可以使用AudioEffect将其归档为API {lvl 9,方法是将其附加到AudioTrack或MediaPlayer实例。

答案 1 :(得分:1)

对于机器人效果,您需要为音频设置恒定音高。即进行FFT,将所有内容移动到单个频率仓中,然后进行逆FFT以回到时域。

对于回声效果,您可以保留一个与所需回声延迟一样长的单独缓冲区。并且对于每个样本执行类似下面的操作(伪代码):

output = mix(currentSample, echoBuffer[echoPos]*echoVolume)
echoBuffer[echoPos] = mix(currentSample, echoBuffer[echoPos]*echofeedback)
echoPos += 1

答案 2 :(得分:0)

我正在开展一个类似的项目,我可以说你需要研究DSP(数字信号处理),PCM 16格式以及最好的傅里叶变换。

可以使用AudioRecord类环回音频(运行一个线程不断填充AudioTrack上的缓冲区)

但是延迟可能对你想要完成的事情来说太大了。

祝你好运!

一些非常好的指针: Android AudioRecord class - process live mic audio quickly, set up callback function