Chapter Twenty Six

第26話



今回の小物は、サウンドファイル入出力にしよう。

サウンドの分野に限ったことではないが、LabVIEWだけですべてプログラムするのは時間がいくらあってもできないことなので、他のアプリケーションを活用しながら目的を達成することがおおい。ファイルフォーマットは他のアプリケーションとの交流の方法として重要で、LabVIEWを自由に使いこなしていく上での基盤ともいえる。Jason Dunham氏のWAVEFILE.llbは人気のあるファイルフォーマットを活用できる点で意義のあるVIだと思う。ただし、WAVEFILE.llbはファイルの読み込みが遅い点で改良の余地が多く残されているように感じる。vi.libのUTILITYにあるFILE.LLBのRead File+ (string).viを使っているのが遅い原因か?

Waveフォーマットは個人的に好きではないので突っ込んで改良を加える気にはならない。フォーマットがインテル系で、バイトスワップしないといけないのがこのファーマットが気に入らない理由だ。(ラプソディはインテルに乗ったときにどういうかたちになるのだろうか? Mac生まれのLabVIEWがやっているようにサンデープログラマーレベルには汚いところは隠してくれるのだろうか?)

前置きが長くなったが、そんなわけで、Next/Sun sound file (.au) の資料を手に入れて作ってみることにした。Next/Sun sound fileはSunとNextで標準的に使われているシンプルなサウンドファイルフォーマットだ。拡張子はNextでは.sndが使われ、Sunでは.auが使われる。サウンドファイルの情報は、S.T.Rope, G.V.Rossum 両氏の"A Child's Garden of Sound File Formats"が参考になった。ftp://mitpress.mit.edu から入手した。

Next/Sun sound fileは固定長のファイルヘッダーにサウンドデータが続いているファイルだ。ファイルヘッダーは6個の32ビットの整数と4個以上のコメント用キャラクターからなっている。
1;magicというフォーマット識別子(これは常に0x2e736e64)
2;データへのオフセット値(単位はバイトで、28以上の数値になる)
3;データサイズ(バイト数)
4;サンプリングコード
5;サンプリングレート(Hz)
6;チャンネル数

なんだか、計測データの記録用にも流用できそうなフォーマットだ。
サンプリングコードは良く使われるものとして1;8bit μ法則 2;8bit リニア 3;16bit リニアなどがある。今回は16bit リニアに限って読み書きできるVIを作ろう。8bit μ法則は難しいので次回以降に回すことにしよう。

バイトストリームファイルの使い方は、開いて、読み/書きして、閉じる、の3ステップを実行すればよい。VIのあるディレクトリをデフォルトにファイルダイアログを開きます。選択されたファイルはrefnumで後続の関数に伝えられる。読み取りは"Read File"を使うが、これは多機能なので、オンラインレファレンスを開いて使い方を確認しておこう。データを読み終わったらファイルを閉じておしまい。

Next/Sun sound fileのファイルヘッダーは固定長だからクラスターで読み取るとシンプルに構成できる。読み込んだ結果を表示するクラスター"Header"をつくり、ポップアップメニューから"定数を作成"を選べばクラスター定数が簡単にできあがる。ファイル関係の関数の"定数を作成"も便利だ。

書き込みも、「開いて、書いて、閉じて」の3ステップだ。ダイアグラムがちょっと込み入っているが、基本的には読み取りと同じ流れだ。

次回はサウンドの圧縮方法のひとつであるμ法則(Mu-law)について調べて分かった範囲で書いてみようと思う。
See you!


Nigel Yamaguchi

戻る