0
Thumbsup

いい質問だ

0

Thumbsdown

うーん

端末の音楽再生と、アプリ内のサウンド再生を同時に行う方法

yhiroki
yhiroki 30

投稿日:2015-04-14 22:44:08

主にiOS向け。SDK 3.5.1.GA使用。

ゲームアプリ等で下記のような仕様がよくあると思われます。
1: 端末で音楽再生を行っていない場合、アプリ内で音楽と効果音を再生する。
2: 端末で音楽再生を行っている場合、アプリ内で効果音のみを再生する(端末の音楽再生はそのまま)

Titaniumでこのような仕様、特に2を実現する方法はあるのでしょうか?
Ti.Media.createSoundでサウンドオブジェクトを作ってplayしているのですが、端末の音楽再生を止めてしまい、2を実現できません。

ご存知の方がいらっしゃいましたらご教示いただけますと幸いです。



回答

yagi_
yagi_
2540
Tcad_icon Tcmd_icon Tce_icon

Thumbsup

いい回答

0

Thumbsdown

うーん

audioSessionCategoryを設定していますか?以前はaudioSessionModeという名前でしたが、これによって他のアプリの再生中の音をどうするか決めることができます。

Titanium.Media.AUDIOSESSIONCATEGORYSOLOAMBIENTがデフォルトですが、今回のようなケースではTitanium.Media.AUDIOSESSIONCATEGORY_AMBIENTが該当すると思います。このプロパティは再生するTi.Mediaオブジェクトがまだ作成される前に指定しておく必要があります。

iTunesで音楽を再生しながら以下のコードは動作しました。

Ti.Media.setAudioSessionCategory(Ti.Media.AUDIO_SESSION_CATEGORY_AMBIENT);
$.index.addEventListener('open', function(){
  var player = Ti.Media.createSound({
    url: '/no_means_no.wav',
    autoStart: false
  });
  $.sound.addEventListener('click', function(){
    player.play();
  });
});
$.index.open();

ちなみにView

<Alloy>
  <Window>
    <Button id="sound">ダメよ、ダメダメ</Button>
  </Window>
</Alloy>

ご回答ありがとうございます。試してみましたがうまくいきませんでした……。app.jsにTi.Media.setAudioSessionCategory(Ti.Media.AUDIO_SESSION_CATEGORY_AMBIENT);とだけ書いたのですが、音楽再生した状態でアプリを起動すると、それだけで再生が止まってしまいました。他になにか必要な設定等あるのでしょうか。 --- yhiroki

同じ人がいましたね。 https://developer.appcelerator.com/question/180888/ambient-sound-still-silencing-background --- yagi_

同様の症状ですね。"Sometimes it works perfectly"とありますが、私の場合は一度も成功しませんでしたが。。いずれにせよ、titaniumのバグなのでしょうかね。 --- yhiroki

回答を編集しました。起動時に設定したらちゃんと動作していました。もともと、アプリの起動時のdelegateで指定するものなので、タイミングもあるのかもしれません。 --- yagi_

ご丁寧にありがとうございます。しかし、やはり私の環境では、ミュージックで再生中の音楽がアプリ起動時に止まってしまいました……。app.jsの一行目に書いているのでタイミングは問題なさそうなんですけどね。 アプリ起動→サスペンド→ミュージックで音楽再生→アプリレジュームの手順を踏むと、音楽再生が止まらずにアプリのサウンド再生ができたのですが。 惜しいところまで来ている気がするので、もう少し試してみます。 --- yhiroki

ログインすると回答することができます。