Swift Playgroundsで学ぶiOSプログラミング 第55回
AVKitの下層にあるAV Foundationを直接扱う
再生速度可変のオーディオプレーヤーを作る
2017年09月25日 17時00分更新
今回からまた新しいテーマでプログラミングを続けていきます。前回の最後に書いた今回の予告では、iOSのフレームワークの中の「なんとかキット」を使うことをほのめかしました。しかし厳密に言うと、それは少し訂正しなければなりません。今回使うのは「キット」と呼ばれるものではなく、それよりも下層にある「ファンデーション」と呼ばれるものだからです。
今回は、音声ファイルを読み込んで再生するオーディオプレーヤーを作るつもりです。そのための方法は何とおりも考えられます。その中で比較的上位の層にあるのがAVKitを使う方法です。名前としては、これまでに使ってきたさまざまなフレームワークと似ていてなじみのあるものかもしれません。一方、比較的下位の層にあるのがAV Foundationです。Foundation(基礎)というだけあって下層にあるのですが、プログラミングの作法が、これまでと比べてそれほど異なるわけではありません。
フレームワークというものは、概して上層にあるほど機能が豊富でプログラミングは楽ですが、カスタマイズはしにくく、融通が効きにくくなります。反対に下層のものほど自由度は高くなりますが、それだけプログラミングとしてやらなければならないことは多くなるものです。今回は、この連載にとってちょうどいいレベルとして、AV Foundationを選んだというわけです。
オーディオを再生する最小限のプログラム
AV Foundationを使うことに決めたとしても、それを実際に利用してプログラミングする際のアプローチはいろいろと考えられます。また、当然ながら、AV Foundationの持っている機能をどこまで引き出すかによっても、プログラミングの難易度は変わってきます。
手はじめに、オーディオファイルを読み込んで再生するための最小限のプログラムを書いてみましょう。使うのは、AVFoundationに含まれるAVAudioPlayerクラスです。とりあえずUIはなしで、プログラムが起動するとソースコードで指定したファイルを読み込んで再生を開始するというものです。
オーディオファイルのフォーマットは、iOSで普通に扱えるようなものなら大丈夫でしょう。MacのiTunesライブラリから、iCloundドライブ経由で、プレイグラウンドに追加しておくのが最も簡単です。このプログラムは、ビューコントローラーを使わないので、プレイグラウンドで音を出すために、ちょっとしたおまじないが必要です。以前にネットワークアクセスでも使った、プレイグラウンドのページのneedsIndefiniteExecutionというプロパティをtrueに設定する必要があるのです。
当然ですが、こんな簡単なプログラムでも、iOSの「ミュージック」アプリと同等の音質で再生できます。
この連載の記事
- 第100回 SceneKitの物理現象シミュレーションとアニメーションをARKitに持ち込む
- 第99回 「物理学体」と「物理学場」を設定して物理現象をシミュレーション
- 第98回 SceneKitのノードに動きを加えるプログラム
- 第97回 いろいろな形のノードをシーンの中に配置する
- 第96回 SceneKitの基礎シーンビュー、シーン、ノードを理解する
- 第95回 現実世界の床にボールや自動車のモデルを配置する
- 第94回 ARKitを使って非現実世界との融合に備える
- 第93回 ARKitが使えるiPadを識別するプログラム
- 第92回 Swift Playgrounds 2.1での問題点をまとめて解消する
- 第91回 iPadの内蔵カメラで撮影した写真を認識するプログラム
- この連載の一覧へ