このページの本文へ

Swift Playgroundsで学ぶiOSプログラミング第56回

どこからでも再生可能

ポジショニング自在のオーディオプレーヤーを作る

2017年10月02日 17時00分更新

文● 柴田文彦 編集●吉田ヒロ

  • この記事をはてなブックマークに追加
  • 本文印刷

 前回から、比較的低レベルのフレームワーク、AVFoundationを使ったオーディオプレーヤーを作成しています。前回は、単にオーディオファイルを再生する機能から始めて、再生ボリュームとパン(左右バランス)の調整機能、さらにはレート(再生スピード)の変更機能を実現しました。

 再生は途中で一時停止することはできるものの、全体の中のどこを再生しているのか表示するものはなく、任意の場所に戻ったり、先に進めて再生したりする機能もありませんでした。こうした不足していると思われる機能を補うのが今回の主な目的です。

 今回は、スライダーをもう1本追加して再生位置をコントロールできるようにします。再生中でも、ユーザーがスライダーを動かせば、再生位置(時間)がスキップして、強制的にスライダーのツマミの位置から続きを再生するようにします。ただ、それだけだと再生中にスライダーは止まったままで自動的には動きません。そのままでは、どこを再生しているかわからないだけでなく、スライダーを動かして再生位置を指定する場合にも、前後関係がズレたりして不便です。

 そこで今回は、プレーヤーの再生の進行に合わせて、さらにスライダーのツマミの位置が自動的に動くようにします。左端から始まった、右端まで行けば再生も終了して、スライダーのツマミも元の左端に戻るというのが目指す動作です。

再生位置を指定するスライダーを加える

 まずは、スライダーを1本追加しましょう。このプログラムのユーザーインターフェースは前回からスライダーだらけですが、これまでのスライダーの下にさらに1本付け加えます。ただし、前回のレートのスライダーのすぐ下には再生時間を表示するラベルを置き、新たなスライダーはさらにその下に配置することにします。

 まずは、UILabelのtLabelとUISliderのtSliderをビューコントローラーのプロパティとして追加します。

前回のプログラムにラベル(tLabel)とスライダー(tSlider)を1本ずつ追加します。また、ビューコントローラーにAVAudioPlayerDelegateのプロトコルを追加して、AVAudioPlayerのデリゲートにします。これは再生終了のイベントを受けるためです

 ここではもう1つ、このビューコントローラーをAVAudioPlayerDelegateに指定していることにも注目してください。これは、AVAudioPlayer本体から呼び出されるメソッドを定義するためです。目的は単純で、それによって再生が終わった時にボタンのタイトルを「Play」に戻したり、今回追加するスライダーのツマミを左端に戻したりするのです。これらの実際の処理については、少し後で改めて説明します。

 新たなスライダーの上に配置するラベルtLabelの初期設定では、テキストのアライメントを中央に設定してから、ビューに追加しています。

tLabelでは、textAlignmentを.centerに指定して文字列を中央揃えにします。文字列の長さが変化しても画面の中央に表示するためです。tSliderのターゲットとしては、tSliderMovedメソッドを指定しています。このメソッドは、もう少しあとで記述します

この連載の記事

週間ランキングTOP5

ASCII倶楽部会員によく見られてる記事はコレだ!

ASCII倶楽部の新着記事

会員専用動画の紹介も!