audio unit extensions 〜オーディオエフェクトのアプリ間共有〜

48
Audio Unit Extensions オーディオエフェクトのアプリ間共有 修一 @shu223 2015.6.21 WWDC2015報告共有会@ネクスト

Upload: shuichi-tsutsumi

Post on 30-Jul-2015

5.689 views

Category:

Mobile


3 download

TRANSCRIPT

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

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

堤 修一 @shu223 2015.6.21 WWDC2015報告共有会@ネクスト

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

• iOS専業フリーランス

• ブログ『Over&Out その後』

• 著書

- 『iOS×BLE Core Bluetoothプログラミング』

- 『iOSアプリ開発 達人のレシピ100』

堤 修一

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

お手伝いしたプロダクト(BLE関連)

Music for the Deaf

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

iOS 9 / watchOS 2 関連のこれまでのアウトプット

おさらい

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

API Diffs から見る iOS 9 の新機能

• 基調講演やニュース記事を見るだけではわからない、iOS 9

の細かい新機能を「API Diffs」「What’s new」から抜粋

• http://d.hatena.ne.jp/shu223/20150609/1433813938

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

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

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

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

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

UI/UX に影響の大きい watchOS 2 の新機能

• watchOS 2 の数ある新機能の中で、UI/UX に影響の大きそうな機能を3

つ抜粋して紹介

• 『UI Crunch #5』というデザイナーさん、ディレクターさんも来る勉強会での発表

- (なのでコードは出てきません)

• http://www.slideshare.net/t26v0748/uiux-watchos-2-3

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

Core Image の新機能

• iOS 9 の Core Image の新機能について紹介&デモ

- 文字認識

- 新フィルタ47種

• @『WWDC Afterparty Roppongi』

• slideshare.net/t26v0748/ios-9-core-image

• d.hatena.ne.jp/shu223/20150622/1434924215

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

今日の発表内容:

Audio Unit Extensions

※Appleの公開ドキュメントの範囲で発表します

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

Audio Unit とは?

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

Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク

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

Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク

• 低遅延での音声処理が可能

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

Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク

• 低遅延での音声処理が可能

• ユニット同士を繋げて複雑なオーディオ処理を実現可能

(図:iOS 5 プログラミングブック より)

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

Audio Unit とは?• Core Audio においてもっとも低レベル(ハードより)に位置するフレームワーク

• 低遅延での音声処理が可能

• ユニット同士を繋げて複雑なオーディオ処理を実現可能

• iOS 8 より AVFoundation に

AVAudioEngine が追加され、Audio Unit の利用ハードルがグッと下がった

(図:iOS 5 プログラミングブック より)

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

Audio Unit Extensions とは?

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

Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ

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

Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ

• Audio Unit をアプリ間で共有できる

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

Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ

• Audio Unit をアプリ間で共有できる

- 自作ユニットを他社のアプリでも使用できるようにする

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

Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ

• Audio Unit をアプリ間で共有できる

- 自作ユニットを他社のアプリでも使用できるようにする- 他社が制作したユニットを自分のアプリでも利用する

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

Audio Unit Extensions とは?• iOS 9 で追加された Extension Point のひとつ

• Audio Unit をアプリ間で共有できる

- 自作ユニットを他社のアプリでも使用できるようにする- 他社が制作したユニットを自分のアプリでも利用する

• すなわち・・・

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

こういうことができるようになる!

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

Audio Unit のタイプはエフェクトだけではない

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

GarageBand が提供予定の AU Extension AU Instruments

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

まずは体験してみる:

Audio Unit Extensions 利用側の実装方法

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

準備• WWDC サンプルコード “AudioUnitV3Example” に入っている “FilterDemo” をインストールしておく

• このサンプルが Extension を contain している

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

利用可能なユニットのリストを取得• AVAudioUnitComponentManager の componentsMatchingDescription:

メソッドを利用

• AVAudioUnitComponent (Audio Unit のタイプや制作者等の情報を提供するクラス)のリストが得られる

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

FilterDemo が contain していた Extension も入っている

※NDAに配慮しスクリーンショットは会場のみとします

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

エフェクトを適用する1. 選択された AVAudioUnitComponent の

AudioComponentDescription (構造体)を取得

2. AVAudioUnit を instantiateWithComponentDescription:options: で生成

3. AVAudioEngine に attachNode

4. エフェクトノードと、プレイヤー・ミキサー等のノードを connect

※ このあたりの AVAudioEngine の基本的なサンプルは、iOS8-Sampler にも入っています →

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

Extension が提供するビューを表示する

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

Extension が提供するビューを表示する

• AUViewController

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

Extension が提供するビューを表示する

• AUViewController

- 要 CoreAudioKit

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

Extension が提供するビューを表示する

• AUViewController

- 要 CoreAudioKit

- 定義はこれだけ

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

Extension が提供するビューを表示する

• AUViewController

- 要 CoreAudioKit

- 定義はこれだけ

→ 所望の AUAudioUnit に対して requestViewController ~すると AUViewController オブジェクトを返してくれる(持っていなければ nil)

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

例)FilterDemo の Extension が提供するビュー

• 波形をドラッグしてカットオフ周波数とレゾナンスを変化させられる

• Auto Layout やタッチハンドラでビューサイズ変更が考慮されているので、画面の下半分に表示、といったことも可能

• バグ:再生中に波形をいじっても反映されない(どこかにちゃんと明記してあった)

※NDAに配慮しスクリーンショットは会場のみとします

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

Audio Unit Extensions 作成方法

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

• Xcode: [File] > [New] > [Target]

※NDAに配慮しスクリーンショットは会場のみとします

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

• Xcode: [File] > [New] > [Target]

Audio Unit Extension がない!!!!

※NDAに配慮しスクリーンショットは会場のみとします

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

→ Xcode テンプレートはまだないのでサンプルからコピペしてね

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

まとめ

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

まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる

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

まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる

• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる

iOS 9 の新機能

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

まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる

• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる

iOS 9 の新機能

- AVAudioUnitComponentManager・・・利用可能なユニットのリストの取得。ここに AU Extension も入ってくる

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

まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる

• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる

iOS 9 の新機能

- AVAudioUnitComponentManager・・・利用可能なユニットのリストの取得。ここに AU Extension も入ってくる

- AUViewController・・・Audio Unit Extension が提供するカスタムビュー。AUAudioUnit の requestViewController~ メソッドを呼ぶとそのオブジェクトを取得できる(提供してなければ nil)

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

まとめ• Audio Unit を用いると、ユニット同士を繋げて複雑なオーディオ処理を低遅延で実行することができる

• Audio Unit Extensions は、Audio Unit をアプリ間で共有できる

iOS 9 の新機能

- AVAudioUnitComponentManager・・・利用可能なユニットのリストの取得。ここに AU Extension も入ってくる

- AUViewController・・・Audio Unit Extension が提供するカスタムビュー。AUAudioUnit の requestViewController~ メソッドを呼ぶとそのオブジェクトを取得できる(提供してなければ nil)

- AU Extensions の作成方法・・・まだテンプレートがない。デモからコピーしてくる

Page 48: Audio Unit 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