はじめに
これはCCS Advent Calendar 2021 - Adventarの記事です.
adventar.org
前日はこちら
zukashun.hatenablog.com
うぇいについての話らしいです(適当) オタクの敵かも
あいさつ
こんにちは,珈琲王子です.もう最近寒すぎて部屋から出てないです.
アドカレのことすっかり忘れてたので,公開日前日の18時に書き始めております.
人間というのは締め切りで強くなるものです.なんでもいえる.主語でかい.
最近は音楽制作もあまりできておらずという状況でしたが,創作に対する情熱はまだあったみたいで,最近はライブコーディングみたいなものに興味を持ちました.
ライブコーディングはいろいろあるのですが,まあ音楽のライブコーディングについて今日は話をします.
ライブコーディングってなに
ライブコーディングは簡単に言うと作曲とプログラミングを掛け合わせたやつです.プログラミングをライブで見せながら,リアルタイムに作曲をします.
情報系で音楽好きの自分にピッタリ.
Youtubeに合った動画を載せておきます.
www.youtube.com
プログラミングならではのランダマイズや,アルゴリズムを駆使して,ビートを刻みます.テクノとかそういったジャンルが得意そう.
と,これが面白くないわけがない!ということで最近ちょっとかじってやり始めました.もし来年学祭があったら,CCSのブースでライブコーディングやりたい.
んで,実際にライブしながらコーディングするのがライブコーディングなんだけど,それはちょいと厳しいので今回の記事はプログラミングで音楽を作ろう!っていうのがメインになるかな.
プログラミングで音楽つくってみたいかい
この記事はプログラミングで音楽制作みんなもやろうぜという普及目的でも書いてるので,どうやったらできるんという方法を書きたいと思います.現在自分は「TidalCycles」というHaskellのライブラリを使ってライブコーディングをしているのですが,それは初心者向けではないので,もっとより快適にライブコーディングができる「Sonic Pi」という開発環境でライブコーディングをしてみたいと思います.こいつです.
sonic-pi.net
これをインストールすればもうすぐにライブコーディングできます!Sonic PiはRuby言語を使うので,Ruby知ってる人はもうほんとにすぐにできるよ.知らない人もチュートリアルあるから楽勝よ.
実際の画面がこちら
実際にコーディングしてみる
というわけで実際にコーディングしてみる.まずはテンポ決めてビートを刻もう.自分の好きなテンポが128なので問答無用で今回は128にする.
ドラムとか
ドラムを刻んだものがこの下のコード.
はてなブログって見たまま編集で書いてるとソースコード貼り付けめんどいんやね....今回は強行突破でいきます.
use_bpm 128
live_loop :bottom_drums do
sample :bd_haus, cutoff: 80, amp: 2.0
sleep 0.5
sample :sn_dub, cutoff: 120
sleep 0.5
end
live_loop :top_drums do
sample :drum_cymbal_closed
sleep 0.25
end
live_loop :crash do
sample :drum_cymbal_open, cutoff: 100, rate: 0.80
sleep 8.0
end
これでこんなビートになる.
なかなかイイ感じ.
バッキングとか
昼寝をして時間が無くなったので,(ff14のアプデ来てるし),もうベースとかバッキングとか打ち込んでいこう.って無意識に打ち込むって書いたとこにDTM脳を感じてしまった,さてと,コーディングしていこう.
live_loop :top_drums do
if one_in(16)
2.times do
sample :drum_cymbal_closed, rate: 1.2
sleep 0.25/2.0
end
else
sample :drum_cymbal_closed
sleep 0.25
end
end
live_loop :harmony do
with_fx :panslicer, phase: 0.25 do
use_synth :dtri
3.times do
play chord(:d4, :M7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
play chord(:a3, :M7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
end
play chord(:c4, :M7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
play chord(:b3, :m7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
end
end
こんな感じ.
ドラムのハイハットにランダム要素を増やして,コードを基にピロピロとしたバッキングを追加してみた.なんかいい感じになってきた.
メロディとか
まあ後はメロディをランダムのスケールを再生させるとかしてつける.ここはせっかくだしライブコーディングっぽくランダム機能を使っていこうって ハナシ.
live_loop :riff do
use_synth :dpulse
if cnt < 24
play scale(:d4, :major_pentatonic, num_octaves: 4).shuffle.take(2), release: rand(0.5), cutoff: rrand(70, 130), pan: rrand(-0.7, 0.7), amp: 1.2
sleep [0.25, 0.5].choose
else
play scale(:c4, :major_pentatonic, num_octaves: 4).shuffle.take(2), release: rand(0.5), cutoff: rrand(70, 130), pan: rrand(-0.7, 0.7), amp: 1.2
sleep [0.25, 0.5].choose
end
end
ペンタトニックスケールをいろいろランダムに再生してみた.こんな感じ.
これで完成!!! 軽快なリズムがいいね.最後にコード全文貼り付けとく.
use_bpm 128
cnt = 0
live_loop :bottom_drums do
sample :bd_haus, cutoff: 80, amp: 2.0
sleep 0.5
sample :sn_dub, cutoff: 120
sleep 0.5
cnt += 1
if (cnt >= 32)
cnt = 0
end
end
live_loop :top_drums do
if one_in(16)
2.times do
sample :drum_cymbal_closed, rate: 1.2
sleep 0.25/2.0
end
else
sample :drum_cymbal_closed
sleep 0.25
end
end
live_loop :crash do
sample :drum_cymbal_open, cutoff: 100, rate: 0.80
sleep 8.0
end
live_loop :harmony do
with_fx :panslicer, phase: 0.25 do
use_synth :dtri
3.times do
play chord(:d4, :M7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
play chord(:a3, :M7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
end
play chord(:c4, :M7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
play chord(:b3, :m7, num_octaves: 3), release: 4.0, cutoff: 100, amp: 1.0
sleep 4.0
end
end
live_loop :riff do
use_synth :dpulse
if cnt < 24
play scale(:d4, :major_pentatonic, num_octaves: 4).shuffle.take(2), release: rand(0.5), cutoff: rrand(70, 130), pan: rrand(-0.7, 0.7), amp: 1.2
sleep [0.25, 0.5].choose
else
play scale(:c4, :major_pentatonic, num_octaves: 4).shuffle.take(2), release: rand(0.5), cutoff: rrand(70, 130), pan: rrand(-0.7, 0.7), amp: 1.2
sleep [0.25, 0.5].choose
end
end
50行くらい
いいたいこととか
いや,プログラミングで音楽を作るの楽しすぎか!!こんな感じでプログラミングのランダム機能を使うことで,もうその場でしか聞けない唯一無二の音楽を作ることができます.これがライブの醍醐味では!?いつか観客の前でやってみたい.
これくらいのコードなら1週間くらいですぐ書けるようになるので,ぜひCCSの諸君もやってみてほしい,CCSの諸君じゃない人も,ぜひぜひ音楽制作の一種として,プログラミングを使った音楽制作,いかがでしょう?
おわりに
いやあ,こんな世界があるなんて知らなかった,音楽って奥が深いね!ほかに最近音関係でやってることは,PureDataというグラフィカルなプログラム環境を使って,シンセサイザーとかエフェクトを作る練習をしています.こちらもすごく面白いのでいつか公開してみたい!!
puredatajapan.info
とかほんと音楽って奥が深いね,いろいろ調べてみるものだ.PureDataに関してはツイッタでこういうことしたいみたいなことをつぶやいたところ,有識者の方がこそっと教えてくれて,ほんとについった最高ですわ.最近ツイート控えめだけど,そういう創作のこといろいろ発信していくべきかも.
では,こんなところで終わりにしましょう!珈琲王子でした!