iPhone 4,录制后的音频级别问题

时间:2013-09-07 07:13:14

标签: iphone ios audio

我正在开发一个需要录制和播放音频的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);
     }

这很好用,但这会导致问题,如果用户将手机静音,仍会播放音频(也可以在应用中播放其他声音)

是否有可能检测音频是否静音?如果是这样,我们就不会执行上面的代码了。

1 个答案:

答案 0 :(得分: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;
    }