13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 5 years have passed since last update.

unimidiを使ってrubyプログラムで音を鳴らす

Last updated at Posted at 2014-05-31

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をインストールするが、インストールためのスクリプトは既に準備しているのでそれを使ってインストールする。このページに既にサンプルがある。

この場所からコピーするのが早い

ssh clone URL

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を前に付けなければならない。

13
16
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
13
16

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?