1

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

4

3 回答 3

5

音高和回声是两个不同的东西。

沥青:

您可以通过修改播放速率来改变音高。您可以通过 2 种方式进行操作,使用audioTracksetPlayBackRate或使用SoundPoolsetRate。取决于您的需要,AudioTrack 允许在大文件上进行更大范围的音高(从 1hz 到 x2),而 SoundPool 用于音效和 picth 可以在 x0.5 和 x2 之间变化。

回声/混响:

从 API lvl 9 起,您可以通过将它附加到 AudioTrack 或 MediaPlayer 实例来使用 AudioEffect归档它。

于 2012-10-24T09:16:06.797 回答
1

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

对于回声效果,您可以保留一个单独的缓冲区,该缓冲区与您想要的回声延迟一样长。对于每个示例,请执行以下操作(伪代码):

output = mix(currentSample, echoBuffer[echoPos]*echoVolume)
echoBuffer[echoPos] = mix(currentSample, echoBuffer[echoPos]*echofeedback)
echoPos += 1
于 2012-10-24T08:32:42.107 回答
0

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

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

但是对于您要完成的工作,延迟可能太大了。

祝你一切顺利!

一些非常好的建议: Android AudioRecord 类 - 快速处理现场麦克风音频,设置回调函数

于 2012-10-24T08:05:52.137 回答