8

私のオーディオ分析機能は、iPhone (4) よりも iPad (2) の方が反応が良い。iPad ではより小さな音に敏感なようですが、iPhone では適切に応答するにはより大きな入力が必要です。これがマイクの配置、さまざまなコンポーネント、さまざまなソフトウェア構成、またはその他の要因によるものであるかどうかにかかわらず、アプリで制御できるようにしたいと考えています.

もちろん、すべてのオーディオ サンプルを乗算して、プログラムでゲインを適用することもできます。もちろん、それにはソフトウェアのコストもかかるため、次のようになります。

MacOS の場合と同様に、iOS のソフトウェアからマイクのゲインを制御することはできますか? これに関するドキュメントは見つかりませんが、どういうわけか見逃していることを願っています。

4

2 に答える 2

17

iOS6 以降では、AVAudioSession プロパティを使用できます

        CGFloat gain = sender.value;
        NSError* error;
        self.audioSession = [AVAudioSession sharedInstance];
        if (self.audioSession.isInputGainSettable) {
            BOOL success = [self.audioSession setInputGain:gain 
                                                     error:&error];
               if (!success){} //error handling
        } else {
            NSLog(@"ios6 - cannot set input gain");
        }               

iOS5 では、AudioSession 関数を使用してオーディオ入力ゲイン プロパティを取得/設定できます。

    UInt32 ui32propSize = sizeof(UInt32);
    UInt32 f32propSize = sizeof(Float32);
    UInt32 inputGainAvailable = 0;
    Float32 inputGain = sender.value;


    OSStatus err = 
        AudioSessionGetProperty(kAudioSessionProperty_InputGainAvailable
                            , &ui32propSize
                            , &inputGainAvailable);

    if (inputGainAvailable) {
    OSStatus err = 
        AudioSessionSetProperty(kAudioSessionProperty_InputGainScalar
                             , sizeof(inputGain)
                             , &inputGain);
    } else {
        NSLog(@"ios5 - cannot set input gain");
    }
    OSStatus err = 
        AudioSessionGetProperty(kAudioSessionProperty_InputGainScalar
                              , &f32propSize
                              , &inputGain);
    NSLog(@"inputGain: %0.2f",inputGain);

(エラー処理省略)

AVAudioSessionModeMeasurement入力ゲインの制御に関心がある場合は、オーディオ セッション モードを(ios5+6)に設定して、自動ゲイン制御を無効にすることもできます。

[self.audioSession setMode:AVAudioSessionModeMeasurement
                     error:nil];
NSLog(@"mode:%@",self.audioSession.mode);

これらの設定はかなりハードウェア固有であるため、可用性を想定することはできません。たとえば、iPhone3GS/ios6 と iPhone4S/ios5.1 ではゲインを変更できますが、ipadMini/ios6.1 では変更できません。iPhone3G と iPad mini では AGC を無効にできますが、iPhone4S ではできません。

于 2013-05-07T13:59:09.613 に答える
-2

これが役立つと思います:http://www.stefanpopp.de/2011/capture-iphone-microphone/

于 2012-06-03T15:30:12.140 に答える