【问题标题】:iOS Novocaine play on speakeriOS Novocaine 在扬声器上播放
【发布时间】:2012-11-26 22:30:04
【问题描述】:

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

谢谢

【问题讨论】:

  • 我以前从未听说过Novocaine,很好的发现。您从哪里获得示例代码?
  • 提示:拔掉耳机。
  • @MichaelDautermann 这简直太棒了。
  • 对不起,我指的不是耳机,我指的是你用来和你打电话的人说话的耳朵,我想让声音在扬声器上播放
  • 这是我从中获取样本的地方:github.com/alexbw/novocaine/blob/master/…

标签: ios audio core-audio playback speaker


【解决方案1】:

我已经实现了这样的路线更改,它似乎有效。只需将sessionPropertyListener 替换为下面的代码并添加updateAudioRoute

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

【讨论】:

    【解决方案2】:

    几乎有同样的问题。 快速而肮脏的修复,添加这个:

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

    到 Novocaine.m 中 - (void)setupAudio 中 iOS 部分的末尾
    请注意,即使插入了耳机,这也会通过扬声器播放音频!

    在我看来,路由更改尚未实现,因为 -(void)selectAudioDevice 为空。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-10-15
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多