如何在iPhone的Core Audio(音频单元/远程IO)中将录制的声音更改为男声

时间:2010-08-18 15:15:51

标签: iphone objective-c core-audio audio-recording audiounit

我是Core Audio的新手并且真的输了,我正在尝试录制音频,然后对该录音应用语音调制并播放。我看过Speak Here的例子,它使用Audio Queue进行录音。我被困在如何更改音频样本的部分。我知道可以在回调函数中使用Audio Unit来改变音频样本,但是我不知道应该对这些样本应用什么来改变它们(将改变音高帮助?)。

如果你可以指导我一些源代码或教程或任何解释目标C的语音调制的网站真的会帮助我。提前谢谢大家。

2 个答案:

答案 0 :(得分:2)

你在这里想要做的并不是那么简单。基本上,您必须实现声码器(“语音编码器”)来改变声音。 Wikipedia links应该会帮助你。

然后,您仍然在CoreAudio中操作这些示例。您可以使用Audio Queue Services执行此操作,但这不是一个易于使用的API。使用一个更简单的CoreAudio API并将声码器包装在音频单元中可能实际上没有那么麻烦。

您是否有一些音频处理经验?在没有关于音频处理的一般知识的情况下实现声码器是一项艰巨的任务。

答案 1 :(得分:2)

首先,要实际回答你的问题:当你调用AudioQueueNewInput()函数时,你会传递一个例程的名称,每当有数据可用时你就会调用它。您可能将其称为MyInputBufferHandler()或其他东西。它的第三个参数是一个AudioQueueBufferRef,它保存传入的数据。

请注意,这并不像查看每个样本(振幅)和降低或提高它一样简单。您在时间(时间)域中接收样本作为幅度。没有可用的音高或频率信息。您需要做的是将输入样本(波形)移动到频域,其中该空间中的每个“点”是一个频率,它伴随着功率和相位。你可以用FFT(快速傅里叶变换)来做到这一点,但数学有些复杂。 Apple确实在Acceleration框架中提供了FFT例程,但要注意你在这里涉水很深。