【发布时间】:2023-03-29 21:46:02
【问题描述】:
我正在开发一个与声音相关的应用程序。我正在尝试将音频声音更改为完全不同的声音,例如机器人声音或使音频回声。我试过 soundpool ,但不知道,有人知道如何实现吗?我只需要一个基本的想法来实现这一点,请帮忙。非常感谢。
【问题讨论】:
-
您是否考虑过数据的本地 (C) 处理,将其保存到文件(例如 wav)并播放?数据的输入格式将有助于确定最佳实施方式。
标签: android
我正在开发一个与声音相关的应用程序。我正在尝试将音频声音更改为完全不同的声音,例如机器人声音或使音频回声。我试过 soundpool ,但不知道,有人知道如何实现吗?我只需要一个基本的想法来实现这一点,请帮忙。非常感谢。
【问题讨论】:
标签: android
音高和回声是两个不同的东西。
间距:
您可以通过修改播放速率来改变音高。您可以通过 2 种方式进行操作,使用 audioTrack 和 setPlayBackRate 或使用 SoundPool 和 setRate。根据您的需要,AudioTrack 允许对大文件进行更大范围的音调(从 1hz 到 x2),SoundPool 用于音效和 picth 可以在 x0.5 和 x2 之间变化。
回声/混响:
您可以使用AudioEffect 从 API lvl 9 开始通过将其附加到 AudioTrack 或 MediaPlayer 实例来归档它。
【讨论】:
对于机器人效果,您需要为音频设置一个恒定的音高。 IE。进行 FFT,将所有内容移入单个频率区间,然后进行逆 FFT 以返回时域。
对于回声效果,您可以保留一个单独的缓冲区,该缓冲区与您想要的回声延迟一样长。对于每个示例,请执行以下操作(伪代码):
output = mix(currentSample, echoBuffer[echoPos]*echoVolume)
echoBuffer[echoPos] = mix(currentSample, echoBuffer[echoPos]*echofeedback)
echoPos += 1
【讨论】:
我正在做一个类似的项目,我可以说你需要研究 DSP(数字信号处理)、PCM 16 格式,最好是傅立叶变换。
可以使用 AudioRecord 类回送音频(运行一个线程不断填充 AudioTrack 上的缓冲区)
但是对于您要完成的工作而言,延迟可能太大了。
祝你一切顺利!
一些非常好的建议: Android AudioRecord class - process live mic audio quickly, set up callback function
【讨论】: