今回は前回のpostに引き続きscilabについて。
scilabには、コマンドラインからサウンドをならす関数である、playsndが最初から定義されていて、変数でサイン波とかを用意してplaysndに突っ込むと音がなる、という仕組みなのですが、Macの場合はなぜだかそのままでは使う事ができません。
本当は、http://science6.2ch.net/test/read.cgi/kikai/1068735555/108n-
に書いているようにすればplaysndを使えるようになるらしいのですが、僕の環境ではできなかったので、代わりに自分でplaysnd関数もどきを定義しよう、と考えました。その手順からテストするまでを記述します。
当然、Macであることを前提とします。
1 playsnd.sciを開く。
playsnd.sciはscilab.appを右クリック(Control+クリック)し、「パッケージの内容を表示」を選択、その後、「Contents/Resources/macros/sound/playsnd.sci」と進み、ファイルをテキストエディタか何かで開く。
すると、どうやらplaysndは
- “TMPDIR/_playsnd_.wav”というファイルを生成
- PlaySound関数で直ぐに再生
しばらく眺めると、12行目あたりからが怪しい、とわかります。(理由は、12行目のelseに対応するif文に、”MSDOS”と書いているから、12行目以降はWindows以外を指しているんだろうな、と検討をつける事ができます。だってMac OS XってBSDベースでしょ。)
ここを見ると、「/dev/audio」と書かれているところがあります。
が、まずこの階層は、デフォルトではないと思いますし、なんか別のアイコンが表示されていて、/devを作るのは難しいと思うので、ここでは、/audiodevというフォルダを作り、そこにオーディオファイルを作成します。
次に、なぜか僕の環境ではwavファイルを扱うsavewave, rwaveなどが使えなかったので、前回のポストでも使った、.auファイルを生成してならすことにします。
.auファイルの書き出しに関しては、まさに前回のauwriteを使うのですが、では再生はどうすれば良いでしょうか。
幸いにもシェルぽく使えるunix関数があるので、コマンドラインで音を鳴らせるプログラムと.auファイルを指定する、という方針にします。
コマンドラインからオーディオファイルを鳴らすプログラムを探す
ここではコマンドラインからオーディオファイルを鳴らすプログラムとしては、afplayをつかう事にします。
afplayに関しては、ここが詳しいです。(こちらはOctaveでの例ですね。)
で、afplayにパスを通します。(.bash_profileとかをいじって下さいね。)
これでコマンドラインからオーディオファイルを鳴らす事ができるようになりましたので、あとは独自に定義したplaysoundという関数を作成します。
playsndライクな関数、playsoundを作成する
それでは、playsound関数を作成しましょう。
といっても、playsnd関数をちょこっといじるだけです。
- Macintosh HD直下に、scilabというフォルダを作成します。
- 1.で作成したフォルダに、”playsound.sci”というファイルを作成します。
- 2.で作成したファイルに下記のように記述し、保存します。