1

オーディオの録音と再生が必要な iOS アプリを開発しています。iPhone 4 では、録音後にオーディオ レベルが大幅に低下していることに気付きました。これは、私がここで見つけたコードを使用したときに修正されました: iOS - AVFoundation を使用してサウンドを録音した後、iPhone のサウンド レベルが低い

 if(!IS_IPHONE_5){
         UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
         AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
        UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
         AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
     }

これはうまく機能しますが、ユーザーが自分の電話をミュートした場合、オーディオがまだ再生されるという問題が発生します (アプリ内の他のサウンドも)。

オーディオがミュートされているかどうかを検出することは何とか可能ですか? もしそうなら、上記のコードを実行しないようにします。

4

1 に答える 1

1

この方法で確認できるかもしれません

CFStringRef state = nil;
UInt32 propertySize = sizeof(CFStringRef);
AudioSessionInitialize(NULL, NULL, NULL, NULL);
OSStatus status = AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);

if (status == kAudioSessionNoError)
{
    return (CFStringGetLength(state) == 0);   // YES = silent
}
return NO;

そして修正された方法は

-(BOOL)silenced {
     #if TARGET_IPHONE_SIMULATOR
         // return NO in simulator. Code causes crashes for some reason.
     return NO;
     #endif

    CFStringRef state;
    UInt32 propertySize = sizeof(CFStringRef);
    AudioSessionInitialize(NULL, NULL, NULL, NULL);
    AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &propertySize, &state);
    if(CFStringGetLength(state) > 0)
        return NO;
    else
        return YES;
    }
于 2013-09-07T07:20:28.433 に答える