首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >iOS Novocaine在扬声器上播放

iOS Novocaine在扬声器上播放
EN

Stack Overflow用户
提问于 2012-12-09 14:19:47
回答 2查看 1.1K关注 0票数 2

我正在尝试使用Novocaine播放一些高性能的音频,但我找到的示例代码只在耳机中播放音频,但我希望它在扬声器上播放。这有可能吗?

谢谢

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2012-12-10 13:07:38

几乎也有同样的问题。快速和肮脏的修复,添加以下内容:

代码语言:javascript
复制
UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);

到您的Novocaine.m中-( iOS )setupAudio中的void部分的末尾

请注意,即使插入耳机,这也会通过扬声器播放音频!

在我看来,路由更改还没有实现,因为-(空)selectAudioDevice是空的。

票数 3
EN

Stack Overflow用户

发布于 2012-12-28 09:32:43

我已经实现了这样的路由更改,它似乎起作用了。只需用下面的代码替换sessionPropertyListener并添加updateAudioRoute即可。

代码语言:javascript
复制
void sessionPropertyListener(void *                  inClientData,
                             AudioSessionPropertyID  inID,
                             UInt32                  inDataSize,
                             const void *            inData){


    if (inID == kAudioSessionProperty_AudioRouteChange)
    {
        Novocaine *sm = (Novocaine *)inClientData;
        [sm checkSessionProperties];
        [sm updateAudioRoute];
    }
}

//Quick and dirty way to override the audioRoute whenever the audioRoute is changed.
- (void)updateAudioRoute {
  CFStringRef newRoute;
  UInt32 size = sizeof(CFStringRef);
  CheckError(AudioSessionGetProperty(kAudioSessionProperty_AudioRoute, &size, &newRoute), 
             "couldn't get new audio route");
  if (newRoute)
  {
    CFShow(newRoute);
    if (CFStringCompare(newRoute, CFSTR("ReceiverAndMicrophone"), (UInt32)NULL)== kCFCompareEqualTo)
    {
      UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_Speaker;
      AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
    }
    else if (CFStringCompare(newRoute, CFSTR("HeadsetInOut"), (UInt32)NULL) == kCFCompareEqualTo)
    {
      UInt32 audioRouteOverride = kAudioSessionOverrideAudioRoute_None;
      AudioSessionSetProperty (kAudioSessionProperty_OverrideAudioRoute,sizeof (audioRouteOverride),&audioRouteOverride);
    }
  }
}
票数 5
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/13785215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档