beeptoys チュートリアル

自分が、みんなが、音いじりを気軽にできるよう、
beeptoysというライブラリ/環境をRubyで作っています。
ターゲットユーザはズバリRubyistです。


beeptoysをダウンロードして(詳細は下に書きます)
beeptoysディレクトリに移動して準備は完了です。


さて、beeptoysを使って、今日はいくつか音を作ってみましょう。


突然ですが、Rubyistならirbは触った事がありますよね?
以下のようにして、触り慣れたirbからbeeptoysを読み込んで
起動してみましょう。

$ irb -r beeptoys.rb


おなじみのirbが起動しました。


beeptoysでは、Wavクラスをご用意いたしました。
これは、Wavファイルの読み書きが簡単にできるクラスで、
以下のようにして使います。

w = Wav.new
w.save :the_header


waveディレクトリに the_header.wav というファイルができています。
本体データは無くwavヘッダだけという冗長度∞なwavファイルです。
また、サウンドファイルなのに聞くことができない芸術的なwavファイルです(?)


Wav.newすると、defaultでは44.1kHz,16bit,1channelとなりますが、
必要に応じて、引数を渡す事でお好みのWavを作ることができます。

w = Wav.new 44100.hz,8.bit,2.channel 


次はちゃんとした音、サイン波を作ってみましょう。
ここでのお題は、サンプリング周波数44.1kHz、長さは1秒、
音の高さは440Hzのサイン波にしましょう。
Wavファイル自体はdefaultの44.1kHz,16bit,1channelです。


最初のステップとして、上記お題のサイン波形が詰まった配列を作ります。
Rubyistなら配列はおなじみですよね?

fs   = 44100    # サンプリング周波数
freq = 440      # 440Hzの音
sec  = 1        # 1秒
gain = 65535/2  # ゲイン

sine_array = Array.new(fs*sec) { |t|
  (gain * Math.sin(Math::PI* 2 * freq / fs * t) + 0.5).to_i
}


16bitのWavは0を中心に32767〜-32768の振幅ですので、
ゲインを65535/2としています。


上記コードで sine_array という配列にサイン波形を詰め込んだつもりですが
本当に入っているでしょうか?
これを視覚的に確かめられるようにbeeptoysでは gnuplot をサポートしています。
gnuplotが入っている人は以下のようにして、sine_array配列の0〜100の部分を表示してみましょう。

plot sine_array[0..100]




配列の中身がサイン波となっていることが確認できました。
次に、このサイン波が詰まった配列をwavにしてみましょう。
以下のように、newメソッドにArrayインスタンスを渡すだけです。
簡単ですね。

w = Wav.new sine_array


これで、お題のサイン波のwavオブジェクトができました。
保存する前に本当にサイン波になっているか試聴してみましょう。
Ruby/SDLがインストールされている環境だと
以下のようにplayメソッドでwavインスタンスを再生することができます。

play w
# もしくは
w.play


再生されましたか?
RubyistおなじみのArrayから音が作れることが確認できました。
このファイルを保存しておきましょうか。

w.save :sine_44100


できた sine_44100.wavは wave ディレクトリに保存されます。
保存したwavファイルを読み込んで再生するには以下のようにします。

sine_wave = Wav.load :sine_44100
play sine_wave


以上がbeeptoysの概要です。
いかがでしたでしょうか?


RubyistがArrayクラスを使って、使い慣れたirb上で対話式に音を作ってみました。
色んな音をたくさん作って、どんどんつなげるスクリプトを書けば、
曲を作ることもできると思います。


これは大変な妄想ですが
スクリプトで曲を作って、githubに上げていきたいなー
そして、気に入った曲はfollowして作成過程がチェックできたり
勝手にforkしてremixとかができるとgithubが音楽SNS化して
楽しいかなーとか考えています。


beeptoysのソースはgithubにあります。
興味がある方は使ってみてくださいね。
追加したいアイデアがたくさんあったり、不具合もあると思いますので
どんどん変わっていくかもしれません。


github URL:
GitHub - takkaw/beeptoys: Sound programming environment for Rubyist.


それでは、Happy sound programming!