【问题标题】:iPhone 4, audio level issue after recordingiPhone 4,录音后的音频电平问题
【发布时间】:2013-09-07 07:13:14
【问题描述】:

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

这很好用,但这会导致问题,如果用户将他的手机静音,仍然会播放音频(以及应用程序中的其他声音)

是否可以通过某种方式检测音频是否静音?如果是这样,那我们就不要执行上面的代码了。

【问题讨论】:

    标签: iphone ios audio


    【解决方案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;
        }
    

    【讨论】:

    • 谢谢。我现在唯一的问题是,如果用户播放音频(收音机或 iTunes),然后他打开应用程序,那么音频就会停止。
    • @WouterDeRuyck:- 这是因为这是系统功能,所以音频控制器在启动时会滚动到它们。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-08-14
    • 1970-01-01
    相关资源
    最近更新 更多