audio unit extensions 〜オーディオエフェクトのアプリ間共有〜
TRANSCRIPT
Audio Unit Extensions オーディオエフェクトのアプリ間共有
堤 修一 @shu223 2015.6.21 WWDC2015報告共有会@ネクスト
• iOS専業フリーランス
• ブログ『Over&Out その後』
• 著書
- 『iOS×BLE Core Bluetoothプログラミング』
- 『iOSアプリ開発 達人のレシピ100』
堤 修一
お手伝いしたプロダクト(BLE関連)
Music for the Deaf
iOS 9 / watchOS 2 関連のこれまでのアウトプット
おさらい
API Diffs から見る iOS 9 の新機能
• 基調講演やニュース記事を見るだけではわからない、iOS 9
の細かい新機能を「API Diffs」「What’s new」から抜粋
• http://d.hatena.ne.jp/shu223/20150609/1433813938
watchOS-2-Sampler
• watchOS 2 の新機能のサンプルコード集 - Accelerometer - Gyroscope - Pedometer - Heart Rate - Table Animations - Animated Properties - Audio Rec & Play - Picker Styles - Taptic Engine - Alert - Animation with Digital Crown - Interactive Messaging - Open System URL - Audio File Player
• GitHub で公開中
- github.com/shu223/watchOS-2-Sampler
• 紹介記事
- d.hatena.ne.jp/shu223/20150614/1434313771
watchOS 2 新機能の細かい話5つ• watchOS-2-Sampler 実装にあたって気付いた細かい諸々について
- 2つのアセットカタログの 使い分け
- メディアデータの 保存場所
- WKAudioFilePlayer
- ウォッチ側 Bluetooth の (直接)利用
- Watch Connectivity のメッセージ送信可否の条件
• 『potatotips #18』での発表
• slideshare.net/t26v0748/uiux-watchos-2-3
• d.hatena.ne.jp/shu223/20150616/1434454680
UI/UX に影響の大きい watchOS 2 の新機能
• watchOS 2 の数ある新機能の中で、UI/UX に影響の大きそうな機能を3
つ抜粋して紹介
• 『UI Crunch #5』というデザイナーさん、ディレクターさんも来る勉強会での発表
- (なのでコードは出てきません)
• http://www.slideshare.net/t26v0748/uiux-watchos-2-3
Core Image の新機能
• iOS 9 の Core Image の新機能について紹介&デモ
- 文字認識
- 新フィルタ47種
• @『WWDC Afterparty Roppongi』
• slideshare.net/t26v0748/ios-9-core-image
• d.hatena.ne.jp/shu223/20150622/1434924215
今日の発表内容:
Audio Unit Extensions
※Appleの公開ドキュメントの範囲で発表します
Audio Unit とは?
Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク
Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク
• 低遅延での音声処理が可能
Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク
• 低遅延での音声処理が可能
• ユニット同士を繋げて複雑なオーディオ処理を実現可能
(図:iOS 5 プログラミングブック より)
Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク
• 低遅延での音声処理が可能
• ユニット同士を繋げて複雑なオーディオ処理を実現可能
• iOS 8 より AVFoundation に
AVAudioEngine が追加され、Audio Unit の利用ハードルがグッと下がった
(図:iOS 5 プログラミングブック より)
Audio Unit Extensions とは?
Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ
Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ
• Audio Unit をアプリ間で共有できる
Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ
• Audio Unit をアプリ間で共有できる
- 自作ユニットを他社のアプリでも使用できるようにする
Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ
• Audio Unit をアプリ間で共有できる
- 自作ユニットを他社のアプリでも使用できるようにする- 他社が制作したユニットを自分のアプリでも利用する
Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ
• Audio Unit をアプリ間で共有できる
- 自作ユニットを他社のアプリでも使用できるようにする- 他社が制作したユニットを自分のアプリでも利用する
• すなわち・・・
こういうことができるようになる!
Audio Unit のタイプはエフェクトだけではない
GarageBand が提供予定の AU Extension AU Instruments
まずは体験してみる:
Audio Unit Extensions 利用側の実装方法
準備• WWDC サンプルコード “AudioUnitV3Example” に入っている “FilterDemo” をインストールしておく
• このサンプルが Extension を contain している
利用可能なユニットのリストを取得• AVAudioUnitComponentManager の componentsMatchingDescription:
メソッドを利用
• AVAudioUnitComponent (Audio Unit のタイプや制作者等の情報を提供するクラス)のリストが得られる
FilterDemo が contain していた Extension も入っている
※NDAに配慮しスクリーンショットは会場のみとします
エフェクトを適用する1. 選択された AVAudioUnitComponent の
AudioComponentDescription (構造体)を取得
2. AVAudioUnit を instantiateWithComponentDescription:options: で生成
3. AVAudioEngine に attachNode
4. エフェクトノードと、プレイヤー・ミキサー等のノードを connect
※ このあたりの AVAudioEngine の基本的なサンプルは、iOS8-Sampler にも入っています →
Extension が提供するビューを表示する
Extension が提供するビューを表示する
• AUViewController
Extension が提供するビューを表示する
• AUViewController
- 要 CoreAudioKit
Extension が提供するビューを表示する
• AUViewController
- 要 CoreAudioKit
- 定義はこれだけ
Extension が提供するビューを表示する
• AUViewController
- 要 CoreAudioKit
- 定義はこれだけ
→ 所望の AUAudioUnit に対して requestViewController ~すると AUViewController オブジェクトを返してくれる(持っていなければ nil)
例)FilterDemo の Extension が提供するビュー
• 波形をドラッグしてカットオフ周波数とレゾナンスを変化させられる
• Auto Layout やタッチハンドラでビューサイズ変更が考慮されているので、画面の下半分に表示、といったことも可能
• バグ:再生中に波形をいじっても反映されない(どこかにちゃんと明記してあった)
※NDAに配慮しスクリーンショットは会場のみとします
Audio Unit Extensions 作成方法
• Xcode: [File] > [New] > [Target]
※NDAに配慮しスクリーンショットは会場のみとします
• Xcode: [File] > [New] > [Target]
Audio Unit Extension がない!!!!
※NDAに配慮しスクリーンショットは会場のみとします
→ Xcode テンプレートはまだないのでサンプルからコピペしてね
まとめ
まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる
まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる
• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる
iOS 9 の新機能
まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる
• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる
iOS 9 の新機能
- AVAudioUnitComponentManager・・・利用可能なユニットのリストの取得。ここに AU Extension も入ってくる
まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる
• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる
iOS 9 の新機能
- AVAudioUnitComponentManager・・・利用可能なユニットのリストの取得。ここに AU Extension も入ってくる
- AUViewController・・・Audio Unit Extension が提供するカスタムビュー。AUAudioUnit の requestViewController~ メソッドを呼ぶとそのオブジェクトを取得できる(提供してなければ nil)
まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる
• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる
iOS 9 の新機能
- AVAudioUnitComponentManager・・・利用可能なユニットのリストの取得。ここに AU Extension も入ってくる
- AUViewController・・・Audio Unit Extension が提供するカスタムビュー。AUAudioUnit の requestViewController~ メソッドを呼ぶとそのオブジェクトを取得できる(提供してなければ nil)
- AU Extensions の作成方法・・・まだテンプレートがない。デモからコピーしてくる
watchOS-2-Sampler
GitHub: shu223/watchOS-2-Sampler
Blog: watchOS 2 の新機能のサンプルコード集『watchOS-2-Sampler』
watchOS 2 新機能のサンプルコード集 - Accelerometer - Gyroscope - Pedometer - Heart Rate - Table Animations - Animated Properties - Audio Rec & Play - Picker Styles - Taptic Engine - Alert - Animation with Digital Crown - Interactive Messaging - Open System URL - Audio File Player