KOALOG.

アプリ制作ユニット「KOALAB.」のブログです。主にアプリ制作関連の技術ネタを書いていきます。

Audio Unit Hosting Guide for iOS About Audio Unit Hosting〜Audio Units Provide Fast, Modular Audio Processingについて

こんにちは、KOALAB.です。

 

Audio Unit Hosting Guide for iOS、まずはAbout Audio Unit HostingからAudio Units Provide Fast, Modular Audio Processingまでを翻訳しました。

 

のっけから結構アツいですね。

2つの大きな利点の2番目に書かれている内容が私的には一番面白いと思っています。

 

例えばギターとかやる人なら当たり前だと思いますが、ギターの音作りをするために、ギターからアンプへシールド(ケーブル)を繋ぐ間に、エフェクタをかませます。

歪んだ音にするディストーションとか、エコー効果をかけるディレイとか、いろいろなエフェクタをいろんなパターンで繋ぎ替えたりすることで、曲ごとに音を仕上げていくのですが、Audio Unitも同じ感じでUnit同士を適宜繋ぎ替えることで音に変化を与えます。分かってしまえば非常に直感的な機能だと思ってます。

 

別の例で言えば、KORGMS-20みたいなアナログシンセでは発振器とかフィルタといったモジュールをパッチ(ケーブル)で繋いで音を作っていくと思うんですが、Audio Unitで置き換えるとまさしくそのモジュールがAudio Unitであり、パッチを繋ぐ行為がAudio Processing GraphのAPIを使ってAudio Unit同士を接続することだと私は認識しています。

そして、その接続をリアルタイムに変更することができる訳ですから、アナログシンセをシミュレートするようなアプリにもAudio Unitは向いています。

 

 

まぁそういったアプリ作ってもなかなか広まりにくい訳ですが。。

BAND BOYもなかなか伸び悩んでます。。無料なので一回使っていただけると嬉しいです…!

 

 

ではでは。

公式リファレンス・ガイドの翻訳

こんにちは、KOALAB.です。

 

オーディオまわりの公式リファレンス・ガイドの翻訳をしていこうと思い、

まずは前に宣言したとおりAudio Unit Hosting Guideから始めていこうと思っています。

先に記事を用意しました。随時書き足していく予定です。

ブログの経験がないので変なやり方かもしれませんが。。

 

あと翻訳した記事のカテゴリは「リファレンス翻訳」にまとめていきます。

 

ではでは。

Audio Unit Hosting Guide for iOS

原文:https://developer.apple.com/library/ios/documentation/MusicAudio/Conceptual/AudioUnitHostingGuide_iOS/Introduction/Introduction.html

 

Audio Unitホスティングについて

iOSは音声信号処理プラグイン備えています。例えば、ミキシング、イコライザをかける、[チャンネル、サンプリングレートなどの]音声フォーマットを変換する、またリアルタイムに録音したり、再生を行う、波形データの書き出し、VoIP(Voice over Internet Protocol)のようなネットワーク越しのやり取り、などがあります。

その「Audio Unit」と呼ばれるパワフルで柔軟なプラグイン達をあなたのアプリから直接使うことができます。

 

Audio Unitは下図で示すAudio Processing Graphと呼ばれるAudio Unitを統括する機能と連携することで動作します。

図の例で言えば、一つ以上のコールバック関数を経てGraph内の最初のAudio Unitに音声信号を送り、各Audio Unitを個々にコントロール[EQのパラメータを変えたり、ミキサーのボリュームを変えたりとか]することで動作させます。

Graph内の最後のユニット、「I/O unit」はハードウェア出力と直接つながります。[つまり音を鳴らすために必ず要るUnit]

 

f:id:koalab:20140119010848p:plain

 

一目瞭然

 

Audio UnitはiOSのオーティオ構成の中で一番最下層のプログラミングレイヤーに位置するので、効率良く利用していくためには、他のiOSオーディオ技術で必要とされる以上の深い理解が必要となります。

ミックスされた音声をリアルタイムに再生する必要がある場合や、入出力のレイテンシを下げたい、または特定のAudio Unitを使用したい場合をのぞいて、まずはMedia PlayerやAV Foundation, OpenAL, Audio Toolboxといった上位層のフレームワークについてご覧ください。

こういった上位層の機能はAudio Unitを開発者が使いやすいような形にラッピングしたもので、さらに追加の重要な機能を備えています。

詳しくはMultimedia Programming Guideに記載されています。

 

 

Audio Unitは高速で、音声信号モジュールを備えています

 

Audio Unitを使用する大きな2つの利点は以下の通りです。

・「すばらしい反応性」

 [音声信号を書き出すための]レンダーコールバック関数ないでリアルタイム性の高いスレッドにアクセスすることができるため、最も高速な[レイテンシの少ない]信号処理が可能となります。楽曲のミックスや音声の入出力も同時に発生するようなケースで、Audio Unitを直接使用することが最も効果があります。

・「動的なルーティング」

 Audio Processing GraphのAPIはopaqueな型である「AUGraph」を中心に構成され、音声処理をしている間でもスレッドセーフな状況下で、各Audio Unitの接続を動的に変更することができます。

 Audio Processing Graph APIiOSの中で唯一この能力をもつオーディオAPIです。

 

Audio Unitのライフサイクルは以下のような順序になっています。 

1. 使用したいAudio Unitを定義したダイナミックリンクライブラリへの参照をプログラム実行中に取得します。

2. Audio Unitをインスタンス化します。

3. Audio Unitに使用したいユニットタイプ[EQとかReverbとか]を設定します。

4. Audio Unitを初期化します。

5. オーディオ処理を開始します。

6. Audio Unitをコントロール[ボリューム変えるとかパラメータ変更とか]します。

7. 使用し終わったらAudio Unitを破棄します。

 

Audio Unitは、レベル計測やボリューム操作、ミキシング、ステレオパンニングといった非常に便利な個々の機能を備えています。

Audio Unitを扱うことで、アプリにそういった機能をプラスできます。

しかしこれらの利点を得るために、Audio Unitのアーキテクチャや、レンダーコールバック関数、音声データフォーマットといった基本的な概念に関してもっと理解を深めていく必要があります。

 

~~~ここまで~~~

※Choosing a Design Pattern and Constructing Your App以降は翻訳中です。

 

このブログについて

初めまして。KOALAB.です。

 

KOALAB.はiPhoneアプリの制作ユニットです。

まだまだ出しているアプリは少ないですが、面白いアプリを

どんどん作っていきたいと思いますので、どうぞよろしくお願いします。

 

さて、このブログについてですが、iPhoneアプリを作っていく上で

知ったことやTipsなど技術ネタを投稿していきたいなと思っております。

 

特にオーディオ系の話に関しては得意な方ですから、まずはそこから

書いていこうと思います。

なかなかコアなことをしようと思うと情報が少ないですから、

分かりやすさを心がけて、開発者のみなさんの力になれればと思います。

 

オーディオでコアなことをしようと思ったら、やはり「Audio Unit」です。

これを使えるようになってくると、DJアプリとか結構な音楽アプリも作れます。

KOALAB.で出している「KARAOKE BOY」や「BAND BOY」もAudio Unitの機能を

フルに活用しています。

 

また、iOS7から搭載された「Inter App Audio」はAudio Unitに関わる機能なので

Audio Unitの仕組みを知っておく必要があります。

BAND BOYではInter App Audioに対応しましたが、Inter App Audioの情報は

ほぼ無いし、リファレンスすら無かったので驚きました。

サンプルコードはありますが、分かりづらい実装がされているので、

なかなかハードルが高かったです。

 

Inter App Audioの情報も求められているのではと思っているので、

順次書いていこうと思います。

 

手始めに、Audio Unit Hosting Guideを翻訳していきつつ、説明を交えて

いこうかと思います。

あとはリファレンスの翻訳とかもしていきたいと思います。

その後徐々にInter App Audioのことも書ければと思います。

 

 

ではでは