iPhone上的立体声录音

时间:2013-10-19 06:24:17

标签: ios avfoundation core-audio audiounit

iPhone 5有三个麦克风 - 顶部正面,顶部背面和底部。我想同时记录所有这些信号处理。我试了好几天都没有成功。

使用AVAudioSession,我可以看到麦克风:

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs);

  "<AVAudioSessionPortDescription: 0x14554400, type = MicrophoneBuiltIn; name = iPhone Microphone; UID = Built-In Microphone; selectedDataSource = Back>"

NSLog(@"%@", [AVAudioSession sharedInstance].availableInputs[0].inputDataSources);

  "<AVAudioSessionDataSourceDescription: 0x145afb00, ID = 1835216945; name = Bottom>",
  "<AVAudioSessionDataSourceDescription: 0x145b1870, ID = 1835216946; name = Front>",
  "<AVAudioSessionDataSourceDescription: 0x145b3650, ID = 1835216947; name = Back>"

我可以使用AVAudioSessionPortDescription -setPreferredDataSource:error:来记录三个中的一个。但我不能同时记录多个。如果我将输入通道的数量设置为2,我会从同一个麦克风中获得两个相同的音轨。

AVAudioRecorder有一个属性channelAssignments,它似乎应该可以工作,但AVAudioSession inputNumberOfChannelsmaximumInputNumberOfChannels都是1.属性channelAssignments是专为辅助麦克风而设计的多渠道。

我尝试使用低级AudioUnit,但我得到了相同的结果。我在AudioUnit上找不到任何属性来更改输入源。

任何帮助都将不胜感激。

1 个答案:

答案 0 :(得分:4)

我的理解,毕竟我的研究尝试做同样的事情,就是你所描述的 - 你不能更喜欢一个设备的多个数据源,因此你不能从多个内置麦克风录制立刻。如果有人能证明我错了,我非常希望听到它!

旁注:我似乎无法运行您的代码。如上所述,我得到了

Property availableInputs not found on object of type 'id'

即使在将您所拥有的内容压缩成不需要任何显式强制转换的格式之后:

NSLog(@"%@", [[[AVAudioSession sharedInstance] availableInputs][0] inputDataSources]);

我得到了SIGABRT:

-[AVAudioSessionPortDescription inputDataSources]: unrecognized selector sent to instance 0xd59dbe0'

您使用的是什么SDK,您的代码实际编译,更不用说运行?