2018年5月27日日曜日

MaxのI/Oベクターサイズとシグナルベクターサイズ

MaxのI/Oベクターサイズとシグナルベクターサイズのオーディオ出力に関するメモ

・オーディオ出力の流れ
オーディオ出力は、オーディオバッファに格納したオーディオデータ(サンプル)がオーディオインタフェースへ定期的に送信されて音が出る。CPUはオーディオインタフェースへの送信処理より前に、次のサンプルをバッファへ格納しておかなければならない。Maxではバッファからインタフェースへサンプルを送信する際に割り込みを発生させ処理を行う。



・I/Oベクターサイズ
バッファからオーディオインタフェースへ送信する1回のサンプル数
(バッファ→オーディオインタフェースへのサイズ)

・シグナルベクターサイズ
Maxの1回のルーチンでバッファへ格納するサンプル数
(Max→バッファへのサイズ)

・I/Oベクターサイズが小さい時
オーディオインタフェースへ送信するタイミング(割り込み)が多くなる。Maxがバッファへサンプルを格納する時間がタイトになる。

・I/Oベクターサイズが大きい時
オーディオインタフェースへ送信するタイミング(割り込み)が少なくなる。Maxがバッファへサンプルを格納する時間に余裕ができる。

・シグナルベクターサイズが小さい時
Max全体の1回のルーチンでバッファへ格納するサンプル数が少なくなる。たくさんのルーチンで格納することになる。

・シグナルベクターサイズが大きい時
Max全体の1回のルーチンでバッファへ格納するサンプル数が多くなる。少ないルーチンで格納することになる。


・I/Oベクターサイズと処理時間
例)
I/Oベクターサイズが512, インタフェースのサンプリングレートが44100Hzの場合
バッファからインタフェースへの1秒間の送信回数:44100/512=86.1回
送信準備に与えられる秒数:1.0/86.1=0.011秒
(つまり0.011秒以内に次のサンプルを用意しなければならない)

I/Oベクターサイズが1024, インタフェースのサンプリングレートが44100Hzの場合
バッファからインタフェースへの送信インターバルは44100/1024=43.0回
送信準備に与えられる秒数:1.0/86.1=0.023秒
(つまり0.023秒以内に次のサンプルを用意しなければならない)

Max内でたくさんの処理がある場合、I/Oベクターサイズを多めにして、サンプルを用意する時間に余裕を持たせると良い場合がある。シグナルベクターサイズは、Maxパッチの処理の内容(一定時間毎の処理の量)に応じて工夫する。


参考:
http://www.shonan-inet.or.jp/~hiro-s/pages/MSP_doc/audioio_01.html

0 件のコメント: