iOS:音楽を止めずにゲーム

前回の記事の続き

挙動が複雑

前回の参考サイト「UIBackgroundModes key を定義しておきながら…」でUIBackgroundModesでは背景音は利用できないと記述されていましたが、私は利用できたから申請したわけです。なぜ?と思って色々調べたら予想以上に複雑な仕様であることが判明しました。

背景音とゲームの挙動確認

なんとアプリの立ち上げ順で挙動が変わるのです。大混乱です!。
以下の挙動は「弾幕の器」で確認。
まずは最初にミュージックで音楽を再生するパターン。OSはiOS6(古い..)
——————————————————-
・最初にミュージックを起動して音楽を再生
・ゲームを起動
↓↓↓
ミュージックの音楽はゲーム中も再生される。
ゲームのBGMは再生されないが、何故か第2階層のメニューに入るとBGMが再生される。この時もミュージックの音楽は再生を継続。対戦画面ではゲームのBGMはならない。
——————————————————-
続いてゲームを先に起動しておくパターン
——————————————————-
・ゲームを起動
・ホームに戻りミュージックで音楽を再生
・ゲームに戻る
↓↓↓
ミュージックの音楽は停止される。ゲームは通常通りBGMを再生
UIBackgroundModesを利用しても効果ないことが確認できました…。
——————————————————-
何故こんなややこしいことに?iOS6という古い環境だけなのかな?
新しいiPodTouchを購入してiOS8でも確認できるようにしないといけないかもしれない。
 

勘違い?

もう一度ネットで情報収集。まずは以下のサイトを参考に修正したが効果無し。
→参考:iOSアプリで音楽のバックグラウンド再生を許可する方法
上記サイト中のplistの設定値「App plays audio」と設定するとアーカイブのチェックが通らない。現在は「App plays audio or streams audio/video using AirPlay」が正しい値らしい。→参考:UIBackgroundModesでReject
 
この辺で、ふと思う。もしかして、この設定って作成した「アプリがバックグラウンドにまわった時でも自分の音を止めない」方法なのかな?他にも調べるとUIBackgroundModesを利用しない方法を発見。こっちか!
→参考:音楽再生時に、iPodアプリなどで再生している音楽を止めない方法
しかし上記の方法を試しましたが効果無し…。
  

Cocos2d-xだから?

さらに調べると「AVFoundationを使って」とか「AVFoundationフレームワークの読み込みが前提」と説明するサイトが複数見つかる。cocos2d-xでのサウンド再生は「SimpleAudioEngine」というのを利用している。これに合わせた設定があるのかな?
ということでCocos2d-xをキーワードに含めて検索すると以下のサイトが見つかりました。
→参考:iTunes音楽再生時のBGM制御 cocos2d-x 3.x
このサイトでのポイントは「AppDelegate.cpp」で設定しないとダメというものでした。「これか!」と思い、サイトのように設定しましたがダメでした…。
どうしたら良いのだろう…。
 

順番が問題だったみたい。できた!

AppDelegate.cppで設定する場所を一番最後(returnの直線)に設定したらOKでした。順番的に「Cocos2d-xのサウンドを再生した後で設定する」というのがポイントかも。
 
 
 

弾幕の器2:Appleから却下される…

reject
 

別アプリの音楽利用の制限

却下の理由は以下の通りで、簡単に言うと「指定外のマルチタスクは禁止だよ」ということらしいです。
——————————————–
2.16 – Multitasking Apps may only use background services for their intended purposes: VoIP, audio playback, location, task completion, local notifications, etc.
——————————————–
前作「弾幕の器」のiOSでのコメントで「別の音楽を聴きながら遊びたい」という意見があったので、それを可能な設定に挑戦しました(プログラム的な追加は必要なく、設定を1行追加するだけでした)。
しかし、それがマルチタスクの違反になりました(つまり音楽プレイヤーとゲームのマルチタスク)。上記の英文ではマルチタスクを認めるアプリの中にゲームはありません…。
 

UIBackgroundModes key

今回の却下の原因は「UIBackgroundModes key」という設定。調べたら同じ理由で却下された方を発見。というか「設定だけでは背景音は利用できない」ことを知る!
→参考:UIBackgroundModes key を定義しておきながら…
 

でも他のゲームでは実現できている

iOSのゲーム「東方幻霊夢」ではiTunesの音楽を消さずにプレイできているので、ゲームでもiTunesの音楽を停止せずに利用することは可能なはず。
 

リリースを優先

しかし、これ以上リリース日を先延ばしするわけにも行かないので、とりあえず指摘された設定を削除してすぐに申請をし直しました。マイナーバージョンが1.1になった修正アプリを以下の様にアップ済みです。また10日くらいかかりそうです…。
retry

弾幕の器2:Appleに申請した

弾幕の器2をAppleに申請しました。審査には10日くらいかかるので問題が無ければ来週の半ばにはリリースされると思います。申請には紹介サイトも必要なのでサイトも作成しました(本当はスマホ対応のページにすべきなのですが…)。
→紹介サイト:smartPhone App「弾幕の器2」
 
スクリーンショット 2015-09-08 0.18.30
 
「弾幕の器」はシューティングゲームの練習で作成したアプリで、あまり人気は出ないと思っていました。なのでアイコンは「弾幕の光」のボツアイコンを使い回しましていたりします。今回はアイコンを作り直そうとも思ったのですが面倒なので結局使い回しました。
 
さて、次はAndroidへの移植作業です。
 
 
 

弾幕の器2:アプリ完成

タイマー追加

兵装を利用して貰いたいのにダイヤ獲得の条件に「兵装を使い切らない」というのはおかしいので仕様を変更しました。タイマーを追加して規定時間以内にクリアすればダイヤを獲得できます。兵装は使い切ってOK。
 

動画で確認できるように兵装を利用しなくてもノーダメージでのクリアは可能ですが、規定時間以内にクリアするためには兵装の活用が必要になってきます。
 
あとはAppleに申請するための画像とかを作成して月曜日にでも申請しよう。最近は審査の通過に10営業日くらいかかるので9/15~18位のリリースになると思います。