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