実行環境について
そういえば、書いていませんでした。
* OS: Windows10 Pro
* Csound : Version 0.9.3-beta
で行っています。
Rに食わせるwavを作っておく
初手からあまり込み入ったことをすると詰むので、まずは簡単にサイン波を作るところから行きましょう。
こちらの例
から転載します。
Csoundは素人なので、素人説明になりますが、マニュアルのリンクも併せて貼っておきますので、本当の意味はそちらでご確認いただきたく。
こちらで、気になったワードを検索するのが手っ取り早いかなと思います。
The Canonical Csound Reference Manual
<CsoundSynthesizer> <CsOptions> -odac </CsOptions> <CsInstruments> instr 1 aSin poscil 0dbfs/4, 440 out aSin endin </CsInstruments> <CsScore> i 1 0 1 </CsScore> </CsoundSynthesizer>
何も考えず、上記のソースをコピペして、Runボタンを押してみてください。ラの音が聞こえるはずです。
440の部分が音の周波数を表しています。単位はHz。Hzは1秒間に振動する回数ですね。
440Hzはラの音の高さになります。
instr ~ endinは音を鳴らす音源の定義だと思ってもらえればよくって、今回は440Hzの音を生成するブロックなのです。
これをaSinという変数に代入して、out aSinでaSinに定義した音を出力するところまでを含んだ音源だと思えば今はたぶん良いのだと思います。
CsScoreのブロックはそのままスコアを定義していますが、i 1 0 1 は instr 1 を 0 秒から 1 秒間 実行せよということで、結果としてラのRunボタンを押すとラの音が1秒間聞こえるのです。
さて、このままでもいいのですが、Rでwavを見るときに440個の波を見るのは面倒くさいですね。 ということで1Hzの音にしてみましょう。下記のとおりです。
<CsoundSynthesizer> <CsOptions> -odac </CsOptions> <CsInstruments> instr 1 aSin poscil 0dbfs/4, 1 out aSin endin </CsInstruments> <CsScore> i 1 0 1 </CsScore> </CsoundSynthesizer>
単純に440を1に変えただけですね。
さて、これを同じようにRunすると実行しているようだけど何も聞こえない。1Hzは人間の聞こえる周波数の外なので実行してもわからないのでした。
まぁ、ちゃんとできてるに違いない!ということで、気にせずにwav形式で出力します。Recordというボタンを押すと、現在エディットしているファイル名に.wavの拡張子がついて、マイドキュメントあたりにあると思います。linuxだとhomeディレクトリかな?
これをバイナリエディタで開いてみると…?
52 49 46 46 08 00 00 00 57 41 56 45 66 6D 74 20 10 00 00 00 01 00 02 00 44 AC 00 00 10 B1 02 00 04 00 10 00 64 61 74 61 00 00 00 00 00 00 00 00 01 00 00 00 02 00 00 00 03 00 00 00 04 00 00 00 05 00 00 00 07 00 00 00 08 00 00 00 09 00 00 00
で始まる、数字の羅列と、Stirlingなどであれば右側に変な文字列が並んでいると思います。
これでとりあえず準備は完了です。
ひょっとしたら、環境によっては出方が違うかもしれませんが…
さて、次回はバイナリエディタとにらめっこしつつ、Rでこれを読んでいきます。
しかし、本業多忙のためちょっと更新が開いてしまいます。
上のバイナリを、wavのフォーマットとにらめっこして、仕様通りなのかを見ると良いかもしれませんです。