これは何?
元ミュージシャンの私が、今現場で使っているRubyでなんとか作曲っぽいことができないか試みた記事です。
OSは、Montereyを使用しており、特に有料ツールなども使用しておりません。
用語の説明
- アルペジオ
- 和音を構成する音を一音ずつ順番に弾いていくことで、リズム感や深みを演出する演奏方法。
- MIDI (MIDIデータ)
- 音楽の演奏情報をデータ化し、電子楽器やパソコンで再生できるようにしたものです。
- MIDI音源 (ソフトウェア音源)
- MIDIの情報に従って演奏をする機器
下準備編
MacのMIDI出力を準備する
MIDI音源を用意する
実践編
今回私の環境では、すでにRails環境が使用できる状態だったので、環境構築などの手順は割愛させていただき、Rakeタスクにて、音楽を再生するタスクを作成する部分から解説します。
- 参考記事
Gemの導入
調べているとMIDI関連のライブラリがいくつかありましたが、その中で扱いが簡単そうな、MicroMIDIというものを今回は使用してみようと思います。
Rails環境のGemfileに下記を記載します。
gem "micromidi"
ターミナルを開いて、Gemを導入します。
bundle install
Rakeタスクを作成
rakeコマンドにて、下記を実行し、lib/tasks配下に music.rake
というファイルを生成します。
rails g task music
再生されたファイルにタスクを記載します。
namespace :music do
desc "アルペジオを再生する"
task play: :environment do
# 音楽を流す処理を書く
end
end
演奏処理を書く
やることは比較的シンプルで、下準備で用意したMIDI出力を認識させるための処理と、実際に音符を演奏するための処理を書くだけです。
ライブラリのサンプルを参考に下記を記述します。
namespace :music do
desc "アルペジオを再生する"
task play: :environment do
# 再生時のMIDI出力を選ぶための処理
@output = UniMIDI::Output.gets
notes = []
MIDI.using(@output) do
# play の第一引数は音階、第二引数は音符の長さを指定する
notes.each { |note| play(note, 0.1) }
end
end
end
あとは音階を英語名で配列に設定することで、音を鳴らすことができます。
(今回は音符の長さは固定で0.1としていますが、こちらを変更すればリズムも変更はできます)
-
音階の対応表はこちら
- オクターブの違いは
数字
を追加 - シャープなどは
#
を追加
日本 英語 ド C レ D ミ E ファ F ソ G ラ A シ B - オクターブの違いは
実際に音階を入れたもの
namespace :music do
desc "アルペジオを再生する"
task play: :environment do
# 再生時のMIDI出力を選ぶための処理
@output = UniMIDI::Output.gets
notes = %w{
E3 A3 C4 E4 C4 A3
E3 A3 C4 E4 C4 A3
E3 A3 C4 E4 C4 A3
E3 A3 C4 E4 C4 A3
D3 G3 B3 D4 B3 G3
D3 G3 B3 D4 B3 G3
D3 G3 B3 D4 B3 G3
D3 G3 B3 D4 B3 G3
C3 F3 A3 C4 A3 F3
C3 F3 A3 C4 A3 F3
C3 F3 A3 C4 A3 F3
C3 F3 A3 C4 A3 F3
B2 E3 G#3 B3 G#3 E3
B2 E3 G#3 B3 G#3 E3
B2 E3 G#3 B3 G#3 E3
B2 E3 G#3 B3 G#3 E3
}
MIDI.using(@output) do
# play の第一引数は音階、第二引数は音符の長さを指定する
notes.each { |note| play(note, 0.1) }
end
end
end
これで、rails music:play
を実行し、下準備で設定したMIDI出力を選択することで、GarageBandからクラシカルなアルペジオフレーズが聞けると思います!
> rails music:play
Select a MIDI output...
1) Apple Inc. IACドライバ
> 1
一応動画にしてハープとシンセのバージョンで書き出しておきました!
最後に
ここまで記事を読んでいただき、ありがとうございました。
Rubyでなんとか音楽制作っぽいことに挑戦しましたが、結論 GarageBandだけを使って作曲した方が100倍早いです。。