1

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

如果您可以将我引导到一些源代码或教程或任何解释目标 C 语音调制的站点,将真的对我有帮助。谢谢大家。

4

2 回答 2

2

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

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

于 2010-12-01T20:47:24.210 回答
2

您在这里尝试做的事情并不那么简单。基本上,您必须实现声码器(“语音编码器”)来改变声音。维基百科链接应该可以帮助你。

然后,您仍然可以在 CoreAudio 中操作这些样本。您可以使用音频队列服务来做到这一点,但这并不是一个易于使用的 API。实际上,使用更简单的 CoreAudio API 之一并将您的声码器包装在音频单元中可能会更轻松。

你对音频处理有一些经验吗?在没有关于音频处理的先验知识的情况下实现声码器通常是一项艰巨的任务。

于 2010-08-30T07:03:10.430 回答