ストリーミングはほとんどのブラウザと
Developerアプリで視聴できます。
-
AVAudioEngineの新機能
AVAudioEngineは、オーディオのリアルタイムキャプチャ、処理、再生を可能にします。このセッションでは、音声処理やスペーシャルレンダリングモードの選択など、独自のオーディオAppでAVAudioEngine APIの強化点を活用する方法を紹介します。
リソース
-
ダウンロード
(音楽)
こんにちは Audio APIのアップデートの セッションへようこそ 私はピーター・バシル Core Audioチームのエンジニアです
AVAudioEngineの新機能から お話しします
いくつか新しいAPIと 改善点を加えました まずは Voice Processingのサポート 次に2つのノード AVAudioSinkNodeと AVAudioSourceNodeです そして 空間オーディオ レンダリングの改善
詳細を見ていきましょう
AVAudioEngineに VoiceProcessigモードを追加しました このモードは 主にエコーキャンセレーションと VoIPアプリケーションで使用します つまり― 有効にすると 入力されるオーディオ上で シグナルプロセッシングが 余分に適用されます すると デバイスから出る すべてのオーディオが消されます
そのためには 入力と出力の両ノードが Voice Processingモードである 必要があります
ですから I/Oのどちらかで モードを有効にすると エンジンが両ノードを認識し Voice Processingモードに 切り替えます
Voice Processingが使えるのは オーディオデバイスでの レンダリング時のみです 手動のレンダリングモードでは 使えません
有効化には I/Oノードのいずれかで setVoiceProcessingEnabledと設定 動的には有効にできません エンジンが停止している 必要があるのです
AV Echo Touchの Sample Code Projectでは Voice Processingの使用方法を 詳しく説明しています
では AVAudioEngine内の 新しいノードを見てみましょう AVAudioSourceNodeと AVAudioSinkNodeです 両ノードがユーザ定義の ブロックをラップすると アプリケーションが AVAudioEngineと― 送受信できるようになります
オーディオデバイスへの レンダリング中― ブロックはリアルタイムで動作します そのため ブロック内には メモリアロケーションや Libdispatchの呼び出しが あってはいけません
AVAudioSourceNodeを使って ノードにブロックを渡し オーディオデータを出力先に送ります これで 簡単に ノードを作成できます 完全なAudio Unitを実装し AVAudio Unitでラップする 必要はありません ノードはリアルタイムと― 手動レンダリングモードで 使えます
AVAudioSourceNodeは サンプルレートなどの Linear PCM変換をサポートします
出力が1つで 入力はありません
この短いスニペットは AVAudioSourceNodeの 使い方を表しています ブロックは イニシャライザの引数として渡され ノードの作成後は 接続されることができます 更に詳しい例は Sample Code Projectの Signal Generatorに記しています
次は AVAudioSinkNodeです AVAudioSourceNodeの 対の片方です インプットにつながる ノードチェーンからの 入力オーディオを受信する ブロックをラップします AVAudioSinkNodeは 入力チェーンに制限されています 要するに 入力ノードの ダウンストリームである必要があります フォーマット変換はサポートしません ブロック内のフォーマットは ハードウェアの入力フォーマットと 同じでなければなりません
VoIPアプリケーションにおいて 入力のリアルタイム処理にも便利です リアルタイムコンテキストで タップは動作しないので 通常タップでは不十分だからです
AVAudioSinkNodeの作り方を示した コードスニペットです AVAudioSourceNodeと そっくりです 主なステップは― ブロックと共にノードを初期化し エンジンに加え 入力ノードのダウンストリームに づなげます
次は 空間レンダリングの 改善点です 自動の空間レンダリング アルゴリズムを導入しました そのため 現在のAVAudioPlayerNodeは マルチチャンネルのオーディオ コンテンツの空間化に対応
自動の空間レンダリングの アルゴリズムを使うと ルートに最適な 空間化アルゴリズムが選択されます ヘッドフォンや スピーカーの設定を基に どのアルゴリズムが最適が 考えなくても済みます ヘッドフォン用にNear-Fieldと In-Headレンダリングが加わりました また 内蔵スピーカーの バーチャルサラウンドが iOSと2018年以降のノートブックで 利用可能です
ご覧になっているのが AVAudio3DMixingプロトコルの 新しいAPIです AVAudio3DMixingRendering Algorithmのenumは “auto”という新しいエントリです 更に output Typeで 出力タイプを指定できます
auto設定で 出力タイプが自動的に検出されます ただし リアルタイムモードに限ります
マルチチャンネルストリームの 空間化で Point-SourceとAmbienceBed レンダリングをサポートします また チャンネルに基づいた フォーマットと 第3オーダーまでの Higher-Order Ambisonicsもです
AVAudio3DMixingプロトコルに 2つの空間化プロパティを 追加しました sourceModeと pointSourceInHeadModeです
spatializeIfMonoは レガシーの動きをします マルチチャンネルストリームの バイパスと同じで 通過か出力フォーマットへの ダウンミックスを意味します pointSourceで オーディオはモノ出力し プレーヤーノード位置で レンダリング ambienceBedを使うと オーディオは3次元の世界に 固定されます プレーヤーノード位置から リスナー方向に回転が可能です
自動レンダリング アルゴリズムを用いた― ambienceBedの例です 次の確認が重要です プレーヤーと環境ノード間の 接続フォーマットが マルチチャンネルのレイアウトを 含んでいることです
次はAVAudioSessionの新機能です
AVAudioSessionPromptStyleは アプリケーションへのヒントで スタイル修正の 音声プロンプトを表示させます 例えば Siriが話している時や 電話の最中は― 音声ナビゲーションは紛らわしいです Siriが記録しても困ります プロンプトのスタイルの変化に注目し より使いやすくなるように プロンプトを修正すべきです プロンプトのスタイルは “.none” “.short” “.normal”の3種類 プロンプトを完全に無効にするには 短縮されたプロンプトか 標準のプロンプトを使います
AVAudioSessionの 他の改良点もみましょう デフォルトでは オーディオレコーディング中― ハプティクスとシステム音を ミュートにします 新しいプロパティでは レコーディング中にも これらの音を許可します オーディオ入力のセッション中もです 使用するsetterは allowHapticsAndSystemSounds DuringRecordingです
詳しい情報は デベロッパWebサイトにて
ありがとうございました
-
-
特定のトピックをお探しの場合は、上にトピックを入力すると、関連するトピックにすばやく移動できます。
クエリの送信中にエラーが発生しました。インターネット接続を確認して、もう一度お試しください。