2012-04-25 18 views
14

iPhoneでサイレントモードでもサウンドを再生したいです。 (iOS用3.0+)iPhoneのサイレントモードでAVAudioPlayerを使用してサウンドを再生する方法

それは(AVAudioSessionを使用せずに)AVAudioPlayerを使用して行うことができ

事前に

感謝。

+4

をトリックを行います。ユーザーは明示的に無音を要求しました! –

+0

なぜAVAudioSessionがないのですか? –

+2

@JonathanGrynspan - ユーザーが沈黙を要求したときに忘れてしまったのは当然ですが、AV性格のアプリを作成すると、この種のレビューで氾濫します: "オーディオはうまくいきません☆☆☆☆☆" –

答えて

27

実際、これを行うことができます。これは、オーディオセッションを通じて制御され、AVAudioPlayerとは関係ありません。なぜAudioSessionを使いたくないのですか?彼らは一緒に素敵な遊び...

あなたのアプリケーションでは、あなたは、オーディオセッションを初期化する必要がありますあなたはまた、再生するオーディオの種類を示すことができます。あなたが音楽プレーヤーなら、リング/サイレントスイッチが有効になっていても、ユーザーはの音声を聞きたいと思うのは意味があります

AudioSessionInitialize (NULL, NULL, NULL, NULL); 
    AudioSessionSetActive(true); 

    // Allow playback even if Ring/Silent switch is on mute 
    UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback; 
    AudioSessionSetProperty (kAudioSessionProperty_AudioCategory, 
          sizeof(sessionCategory),&sessionCategory); 

は、私はこの非常にことを行うアプリを持っている、とオーディオを再生するAVAudioPlayerを使用して、着信/サイレントスイッチを有効にすると、私はオーディオを聞くことができます。 Iが正常に上記のコードを使用私は上記アプリにおいて

UPDATE(2013年11月6日)

、Iは(しばらく)同じことを達成するために、代わりに次のコードを使用しています結果:

 
     AVAudioSession *audioSession = [AVAudioSession sharedInstance]; 
     NSError *error = nil; 
     BOOL result = NO; 
     if ([audioSession respondsToSelector:@selector(setActive:withOptions:error:)]) { 
      result = [audioSession setActive:YES withOptions:0 error:&error]; // iOS6+ 
     } else { 
      [audioSession setActive:YES withFlags:0 error:&error]; // iOS5 and below 
     } 
     if (!result && error) { 
      // deal with the error 
     } 

     error = nil; 
     result = [audioSession setCategory:AVAudioSessionCategoryPlayback error:&error]; 

     if (!result && error) { 
      // deal with the error 
     } 

この回答の最新のコメントに照らして、これを代替として投稿したいと考えました。 :-)

+0

ありがとうあなたの応答は、それは非常にうまくいった:) – Nima

+0

それを聞いてうれしい。 :-) –

+0

私はこのメソッドを使用していましたが、今はもう動作していないようです。他に誰かがこれに気付いたのですか? –

22

MarkGranoff's solutionが正しいです。ただし、Cの代わりにObj-Cで行うことをお望みなら、次のようにも動作します:

NSError *error = nil; 
    [[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:&error]; 
    [[AVAudioSession sharedInstance] setActive:YES error:&error]; 
+0

ありがとうございました。私はこれを達成するためにObj-Cコードを好む:)完全に動作する – iOSAppDev

+0

コードのエラーチェックを削除してもObj-Cにならない、あなたのansはMarkGranoffオリジナルのansと同じです – Thiru

+0

@Thiru今この回答は無関係です。しかし、それはマークの編集の前に掲載されました。 –

3

上記の答えは正しいです。以下はSwift版です。

do { 
    try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
    //print("AVAudioSession Category Playback OK") 
    do { 
     try AVAudioSession.sharedInstance().setActive(true) 
     //print("AVAudioSession is Active") 
    } catch _ as NSError { 
     //print(error.localizedDescription) 
    } 
} catch _ as NSError { 
    //print(error.localizedDescription) 
} 
0

これは、単にデバイスをサイレントモードにある場合は、サウンドを再生しません(AVAudioSessionを使用して)

try AVAudioSession.sharedInstance().setCategory(AVAudioSessionCategoryPlayback) 
try AVAudioSession.sharedInstance().setActive(true) 
関連する問題