2

複数のトラックを録音して互いに再生するための小さなアプリを書いています。私はPlaybackAndRecordモードを使用しており、出力をメインスピーカーにルーティングしています。問題は、下部のマイクがまだ入力にも使用されていることです。そのため、録音すると、新しいトラックで他のトラックからの出力が非常に大きくなります。これが私がこれまでに持っているものです:

audioSession = [AVAudioSession sharedInstance];
[audioSession setCategory:AVAudioSessionCategoryPlayAndRecord error:nil];    
OSStatus propertySetError = 0;
UInt32 allowMixing = true;
propertySetError = AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(allowMixing), &allowMixing);

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

[audioSession setActive:YES error:nil];
4

1 に答える 1

3

AVAudioSessionを使用して、利用可能な入力を取得します。私のiPhone5ではこのように見えます。

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

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

次に、これらの入力の1つを使用して、次のようにavailableDataSourcesを取得します。

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

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

このiPhoneには、実際には3つのマイクがあります。前面上部、背面上部、下部です。これで、好みのデータソースを設定できます。

AVAudioSessionPortDescription *port = [AVAudioSession sharedInstance].availableInputs[0];
for (AVAudioSessionDataSourceDescription *source in port.dataSources) {
    if ([source.dataSourceName isEqualToString:@"Back"]) {
        [port setPreferredDataSource:source error:nil];
    }
}
于 2013-10-19T06:46:10.837 に答える