SlideShare a Scribd company logo
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に配慮しスクリーンショットは会場のみとします
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜
→ 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

More Related Content

Audio Unit Extensions 〜オーディオエフェクトのアプリ間共有〜

  • 1. Audio Unit Extensions オーディオエフェクトのアプリ間共有 堤 修一 @shu223 2015.6.21 WWDC2015報告共有会@ネクスト
  • 2. • iOS専業フリーランス • ブログ『Over&Out その後』 • 著書 - 『iOS×BLE Core Bluetoothプログラミング』 - 『iOSアプリ開発 達人のレシピ100』 堤 修一
  • 4. iOS 9 / watchOS 2 関連の これまでのアウトプット おさらい
  • 5. API Diffs から見る iOS 9 の新機能 • 基調講演やニュース記事を見 るだけではわからない、iOS 9 の細かい新機能を「API Diffs」 「What’s new」から抜粋 • http://d.hatena.ne.jp/ shu223/20150609/1433813938
  • 6. 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
  • 7. 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
  • 8. UI/UX に影響の大きい watchOS 2 の新機能 • watchOS 2 の数ある新機能の中で、 UI/UX に影響の大きそうな機能を3 つ抜粋して紹介 • 『UI Crunch #5』というデザイナー さん、ディレクターさんも来る勉強 会での発表 - (なのでコードは出てきません) • http://www.slideshare.net/t26v0748/ uiux-watchos-2-3
  • 9. Core Image の新機能 • iOS 9 の Core Image の新機能について 紹介&デモ - 文字認識 - 新フィルタ47種 • @『WWDC Afterparty Roppongi』 • slideshare.net/t26v0748/ios-9-core-image • d.hatena.ne.jp/shu223/20150622/ 1434924215
  • 12. Audio Unit とは? • Core Audio においてもっとも低 レベル(ハードより)に位置す るフレームワーク
  • 13. Audio Unit とは? • Core Audio においてもっとも低 レベル(ハードより)に位置す るフレームワーク • 低遅延での音声処理が可能
  • 14. Audio Unit とは? • Core Audio においてもっとも低 レベル(ハードより)に位置す るフレームワーク • 低遅延での音声処理が可能 • ユニット同士を繋げて複雑なオー ディオ処理を実現可能 (図:iOS 5 プログラミングブック より)
  • 15. Audio Unit とは? • Core Audio においてもっとも低 レベル(ハードより)に位置す るフレームワーク • 低遅延での音声処理が可能 • ユニット同士を繋げて複雑なオー ディオ処理を実現可能 • iOS 8 より AVFoundation に AVAudioEngine が追加され、 Audio Unit の利用ハードルが グッと下がった (図:iOS 5 プログラミングブック より)
  • 17. Audio Unit Extensions とは? • iOS 9 で追加された Extension Point のひとつ
  • 18. Audio Unit Extensions とは? • iOS 9 で追加された Extension Point のひとつ • Audio Unit をアプリ間で共有できる
  • 19. Audio Unit Extensions とは? • iOS 9 で追加された Extension Point のひとつ • Audio Unit をアプリ間で共有できる - 自作ユニットを他社のアプリでも使用できるようにする
  • 20. Audio Unit Extensions とは? • iOS 9 で追加された Extension Point のひとつ • Audio Unit をアプリ間で共有できる - 自作ユニットを他社のアプリでも使用できるようにする - 他社が制作したユニットを自分のアプリでも利用する
  • 21. Audio Unit Extensions とは? • iOS 9 で追加された Extension Point のひとつ • Audio Unit をアプリ間で共有できる - 自作ユニットを他社のアプリでも使用できるようにする - 他社が制作したユニットを自分のアプリでも利用する • すなわち・・・
  • 24. GarageBand が提供予定の AU Extension AU Instruments
  • 27. 利用可能なユニットのリストを取得 • AVAudioUnitComponentManager の componentsMatchingDescription: メソッドを利用 • AVAudioUnitComponent (Audio Unit のタイプや制作者等の情報を提供 するクラス)のリストが得られる
  • 28. FilterDemo が contain していた Extension も入っている ※NDAに配慮しスクリーンショットは会場のみとします
  • 29. エフェクトを適用する 1. 選択された AVAudioUnitComponent の AudioComponentDescription (構造体)を取得 2. AVAudioUnit を instantiateWithComponentDescription:options: で生成 3. AVAudioEngine に attachNode 4. エフェクトノードと、プレイヤー・ミキサー 等のノードを connect ※ このあたりの AVAudioEngine の基本的なサンプ ルは、iOS8-Sampler にも入っています →
  • 34. Extension が提供するビューを表示する • AUViewController - 要 CoreAudioKit - 定義はこれだけ → 所望の AUAudioUnit に対して requestViewController ∼すると AUViewController オブジェクトを返してくれる(持っていなければ nil)
  • 35. 例)FilterDemo の Extension が提供するビュー • 波形をドラッグしてカットオ フ周波数とレゾナンスを変化 させられる • Auto Layout やタッチハンドラ でビューサイズ変更が考慮さ れているので、画面の下半分 に表示、といったことも可能 • バグ:再生中に波形をいじっ ても反映されない(どこかに ちゃんと明記してあった) ※NDAに配慮しスクリーンショットは会場のみとします
  • 37. • Xcode: [File] > [New] > [Target] ※NDAに配慮しスクリーンショットは会場のみとします
  • 38. • Xcode: [File] > [New] > [Target] Audio Unit Extension がない!!!! ※NDAに配慮しスクリーンショットは会場のみとします
  • 43. まとめ • Audio Unit を用いると、ユニット同士を繋げて複雑なオー ディオ処理を低遅延で実行することができる
  • 44. まとめ • Audio Unit を用いると、ユニット同士を繋げて複雑なオー ディオ処理を低遅延で実行することができる • Audio Unit Extensions は、Audio Unit をアプリ間で共有できる iOS 9 の新機能
  • 45. まとめ • Audio Unit を用いると、ユニット同士を繋げて複雑なオー ディオ処理を低遅延で実行することができる • Audio Unit Extensions は、Audio Unit をアプリ間で共有できる iOS 9 の新機能 - AVAudioUnitComponentManager・・・利用可能なユニットのリストの取 得。ここに AU Extension も入ってくる
  • 46. まとめ • Audio Unit を用いると、ユニット同士を繋げて複雑なオー ディオ処理を低遅延で実行することができる • Audio Unit Extensions は、Audio Unit をアプリ間で共有できる iOS 9 の新機能 - AVAudioUnitComponentManager・・・利用可能なユニットのリストの取 得。ここに AU Extension も入ってくる - AUViewController・・・Audio Unit Extension が提供するカスタムビュー。 AUAudioUnit の requestViewController∼ メソッドを呼ぶとそのオブジェクト を取得できる(提供してなければ nil)
  • 47. まとめ • Audio Unit を用いると、ユニット同士を繋げて複雑なオー ディオ処理を低遅延で実行することができる • Audio Unit Extensions は、Audio Unit をアプリ間で共有できる iOS 9 の新機能 - AVAudioUnitComponentManager・・・利用可能なユニットのリストの取 得。ここに AU Extension も入ってくる - AUViewController・・・Audio Unit Extension が提供するカスタムビュー。 AUAudioUnit の requestViewController∼ メソッドを呼ぶとそのオブジェクト を取得できる(提供してなければ nil) - AU Extensions の作成方法・・・まだテンプレートがない。デモからコピー してくる
  • 48. 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