windows7のruby環境で音を鳴らす。
友人が、rubyで作曲ソフトを作りたいと言っていた。彼はプログラマーではないけれど、音楽が作れる。そのため、rubyを勉強して、作曲ソフトを作ってみたいそうだ。rubyが簡単なのでrubyを使って、音楽が作れると薦めてみた。実際に、rubyを使ってmidiで音を鳴らしてみる。
いろいろな作業は、windows7のpowershell上で行う。
windows7でrubyで音を鳴らす準備
rubyで音を鳴らすために次のような準備をする。
- gitインストール
- rubyインストール
- bundlerのインストール
- サンプルファイルを落とす
- unimidiのインストール
- unimidiのサンプルを落としてくる
- unimidiのサンプルを見ている。
- unimidiのサンプルを鳴らしてみる。
gitのインストール
gitのページからwindows用のgitを落としてきて、インストールする。落としてきたexeを実行する。いろいろ書いているが、そのままnextボタンを押していけば良い。
gitが必要な理由
あとで、githubからサンプル用のファイルを落とすのでそのために必要になる。
gitが入ったか確認
powershellを立ち上げて、
PS C:\Users\shibacow> git --version
git version 1.9.2.msysgit.0
PS C:\Users\shibacow>
rubyのインストール
rubyのページから、downloadを落としてきてそのまま exeを実行。
rubyが必要な理由
rubyが必要なのは、音楽を鳴らすために必要だ。
rubyが入ったから確認
powershellを立ち上げて
PS C:\Users\shibacow> ruby --version
ruby 2.0.0p481 (2014-05-08) [x64-mingw32]
PS C:\Users\shibacow>
bundlerのインストール
bundlerのインストール
powershellを立ち上げて、次のコマンドを実行。
実行するコマンド
gem install bundler
実行結果
PS H:\prog\ruby\ruby_unmidi_sample> gem install bundler
Successfully installed bundler-1.6.2
Parsing documentation for bundler-1.6.2
1 gem installed
PS H:\prog\ruby\ruby_unmidi_sample>
bundleを入れる理由
bundleを入れることで、他のシステムとの競合を防ぐことができる。特に音楽系のソフトは、たのシステムと競合を起こしやすいので、別の環境を用意するために、bundleを用いて環境を分けておく。
bundlerの確認
powershellを立ち上げて、
PS C:\Users\shibacow> bundle --version
DL is deprecated, please use Fiddle
Bundler version 1.6.2
PS C:\Users\shibacow>
サンプルコードを手に入れる。
unimidiをインストールするが、インストールためのスクリプトは既に準備しているのでそれを使ってインストールする。このページに既にサンプルがある。
この場所からコピーするのが早い
powershellを立ち上げて、
git clone git@github.com:shibacow/ruby_unmidi_sample.git
このような表示で出る。
unimidiの導入
unimidiは、rubyのための、midiライブラリだ。rubyを使ってmidiを鳴らすことができる。
powershellで、先ほどのダウンロードした場所へ移動する。
cd ruby_unmidi_sample
unimidiをインストールする。次を実行する。
PS H:\prog\ruby\ruby_unmidi_sample> bundle install
実行結果は以下。
PS H:\prog\ruby\ruby_unmidi_sample> bundle install
Fetching gem metadata from https://rubygems.org/.............
Fetching additional metadata from https://rubygems.org/..
Resolving dependencies...
Installing ffi 1.9.3
Installing alsa-rawmidi 0.2.14
Installing ffi-coremidi 0.2.0
Installing midi-jruby 0.0.12
Installing midi-winmm 0.1.10
Installing unimidi 0.3.5
Using bundler 1.6.2
Your bundle is complete!
Use `bundle show [gemname]` to see where a bundled gem is installed.
PS H:\prog\ruby\ruby_unmidi_sample>
次のように表示され、vendoer以下にインストールされる。
これで準備は整った。
midiを見ている。
なんでも良いので、midi_test.rbを開いてみる。
require 'unimidi'
notes = [36,40,43,48,52,60,64]
duration = 1
UniMIDI::Output.gets do |output|
notes.each do |note|
output.puts(0x90, note, 100) # note on message
sleep(duration) # wait
output.puts(0x80, note, 100) # note off message
end
end
命令は、note onとnote offを送っている。音程は、
notes = [36,40,43,48,52,60,64]
で決まっている。他の音程を入れれば、その音も追加される。
midiを再生させてみる。
先ほどのpowershell上で、
PS H:\prog\ruby\ruby_unmidi_sample> bundle ex ruby midi_test.rb
実行結界
DL is deprecated, please use Fiddle
Select a MIDI output...
0) Microsoft GS Wavetable Synth
> 0
PS H:\prog\ruby\ruby_unmidi_sample>
MIDI outputを選ぶ選択肢が出るので、0とか1とか選ぶ。この場合は0しか選べない。
それではやってみよう。
注意
bundle installで入れているので、別のディレクトリで実行する場合、unimidiが入っていないと言われるかもしれない。その場合は、
bundle install
を使って、unimidiをインストールする。
また、rubyの実行も
bundle ex ruby file名
のようにbundle exを前に付けなければならない。