![見出し画像](https://assets.st-note.com/production/uploads/images/104540280/rectangle_large_type_2_67248eae9cf7117f16223a1dc83a078f.png?width=1200)
Sonic Piをやって、なんちゃって作曲しました!
こんにちは、あるいはこんばんは!
まだ夜間と明け方は冷えますが、日中は夏のごとく暑くなり、活動も増えてきた頃でしょうか?
コロナも落ち着いた?ので(というよりも、メディアが取り上げるのも飽きたのでしょうか。。。)、出かけたいですね!!
最近はStable DiffusionをMacに搭載しようとして失敗(ストレージがパンクする予感が)したり、LoRA環境構築がうまく行かなかったりで、ボツ記事も積み重なってきました。。。チキショー
さて、Sonic Piという無料のAI作曲ソフトについて、気になっていたのでやってましたよ。
Sonic Piとは?
プログラミング言語「Ruby」を用いて音楽を作成するオープンソースソフトウェア
作成した音楽をリアルタイムで再生できる:ライブコーディング
サンプル音源やエフェクトなど、様々な音楽制作に必要な要素が含まれる
プログラミング初心者でも扱いやすい
プログラミングによって音楽制作の基礎知識を学習できる
教育現場やプログラミング学習に活用されている
Sonic Piをインストールするよ
公式サイトからダウンロードしてインストールします。
OSごとにインストーラーが異なっているようですので、ご自身のOSを選択してください。
今回、わたしはmacOSを選択しました。
(今回の記事はmacとなってしまいますので、スクリーンショットやショートカットなどがwindowsと異なることも多いと思います。例えば、「command(⌘)」は「Control」と置き換えると良いのかも知れません(未確認)。)
![](https://assets.st-note.com/img/1682984442839-U4FMe5TIvD.png?width=1200)
Sonic Pi を起動するよ
Sonic Pi を起動してみましょう。
チュートリアルが表示されていない方は、「メニューバーのView > ヘルプを表示する」で表示させてみてください。
![](https://assets.st-note.com/img/1682984663358-sWRvQNGziS.png?width=1200)
画面の左下には小見出しが ずら〜っ と並んでいて、これを読めばきっとマスターできるのでしょう、うん。
でも タイパ気になる このご時世、手っ取り早く何か音楽的なものを作りたい方も多いハズ!?(わたしも その一人)
そんなときには頼れる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」というものを追加してみました)
![](https://assets.st-note.com/img/1682987762958-onUNkK2nfL.png?width=1200)
わかりやすいように「ドレミファソラシド」に置き換えるとどうなるか確認しました。
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
![](https://assets.st-note.com/img/1683034785312-NUdVTcdtXA.png?width=1200)
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
![](https://assets.st-note.com/img/1683035526306-DGytJlRoRs.png?width=1200)
食事の後のアレ?
某人気ゲームの食事の後に流れる音楽♪
live_loop :boom do
sample :misc_burp, rate: 1, amp: 1
sleep sample_duration(:misc_burp)
end
![](https://assets.st-note.com/img/1683036021243-ivMYcAAsTS.png?width=1200)
まとめ
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
![](https://assets.st-note.com/img/1683036858429-RAVoA3ij5g.png?width=1200)
この記事が参加している募集
この記事が気に入ったらサポートをしてみませんか?