6

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看起来应该可以工作的属性,但是 AVAudioSessioninputNumberOfChannelsmaximumInputNumberOfChannels都是 1。该属性channelAssignments是为具有多个通道的辅助麦克风设计的。

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

任何帮助,将不胜感激。

4

1 回答 1

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,您的代码实际上可以编译,更不用说运行了?

于 2014-01-16T10:33:53.947 回答