LoginSignup
25
8

More than 1 year has passed since last update.

Rubyでクラシカルなアルペジオを作ってみた (Mac環境)

Last updated at Posted at 2022-10-25

これは何?

元ミュージシャンの私が、今現場で使っているRubyでなんとか作曲っぽいことができないか試みた記事です。
OSは、Montereyを使用しており、特に有料ツールなども使用しておりません。

用語の説明

  • アルペジオ
    • 和音を構成する音を一音ずつ順番に弾いていくことで、リズム感や深みを演出する演奏方法。
  • MIDI (MIDIデータ)
    • 音楽の演奏情報をデータ化し、電子楽器やパソコンで再生できるようにしたものです。
  • MIDI音源 (ソフトウェア音源)
    • MIDIの情報に従って演奏をする機器

下準備編

MacのMIDI出力を準備する

  1. Launchpad から MIDI で検索し、Audio MIDI設定 を開きます。

  2. ウインドウ から MIDIスタジオを表示 を選択します。

  3. 表示されたウインドウから IACのドライバ を選択します。

  4. 表示されたウインドウから 装置はオンライン の項目のチェックマークを入れます。

MIDI音源を用意する

  1. App Store から GarageBand をダウンロードします。

  2. ダウンロードした GarageBand を開き、ファイルから 新規 を選択します。

  3. 開いた画面から 空のプロジェクト を選択します。

  4. プロジェクトが開いたら、 ソフトウェア音源 を選択して、作成します。

  5. デフォルトでは、ピアノが選択されていると思いますが、赤枠の中から好きな楽器に変更することができます。

  6. 念の為、環境設定のオーディオ/MIDI 設定 で、赤枠の様に1個の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倍早いです。。

25
8
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
25
8