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:
从三者之一进行记录。但是我不能同时录制多个。如果我将输入 channel 数设置为 2,我会从同一个麦克风获得两个相同的音轨。
AVAudioRecorder 有一个属性 channelAssignments
看起来应该可以工作,但是 AVAudioSession inputNumberOfChannels
和 maximumInputNumberOfChannels
都是 1。属性 channelAssignments
专为具有多个 channel 的辅助麦克风而设计。
我尝试使用低级 AudioUnit,但我得到了相同的结果。我在 AudioUnit 上找不到任何属性来更改输入源。
如有任何帮助,我们将不胜感激。
最佳答案
我的理解,在我的所有研究都试图做同样的事情之后,正是你所描述的 - 你不能为一个设备选择多个数据源,因此你不能从多个内置麦克风录音立刻。如果有人能证明我是错的,我非常乐意听到!
旁注:我似乎无法运行您的代码。正如所写,我得到
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 来实际编译您的代码,更不用说运行了?
关于ios - iPhone 上的立体声录音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19463103/