在 iPhone 上录制播放和麦克风

Posted

技术标签:

【中文标题】在 iPhone 上录制播放和麦克风【英文标题】:Recording playback and mic on IPhone 【发布时间】:2011-05-17 20:47:00 【问题描述】:

在 iPhone SDK 4.3 中,我想通过 Remote IO 记录通过扬声器播放的内容,并记录麦克风输入。我想知道最好的方法是否将每个单独录制到音频文件中的不同通道。如果是这样,哪些 api 允许我这样做,我应该使用什么音频格式。我正计划使用 ExtAudioFileWrite 来实际写入文件。

谢谢

【问题讨论】:

【参考方案1】:

如果您拥有的两个轨道都是单声道,16 位整数,采样率相同:

format->mFormatFlags = kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked;
format->mBitsPerChannel = 16;

您可以将这些轨道组合到 2 通道 PCM,只需将一个轨道的样本与另一个轨道的样本交替。

[short1_track1][short1_track2][short2_track1][short2_track2] 等等。

之后,您可以使用 ExtAudioFileWrite 将此样本写入输出文件。该文件当然应该是 2 通道 kLinearPCMFormatFlagIsSignedInteger | kLinearPCMFormatFlagIsPacked

如果其中一个轨道是立体声(我认为从 iphone 麦克风录制立体声不合理),您可以通过取 2 个通道的平均值或跳过它的每个第二个样本将其转换为单声道。

【讨论】:

【参考方案2】:

您可以从 RemoteIO 音频单元的播放和录制回调缓冲区中分别保存 PCM 数据,然后使用您自己的混音器代码(DSP 代码)将它们混合,然后再将混合结果写入文件。

您可能需要也可能不需要自己进行回声消除(高级 DSP 代码)。

【讨论】:

以上是关于在 iPhone 上录制播放和麦克风的主要内容,如果未能解决你的问题,请参考以下文章

如何防止iphone麦克风录制播放的声音?

使用 iPhone SDK 同时播放和录制声音?

在 iOS 中通过蓝牙播放时从内置麦克风录制

录制和播放从麦克风录制的音频流

同时录制音频和播放 iPod?

仅从 iphone 扬声器(不包括麦克风)录制音频输出