第7回. リリース作業(Sinewave AU完成)
Posted in Introduction to Audio Unit Development on 11月 25th, 2007 by nagano – 8 CommentsAudio Unit開発入門,7回目.
7回もかかりましたが,今回でSinewave AU編は終りです.
前回でSinewave AUの”機能”は完成しました.
今回はリリース作業を行います.
auval
いきなりですが,auvalを使います.
auvalはAU Validation Toolという名前から分かるように
Audio Unitの動作チェックをやってくれるコマンドラインアプリケーションです.
Terminal.appを起動してでauval -hと入力してみます.
Helpがずらずら出ますが
-v TYPE SUBT MANU
に注目します.
TYPE SUBT MANUは
第2回.Audio Unitの実体は何か
でやりましたが
TYPE (カテゴリー)
SUBTYPE (Audio Unitの名前)
MANUFACTURE(デベロッパー名)
です.
試しに,auval -aと入力してみると
今インストールされているAudio Unitのリストが出ます.

augn pink appl – Apple: AUPinkNoise
がAUPinkNoiseです.
augnはそのままでいいとして
pinkは,sineにすることにします.
MANUは,Appleにクリエータータイプを申請しないといけません.
http://developer.apple.com/jp/faq/datatype.html
僕はMLAUを申請済みなのでMLAUにします.
(以下,MLAUとmonalisa-au.orgは自分の環境に合わせてください)
TYPE augn
SUBT sine
MANU MLAU
に決定しました.
では,AUPinkNoseのTYPE SUBT MANUを実際に変更してみます.
AUPinkNoise.rに
#define RES_ID kAudioUnitResID_AUPinkNoise #define COMP_TYPE kAudioUnitType_Generator #define COMP_SUBTYPE 'pink' #define COMP_MANUF kAudioUnitManufacturer_Apple #define VERSION 0x00010000 #define NAME "Apple: AUPinkNoise" #define DESCRIPTION "Audio Unit Pink Noise Generator" #define ENTRY_POINT "AUPinkNoiseEntry"
とあります
#define RES_ID kAudioUnitResID_AUPinkNoise #define COMP_TYPE kAudioUnitType_Generator #define COMP_SUBTYPE 'sine' #define COMP_MANUF 'MLAU' #define VERSION 0x00010000 #define NAME "Monalisa-au.org: AUSinewave" #define DESCRIPTION "Audio Unit Sinewave Generator" #define ENTRY_POINT "AUSinewaveEntry"
に変更してます.
AUPinkNoiseVersion.hも同じように変更します.
一回ビルドしてみます.その前に一回プロジェクトをクリアしておきましょう.
⌘ + Shift + Kを押す.
再びauval -a
を実行すると
augn sine MLAU – Monalisa-au.org: AUSinewave
出ました.
ビルド実行してみましょう.
AUPinkNoiseが無くなったので,AULabがアラートを出すでしょう.
AUSinewaveを選択して動かしてみます.
動きますね.
(AULab 1.0.3だと最初の選択時にviewが出ません.これはしょうがない.2.0だとちゃんと出ますので,これ以降は2.0を使いましょう,)
Info.plistに
<string>com.apple.audiounit.AUPinkNoise</string>
があるので,
<string>org.monalisa-au.audiounit.AUSinewave</string>
<key>CFBundleExecutable</key> <string>AUPinkNoise</string>
を
<key>CFBundleExecutable</key> <string>AUSinewave</string>
に.
ターゲットの設定も変更します.

のAUPinkNoiseをダブルクリックして
これで,componentの名前がAUSinewaveに変わります.
このままだと,AUPinkNoise.componentとバッティングするので
/Library/Audio/Plug-Ins/Components/AUPinkNoise.component
を削除します.
auval -aでリストに出るか再度確認してみます.
出ますね.
(何か変更したらauvalで確認するようにするといいです)
InfoPlist.stringsも環境に合わせて変更しましょう.
auvalを実行する
さて,これで一通り修正が終わったので動作の確認にはいります.
auvalは本来これが目的のコマンドラインアプリケーションです.
-v TYPE SUBT MANUで実行できます.
auval -v augn sine MLAU
を実行すると,いろいろなSampling Rate/channelで動くか等々勝手にテストしてくれます.
最後に
-------------------------------------------------- AU VALIDATION SUCCEEDED. --------------------------------------------------
と出れば成功で,このAudio UnitはAudio Unit Host Applicationで使えることが保証されます.
あとはUniversal Binaryにしたいので
ARCHS = ppc i386
をcopyして,先ほどのターゲット設定の一番上のアーキテクチャーの行にpasteします.
そしたら,
ppc i386
に表示が変わります.(便利悪いなぁ)
もう一回auval -v augn sine MLAUで確認します.
OKですね.(PPCで動くかはチェックしてませんが)
さて,これで完成です.
(残念ながら 10.5以降しか動きませんが)
volumeもzipper対応済み + Class名等もAUSinewaveに変更した.xcodeprojectはこちら.
Download->AUSinewave.zip(Xcode3.0 ProjectFile)
Download->AUSinewave.component.zip(Audio Unit)
まとめ
いかがだったでしょうか.
以外と簡単にできることが分かったと思います.
実質的にコードを書いたのはRender()内の変更とParameterの追加だけです.
Parameterの追加とその取得方法,Audio Signalの計算後の数値をどこに渡すのかさえ分かっていれば,Audio Unitを作るのはさほど難しくありません.
今回やった内容だけでも色々なAudio Unitが作れると思います.
難しいのはデジタル信号処理のルーチン(今回で言えばSine波の計算方法)ですが,それは本を読むか,ソースコードを探してきて頑張って移植すればOK.
何か作ったら是非教えてください.
Sinewave編はひとまずここまで.
気が向いたらAudio Unit Effect編をやります.
続きはそのうち.
















