start

AUGraphへのコールバック設定

最近ハマったこと。

AUGraphにコールバックを通じてデータを流し込む時は、データの受け入れ先としてグラフにAUConverterを追加し、それに対してコールバック関数を設定するようにしないといけないっぽい。

他のAudio Unitにコールバックを設定しても、データの受け渡しが行われているにはいるようだが、非常にノイジーな音になってしまう(除く、出力ユニット)。AudioStreamBasicDescription構造体で入力音声ストリーム情報を設定しようにも、エラーになってしまい、上手く設定されないようだ。

尚、この結果は当方の実験に基づくものであり、公式な文献などで調査したものではないので、間違っていたとしても悪しからずご了承頂きたい。というか、林檎さん、早くCore Audio関連のドキュメントを整備して下さいよ……。

3D Mixer Unitと戯れる

現在、某ソフトウェア会社にインターンシップに行っており、会社の主力商品のMac版の開発に向けた、基礎研究なんぞをさせて貰っている。就活もロクにせずにね。

その主力商品というのが音声処理を行うソフトのため、Mac版ではCore Audioを使う必要がある。なので基礎研究はCore Audioが中心だ。既に音が出る段階までは出来てるので、今日は5.1chとかのマルチチャンネルに対応すべく、3D Mixer Unitの検証をした。

例によって資料は殆どない。Technical Note TN2112: 3DMixer Audio Unitだけが唯一の資料と言ってもいい。珍しく日本語版もある。一応、/Developer/Examples/CoreAudio/Services/にAUMixer3DTestという名前通りのサンプルもあるが、規模が割と大きい上にC++の機能がバリバリ使われてて、わけがわからんw

実装は、このTNがかなり分かり易かったため、結構すんなりとできた。Audio File Player Unitと組み合わせて音が出ことを確認。この成果は、そのうち公開できるかと。

ちなみに、件のソフトはC++で書かれているため、今回作った検証アプリもメインはC++で書き、UIだけはCocoaで書いた。それゆえObjective-C++を(初めて)使ったが、Objective-Cクラスのインスタンス変数として持ったC++クラスって、コンストラクタ/デストラクタが実行されないんだね。今のところ格段問題は無いけど。

Default Output Unitを用いた音声出力サンプル

Core Audioで音を鳴らすための簡単なサンプル。Apple提供のサンプル CoreAudio/SimpleSDK/DefaultOutputUnit を簡単化&日本語化しただけの代物。440Hzの正弦波を Audio MIDI 設定.app の「デフォルトの出力」で指定されてる装置から出力しまする。

何気にC++なんぞで書いてますが、所謂better C的な使い方しかしてないので、簡単な修正で(C99準拠なら無修正でも?)Cなソースとしてコンパイルできるハズ。

こんなソースでライセンス主張できるのか甚だ疑問かつ恐縮だったりするけど、一応パブリックドメインってことで。煮るなり焼くなり好きに汁! Macのためならえんやこらせ〜。

Download DefaultOutputSample.dmg(17.3KB)

NSFの再生出来たー!

NSF(Nes Sound File: ファミコンの音楽シーケンスファイル)の再生出来たー!

かのアルキメデスは、入浴中にアルキメデスの法則を発見し、その嬉しさに浴槽を飛び出し「ヘウーレカ」と叫びながら裸で走り回ったそうだが、俺には今、その気持ちが非常によく分かる。ヘウーレカ!

今回もやってることは大した事なくて、前回作ったモジュールにNEZplugで生成した波形データを流し込んでるだけ。

とはいえ、NEZplugのビルドに悪戦苦闘。Windowsの独自型・定数の壁に阻まれ、マクロの壁に阻まれ………どれもこれも、俺の技術力不足に起因するものだけどorz。分からない事はGoogle先生に聞きまくって、大変勉強になったことは確か。

いよいよ楽しくなってきましたよ Core Audio。

次はCocoaと組み合わせて、もう少しグラフィカルな画面にしてみよう。

Core Audioで音出たー!

16日の夜から、Core Audioで音を出すべく格闘していたが、遂に出た。440Hzの正弦波の音が出た。計算精度が悪いのか、微妙に濁た音なのは、まぁ、ご愛嬌。

でも、やってることは大した事なくて、サンプルのSimpleSDK/DefaultOutputUnitを自分流に書き直しただけ。

とはいえ、ここまでの道のりは、実に、実に長かった。

ただでさえMac OS Xのプログラミングの日本語で書かれた情報は少ないというのに、その中でもCore Audioに関する情報は、文字通り皆無。あったとしても断片的な情報ばっかりで、尚且つ書いてる事が高度で何の事やらさっぱりんりん。

しょうがないので、Apple謹製の英語資料を漁るも、なぜかCore Audioに関する資料は、プレリリース版だったり、まとまりがなかったりと、散々な状況。

それでも、9月頭からコツコツと資料を読んできた甲斐がありましたよ。

同じ達成感でも、テキストベースのプログラムが完成した時のものとは、全く別次元。 やっぱり視覚・聴覚に訴えかけるプログラムは偉大だw モチベーションカーブの上がり方が半端じゃないね!!

よーし、これからも頑張るぞーっと。

尚、今回の成果はそのうち公開すると思う。多分。ご覧の通り、超更新頻度が低いサイト故、いつになるかはわからないけど……。

  • start.txt
  • 最終更新: 2022-07-27 15:26
  • by Decomo