【アプリ奮闘記】標準の音楽アプリにない機能を盛り込みました
こんにちは、おぐえもんです。
ここ数日は相変わらず音楽アプリ作りをしていました。
主にプレイヤー部分の機能を設計し、再生面においてはそこらへんのプレイヤー並、もしくはそれ以上の機能を備えられました(多分)。
今回加えた機能はこんな感じ。
ロック画面やコントロールセンターに表示するアレ
音楽を聴くときに一々アプリを起動させるのも面倒なので、ロック画面などからの操作を受け付けるようにしました。
あれって、iOS が勝手にやってくれているわけでなく、開発者がきちんとコードを書いて実装していたのですね。(確かにアプリによったらこのへんが超適当だったりするけど…)
ちなみに、音楽の情報をログイン画面などに表示させたかったら、「MPNowPlayingInfoCenter」というクラスを呼び出し、ログイン画面から再生・次の曲への移動などの操作をしたい場合は、「MPRemoteCommandCenter」というクラスを呼び出すらしいです。コードは決して多くないけど、プレイヤーの相性との問題でまあまあハマって泣きそうでした。
ジャケットなどのページ表示
プレイヤーのジャケットをスワイプすると、再生に関する設定画面などに移れるようになりました。
画面遷移は「Segue」とかいうものしか知らなかったので、画面に小窓を作る方法や、ページ遷移を可能にする方法を学べました。
音楽が変わった時などの画面表示の変更にかなり手間取り、これもまあまあ時間がかかりました(多分 6 時間くらい)
これも開発経験者じゃないと分からないネタですが、あるクラスで生じた出来事を他のクラスにお知らせする「NSNotification」クラスが最高に便利で終始感動しました。
再生時の設定
先ほどの画像の右側にある通り、ジャケットをスワイプすると出てくる設定画面で、再生速度や左右の音量(パン)などを変更できるようにしました。
この設定を実装するにあたって、プレイヤーを実現するために用いるクラスを、今までの「MPMusicPlayerController」から、「AVAudioPlayer」に改める必要が生じ、ここでプログラムを大リフォームすることになりました(泣)
今までの設計(MPMusicPlayerController を使ったもの)は、「ロック画面やコントロールセンターに表示するアレ」の時にも色々な不具合の原因として疫病神的な存在を放っていたから仕方ないね…
スライダーの使い方は音量調整機能の時に学んでいたし、設定の方法もプレイヤーに値を設定するだけの簡単なものだったので、設定機能の実装自体は割と一瞬でした(1 時間弱くらい)。
再生速度が自在かつ手軽に変更できるだけで既に俺得すぎるので、早速耳コピ用プレイヤーとして使用しています ♪
再生時間の表示・変更
プレイヤーの機能としてとして必ず備わっているのに、未だ実装していなかった再生時間関連の機能を盛り込みました。
再生時間に応じてスライダーが動き、また、スライダーを動かすことで再生している場所を自在に動かせます。これもスライダーゲーなので、割と時間はかかっていません(1 時間ちょっと)。
1 秒ごとに画面を更新する必要が生じるので、指定時間ごとに処理を呼び出す「Timer」クラスが重宝しました(^^)
おわり
今後の目標は、指定した再生時間の間をループする「AB 間ループ」機能の実現と、画面遷移に耐えられるプレイヤー作り(今は画面が変わると再生が止まってしまいます)とします。
選曲機能がまだまだ不足しているのと、デザインがアレなのを除くと、おおよそ音楽アプリとしての体裁が整い始めてきました。3 月中に完成&公開できたら嬉しいな〜