三度の飯よりCDという考え方

主に同人音楽について適当に語ります。

ライブコーディングというやつをやってみたい

はじめに

これは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知ってる人はもうほんとにすぐにできるよ.知らない人もチュートリアルあるから楽勝よ.

実際の画面がこちら

f:id:princecoffee:20211221181928p:plain

ここにうちこんでいくよ

 

実際にコーディングしてみる

というわけで実際にコーディングしてみる.まずはテンポ決めてビートを刻もう.自分の好きなテンポが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に関してはツイッタでこういうことしたいみたいなことをつぶやいたところ,有識者の方がこそっと教えてくれて,ほんとについった最高ですわ.最近ツイート控えめだけど,そういう創作のこといろいろ発信していくべきかも.

 

では,こんなところで終わりにしましょう!珈琲王子でした!