MIDIWind2.0beta版に環境設定パネルを実装しました。これでポート1〜8までのデバイス選択と、ソフトシンセの設定ができるようになりました。
それにしても、CoreAudioってJavaだと簡単にできたものが、Cだといろいろ大変。フレームワークがCoreAudio内で完結していればいいのだが、そうではなくCarbonに依存してるため随分とハマリましたよ。
あと、妙な動作不良にも悩まされたし。
1 - tableView:objectValueForTableColumn:row:{
2 ...
3 NSLog(@"hello"); // ダミーで挿入
4 return [MusicSynth getEffectParamNameAtIndex:rowIndex];
5 ...
6 }
7
8 static AudioUnitParameterInfo getEffectParamInfo(...){
9 ...
10 err = AudioUnitGetProperty(...); //エラーが出たり出なかったり
11 if(err) @throw AUException; //削除してみたり
12 ...
13 }
上記のようなコードで4行目のメソッドを呼ぶと、最終的に8行目からの関数が呼ばれて結果が返ってくるのだが、10行目のAPIの呼び出しでエラー(-50)が返ってくることがある。
でも、そのエラーが、3行目にNSLog()を挿入するか、または11行目を削除すると治ってしまう。。
どちらも10行目のAPI呼び出しには関係ないと思うのだが。
とりあえず、今回は11行目を削除してみたが。
ちなみに、ここでエラーが出ると、環境設定パネルのエフェクトパラメータの文字列が文字化けします。