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!