2

Novocaine を使用して高パフォーマンスでオーディオを再生しようとしていますが、見つけたサンプル コードはイヤホンでのみオーディオを再生しますが、スピーカーで再生したいのですが、それは可能ですか?

ありがとう

4

2 に答える 2

5

このようなルート変更を実装しましたが、うまくいくようです。以下のコードに置き換え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);
    }
  }
}
于 2012-12-28T01:32:43.457 に答える
3

ほぼ同じ問題がありました。迅速で汚い修正、これを追加します:

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

- (void)setupAudio の Novocaine.m の iOS セクションの最後まで
ヘッドフォンが接続されていても、スピーカーからオーディオが再生されることに注意してください。

-(void)selectAudioDevice が空であるため、ルートの変更はまだ実装されていないようです。

于 2012-12-10T05:07:38.080 に答える