見出し画像

Sonic Piをやって、なんちゃって作曲しました!

こんにちは、あるいはこんばんは!
まだ夜間と明け方は冷えますが、日中は夏のごとく暑くなり、活動も増えてきた頃でしょうか?
コロナも落ち着いた?ので(というよりも、メディアが取り上げるのも飽きたのでしょうか。。。)、出かけたいですね!!
最近はStable DiffusionをMacに搭載しようとして失敗(ストレージがパンクする予感が)したり、LoRA環境構築がうまく行かなかったりで、ボツ記事も積み重なってきました。。。チキショー

さて、Sonic Piという無料のAI作曲ソフトについて、気になっていたのでやってましたよ。

Sonic Piとは?

  • プログラミング言語「Ruby」を用いて音楽を作成するオープンソースソフトウェア

  • 作成した音楽をリアルタイムで再生できる:ライブコーディング

  • サンプル音源やエフェクトなど、様々な音楽制作に必要な要素が含まれる

  • プログラミング初心者でも扱いやすい

  • プログラミングによって音楽制作の基礎知識を学習できる

  • 教育現場やプログラミング学習に活用されている


Sonic Piをインストールするよ

公式サイトからダウンロードしてインストールします。

OSごとにインストーラーが異なっているようですので、ご自身のOSを選択してください。
今回、わたしはmacOSを選択しました。
(今回の記事はmacとなってしまいますので、スクリーンショットやショートカットなどがwindowsと異なることも多いと思います。例えば、「command(⌘)」は「Control」と置き換えると良いのかも知れません(未確認)。)

Sonic Pi 公式サイト:OSに合わせてインストーラーをダウンロード


Sonic Pi を起動するよ

Sonic Pi を起動してみましょう。
チュートリアルが表示されていない方は、「メニューバーのView > ヘルプを表示する」で表示させてみてください。

View > ヘルプを表示する(⌘ + I)

画面の左下には小見出しが ずら〜っ と並んでいて、これを読めばきっとマスターできるのでしょう、うん。
でも タイパ気になる このご時世、手っ取り早く何か音楽的なものを作りたい方も多いハズ!?(わたしも その一人)
そんなときには頼れるAI にお任せあれ。困ったときのドラ○もん的な相棒「ChatGPT」に相談してみましょう!


ChatGPTとは?

ChatGPTについては、ご本人にその役割をインタビューしていますので、回答を以下に記載しますね。

Q: ChatGPTって何ですか?
A: ChatGPTは、OpenAIが開発した自然言語処理モデルの1つで、GPTと呼ばれる技術を使用しています。GPTは、大規模なトレーニングデータセットを使用して、文章の生成、翻訳、質問応答などの自然言語処理タスクを実行することができます。ChatGPTは、そのうちの1つで、人工知能による自然な対話を実現することを目的として設計されています。ChatGPTは、テキストチャットなどの対話型インタフェースを通じて、人間とコミュニケーションを取ることができます。

Q: ChatGPTってどうやったら使えるようになるの?
A: ……ChatGPTを利用するには、ChatGPTが実装されているオンラインプラットフォーム上でアカウントを作成する必要があります。たとえば、OpenAIのサイトでは、アカウント登録し、APIキーを取得することでChatGPTを利用することができます。……

Q: OpenAIでアカウント登録する手順おしえて
A: OpenAIのアカウント登録手順は以下の通りです。
1. OpenAIのウェブサイトにアクセスしてください。https://openai.com/
2. ページ右上部にある「Sign Up」をクリック
3. 登録用のメールアドレスを入力し、「Get Started」をクリック
4. 使用目的、開発経験などの情報を入力し、「Next」をクリック
5. OpenAIが提供するAPIの使用量に応じた価格プランを選択
 ※プランによってはクレジットカードの登録が必要
6. 必要事項を入力し、「Continue」をクリック
7. ダッシュボードにアクセスし、APIキーを取得するための指示に従う
8. APIキーを取得し、OpenAI APIを使用するための設定を行う
以上の手順で、OpenAIのアカウント登録が完了します。


OpenAIに登録しよう

OpenAIウェブサイトでアカウント登録してみます。
登録の手順は・・・ここでは省いても良いですか?、、、気が向いたときに記事にしてみます。参考になりそうなリンク貼っておきます。お許しを〜(>o<;)スマヌ)


ChatGPTに作曲の🙏おねがい🙏をする

作曲もプログラミングもワカラン族なので、とりあえず全部やっちゃってもらいましょう!

Q: Sonic Piで何か作曲して!
A: 以下は、簡単な例として、3つの音符を使用してメロディーを作る方法です。

play 60
sleep 0.5
play 64
sleep 0.5
play 67
sleep 0.5

このコードは、最初の音符としてミドルC(MIDIノート番号60)を演奏し、その後、4分の1拍子(0.5秒)休止します。次に、E(ミディノート番号64)を演奏し、再び休止します。最後に、G(ミディノート番号67)を演奏し、また休止します。
このコードを実行するには、エディタ内のコードを選択し、Ctrl+R(Windows)またはCommand+R(Mac)を押して実行します。

それではSonic Piで演奏してみましょう!
左上の区画(ペイン)に、先程のコードをペーストします。
(スクリーンショットや録音のタイミングのため「sleep 3」というものを追加してみました)

演奏中:右上のペインに波形が現れます♪

わかりやすいように「ドレミファソラシド」に置き換えるとどうなるか確認しました。

Q: play 60 sleep 0.5 play 64 sleep 0.5 play 67 sleep 0.5 は「ド」→「ミ」→「ソ」ですか?
A: はい、正解です!それぞれMIDIノート番号60、64、67はド、ミ、ソに対応しています。また、各音の後に0.5秒間の休止(silence)が入っているため、4分の1拍子のリズムで演奏されます。

MIDIノート番号との対応について

Q: 1オクターブの音を教えて下さい。ドレミファソラシドとの対応もおねがい!
A: 1オクターブの音はMIDIノート番号で12個の音程を持っています。以下にその音程と、それぞれの音程に対応するドレミファソラシドの音名を示します。

  • C4 (MIDIノート番号60): ド

  • C#4/Db4 (MIDIノート番号61): ド#またはレb

  • D4 (MIDIノート番号62): レ

  • D#4/Eb4 (MIDIノート番号63): レ#またはミb

  • E4 (MIDIノート番号64): ミ

  • F4 (MIDIノート番号65): ファ

  • F#4/Gb4 (MIDIノート番号66): ファ#またはソb

  • G4 (MIDIノート番号67): ソ

  • G#4/Ab4 (MIDIノート番号68): ソ#またはラb

  • A4 (MIDIノート番号69): ラ

  • A#4/Bb4 (MIDIノート番号70): ラ#またはシb

  • B4 (MIDIノート番号71): シ

なお、4の部分は音の高さを表しており、MIDIでは0から127までの数値で音程を表現しています。1オクターブとは、同じ音名で表される2つの音の周波数が2倍になる音域を指します。


音楽的なものを作曲してもらいましょう♪

Sonic Piで作曲する際に使用する主な項目とそのコードを簡単にまとめてもらいました。

  • play: MIDIノート番号を指定して音を再生
       例)play 60:ミドルCを再生

  • sleep: 指定した時間だけ待機してから次のコードを実行
       例)sleep 0.5:0.5秒待機

  • use_bpm: 曲のBPMを設定
       例)use_bpm 120:BPMを120に設定

  • sample: サンプル音源を再生
       例)sample :drum_heavy_kick:ヘビーキックの音を再生

  • synth: シンセサイザーを使用して音を生成
       例)synth :tb303, note: :e3, release: 0.1:TB-303ーのE3音

  • use_synth: デフォルトで使用するシンセサイザーを設定
       例)use_synth :piano:デフォルトをピアノに設定

繰り返しについても知っておくと便利です。
指定された回数、または無限にコードブロックを繰り返すには以下の方法があります。

n回繰り返す

n.times do  # nには数値が入る
  # 繰り返す処理
end

無限ループ
無限にコードブロックが繰り返されます。
ループを抜けるには、「⌘ + S」のようです。
(Windowsでは「Control + C」:by ChatGPT・・・お確かめください(--;))

loop do
  # 無限に繰り返す処理
end


出来上がったコード

曲というよりも効果音・・・

use_bpm 130

# サウンド定義
define :coin do
  use_synth :square
  play :C5, release: 0.1
  sleep 0.125
  play :E5, release: 0.1
  sleep 0.125
  play :G5, release: 0.1
  sleep 0.125
  play :C6, release: 0.1
  sleep 0.125
end

define :fanfare do
  use_synth :tri
  play_pattern_timed [:C5, :E5, :G5], [0.25, 0.25, 0.5], release: 0.1
  play_pattern_timed [:G4, :B4, :D5], [0.25, 0.25, 0.5], release: 0.1
end

define :hurry_up do
  use_synth :square
  play_pattern_timed [:C5, :C5, :C5, :G4, :E4, :D4, :C4], [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.5], release: 0.1
end

# メロディー定義
melody = [:E5, :E6, :G6, :A6, :B6, :Cs7, :B6, :A6, :G6, :Fs6, :E6]

# メロディー演奏
in_thread do
  with_fx :reverb, room: 0.9, mix: 0.3 do
    2.times do
      melody.each do |note|
        play note, release: 0.1
        sleep 0.125
      end
    end
    coin
    fanfare
    sleep 0.5
    hurry_up
  end
end

# ベース定義
define :bass_line do |note|
  use_synth :sine
  play note, release: 0.2, amp: 0.5
  sleep 0.25
  play note, release: 0.2, amp: 0.5
  sleep 0.25
  play note, release: 0.2, amp: 0.5
  sleep 0.25
  play note - 12, release: 0.2, amp: 0.5
  sleep 0.25
end

# ベース演奏
in_thread do
  with_fx :reverb, room: 0.9, mix: 0.3 do
    2.times do
      bass_line :E2
      bass_line :E2
      bass_line :F2
      bass_line :G2
      bass_line :G2
      bass_line :F2
      bass_line :E2
      bass_line :D2
    end
    coin
    fanfare
    sleep 0.5
    hurry_up
  end
end

An Up-Tempo Electronic Music

use_bpm 128

live_loop :drums do
  with_fx :lpf, cutoff: 90 do
    sample :bd_haus, amp: 1.5, rate: 1.1
    sleep 0.5
    sample :sn_dub, amp: 0.8, rate: 1.2
    sleep 0.5
    sample :bd_haus, amp: 1.5, rate: 1.1
    sleep 0.5
    sample :sn_dub, amp: 0.8, rate: 1.2
    sleep 0.5
    sample :bd_haus, amp: 1.5, rate: 1.1
    sleep 0.25
    sample :sn_dub, amp: 0.8, rate: 1.2
    sleep 0.25
    sample :bd_haus, amp: 1.5, rate: 1.1
    sleep 0.25
    sample :sn_dub, amp: 0.8, rate: 1.2
    sleep 0.25
  end
end

live_loop :bass do
  use_synth :tb303
  use_synth_defaults cutoff: 60, release: 0.2, res: 0.9, amp: 0.7
  notes = [:C1, :Eb1, :F1, :G1].shuffle
  4.times do
    play notes.tick, attack: 0.05, decay: 0.1, sustain: 0.1, release: 0.2
    sleep 0.5
  end
end

live_loop :melody do
  use_synth :pulse
  use_synth_defaults pulse_width: 0.1, release: 0.25, amp: 0.5
  with_fx :reverb, room: 0.8, mix: 0.3 do
    play_pattern_timed [:G5, :C6, :Eb6, :G6], [0.25, 0.25, 0.25, 0.75], decay: 0.1, sustain: 0.1
    play_pattern_timed [:G5, :C6, :Eb6, :G6], [0.25, 0.25, 0.25, 0.75], decay: 0.1, sustain: 0.1
    play_pattern_timed [:G5, :C6, :Eb6, :G6], [0.25, 0.25, 0.25, 0.5], decay: 0.1, sustain: 0.1
    play_pattern_timed [:G5, :C6, :Eb6, :G6], [0.25, 0.25, 0.25, 0.25, 0.25], decay: 0.1, sustain: 0.1
  end
end

食事の後のアレ?
某人気ゲームの食事の後に流れる音楽♪

live_loop :boom do
  sample :misc_burp, rate: 1, amp: 1
  sleep sample_duration(:misc_burp)
end


まとめ

ChatGPTに作曲してみることを考えてみました。
ご提案いただいたコードはエラーも多く、修正するための知識や経験があると、より面白くなるのかなぁと思いました!
良さそうな雰囲気のものができないと、萎えます。。。
そこをこらえてコーディングの勉強のためとモチベーションを切り替えていくと長続きしそうです。

実際に仕組みを覚えて、既存局をコードに起こすことができるようになると、楽しさが倍増する気がします!


おまけ

汽車っぽい効果音

 use_bpm 60

live_loop :train do
  with_fx :level, amp: 0.8 do
    with_fx :echo, phase: 0.25, decay: 4 do
      with_fx :reverb, room: 0.6, mix: 0.6 do
        sample :elec_hi_snare, rate: 0.3, amp: 0.2
      end
    end
  end
  sleep 1.0
end

live_loop :train_running do
  sample :drum_cymbal_closed, rate: 1, amp: 0.5
  sleep 0.5
  sample :drum_cymbal_closed, rate: 1, amp: 1
  sleep 0.25
  sample :drum_cymbal_closed, rate: 1, amp: 1
  sleep 0.25
  sample :drum_cymbal_closed, rate: 1.2, amp: 1
  sleep 0.25
  sample :drum_cymbal_closed, rate: 0.8, amp: 1
  sleep 0.25
end

live_loop :train_shaking do
  use_synth :noise
  with_fx :slicer, phase: 0.125 do
    play :C3, attack: 0.1, release: 0.4, amp: 0.5
    sleep 0.25
  end
end

live_loop :whistle_loop do
  sample :elec_pop,  sustain: 0.1, release: 0.1, rate: 8, amp: 0.5
  sleep 16
end

この記事が参加している募集

この記事が気に入ったらサポートをしてみませんか?