运维开发网

路由iPhone音频声音

运维开发网 https://www.qedev.com 2020-05-23 20:20 出处:网络 作者:运维开发网整理
我有一个应用程序,可以同时收听和播放声音.默认情况下,声音输出通过耳机.所以我使用以下代码通过扬声器进行路由: UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker; AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(a
我有一个应用程序,可以同时收听和播放声音.默认情况下,声音输出通过耳机.所以我使用以下代码通过扬声器进行路由:

UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute, sizeof(audioRouteOverride), &audioRouteOverride);

这很好用.但现在,我想在连接耳机或外接扬声器时通过耳机传送声音.我怎么做到这一点?

理想情况下,当应用程序启动时,所有其他声音(即音乐等)应该静音.

谢谢!

为此,您必须在设置音频会话时添加属性侦听器:

AudioSessionAddPropertyListener(kAudioSessionProperty_AudioRouteChange, audioSessionPropertyListener, nil);

哪里

void audioSessionPropertyListener(void* inClientData, AudioSessionPropertyID inID,
                                          UInt32 inDataSize, const void* inData) {
          UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;

          if (!isHeadsetPluggedIn()) 
            AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
        }

BOOL isHeadsetPluggedIn() {
  UInt32 routeSize = sizeof (CFStringRef);
  CFStringRef route;

  OSStatus error = AudioSessionGetProperty (kAudioSessionProperty_AudioRoute,
                                            &routeSize,
                                            &route
                                            );



     if (!error && (route != NULL) && ([(NSString*)route rangeOfString:@"Head"].location != NSNotFound)) {
        NSLog(@"HeadsetPluggedIn");
        return YES;
      }
      NSLog(@"Headset_NOT_PluggedIn");
      return NO;
    }

因此,当耳机插入或拔出时,您会收到通知并更改音频输出方向.

扫码领视频副本.gif

0

精彩评论

暂无评论...
验证码 换一张
取 消

关注公众号