「語学学習支援プレイヤー」のアップデート、ついに完成した!
・バックグラウンドでのオーディオ再生ができるようになった
・再生速度変更機能がついた!
ようやくできた。よかった。
できあがるまでの状況をふりかえってみよう。
6月終わった時点での状況
アプリ開発、2014年6月進捗状況 | nackpan Blog
この時点で、再生速度の変更の試作、バックグラウンド再生の試作ができた。
また、無音位置を保存しておくことによって同じファイルの2回目以降はすばやく無音位置を調べる機能を作成した。
7月、8月
選曲してすぐにバックグラウンドへ移行した場合、background taskを用いてその間に無音位置を調べる処理を行うようにした。
初回の無音位置を調べる処理を高速化。
2分程度のファイル45個を選曲した場合、90秒くらいかかっていたのが40秒くらいになった。
その後は、seekしたあと再生箇所がずれて始まってしまう問題と、バックグラウンドへ移行して再生が継続されず止まってしまう問題を解消しようとするがなかなかうまくいかない。8月末には、seekの問題は解消する。
9月
バックグラウンドへ移行して再生が継続されず止まってしまう問題の解消。
バックグラウンドでは、できることに制限がある。オーディオ再生は可能。無音位置の調査部分はバックグラウンドではできない。
ということから、バックグラウンドでの再生について、当初は無音位置の調査が終わってからバックグラウンド再生ができるようになる、としようとしていた。しかし、それでは、選曲時に2分のオーディオアイテムを50個選んだ場合だと、初回数十秒、2回目以降も5,6秒たたないとバックグラウンド移行できない。実際に試してみると、選曲してすぐにバックグラウンドへ移行できないのは、使いづらい。
選曲してすぐにバックグラウンド移行するには?
バックグラウンドに移行時、beginBackgroundTaskWithExpirationHandlerを宣言すると、限定された時間ではあるが(iOS7だと180秒)、処理を継続することができる。
このbackground taskを使って無音位置の調査を継続する。これで、選曲後にすぐホームボタンを押して、バックグラウンド移行しても大丈夫。無音位置の調査が終了したら、background taskを終了して、バックグラウンドオーディオ再生オンリーに移行するようにした。
バックグラウンド移行時に、再生が止まってしまう現象が発生。
これの対処に苦労する。
たとえば。「設定画面」で、ホームボタンを押してバックグラウンドに移行しようとすると
再生がとまってしまう。これに関しては、「基本画面」のviewControllerにバックグラウンド用コントロールを書いていたので、resingActive時にpopToRootViewControllerして「基本画面」に戻るようにした。しかし、それでも、うまくいかない。よく調べてみるとpopToRootViewControllerをアニメーションなしでやっても、元の画面に戻るまでいくらか時間がかかるので、「基本画面」に戻って来たのを確認してからプレイヤーを再生するようにした。そうしたら上手くいった。
などのように対処していってきちんと動くようになった。
きょうダウンロードさせていただきました。近々バックグラウンド再生ができるようになるんですね。
ところで、こちらのアプリは「ミュージック」に入っているデータしか再生できないのでしょうか?
語学の音声ファイルを「ミュージック」に入れてしまうと、シャッフル再生のとき邪魔になるので、iTunesのファイル共有で入れられるとたいへん嬉しいのですが……。
なかしまさん、コメントありがとうございます。
itunesのファイル共有で取り込んだデータを再生する機能について、調査してみてできるようでしたら実装したいと思います。
ありがとうございます。
期待して待ちます!
iTunesファイル共有のオーディオファイルを再生する機能を追加したバージョンをappleに提出しました。
現在appleの審査が大変混雑しているので、2-3週間程度(あるいは、もっとかかってしまうかも…)お待ちいただくことになると思います。ご了承ください。