1

我正在开发一个需要录制和播放音频的 iOs 应用程序。我注意到在 iPhone 4 上录制后音频电平要低得多。当我使用我在此处找到的代码时,此问题已得到修复:iOS - iPhone sound level low after recording sound using AVFoundation

 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

may be you can check it this way

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;

and modified method is

-(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 回答