iphone - 路由 iPhone 音频声音

标签 iphone objective-c avaudioplayer avaudiorecorder audiosession

我有一个可以同时收听和播放声音的应用程序。默认情况下,声音输出通过耳机。所以我使用以下代码通过扬声器路由它:

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

这很好用。但是现在,我想在连接耳机或外部扬声器时通过耳机传送声音。我将如何实现?

此外,理想情况下所有其他声音(即音乐等)都应在应用启动时静音。

谢谢!

最佳答案

为此,您必须在设置 Audio Session 时添加属性监听器:

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;
    }

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

关于iphone - 路由 iPhone 音频声音,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3678249/

相关文章:

iphone - 当应用程序更新时,NSUserDefaults 是否会被删除?

objective-c - Objective-C 中的术语 "scalar"和 "primitive"之间有区别吗?

objective-c - iOS中NSOrderedSet的JSON序列化

ios - AVAudioPlayer 和 AirPlay - 可能吗?

ios - 您可以同时使用 Storyboard和程序代码吗?

iphone - 按用户编辑 Uitableviewcell 内容

ios - 如何在 Swift 3.0 中通过 Segue 从子类传递变量和对象

objective-c - 为什么在尝试编译此代码时会出现错误 "error: unknown type name ' virtual'"?

ios - 在 iOS 上没有任何延迟地一个接一个地播放声音

ios - AVAudioPlayerNode 完成处理程序计时