流行っているきつねダンスに乗じたい
北海道日本ハムファイターズの「きつねダンス」が今とても流行っています。
Ylvisが歌う「The Fox」に合わせて、チアダンサーが踊るというものです。
きつね × 音楽
ということで流行に乗じてFoxDotを始めてみようというコーナーです。
ちなみに私の音楽歴はリコーダーと鍵盤ハーモニカです。
ド素人ということをご理解ください。
FoxDot
Pythonに近しい?書き方で音楽を奏でることができるものです。
ライブコーディング、Algorave(アルゴレイヴ)と呼ばれるものの一種で、
即興でリズムを作り、音楽を奏でてフロアを沸かすという最高にロックなプログラミングです。
以下の動画が雰囲気を掴むのに良いかもしれません。
Live Coding Pop Music with Python and SuperCollider
Live coding music with FoxDot | Python | Algorave | Pakistan
DOMMUNE Tokyo - live coding performances - algorave tokyo x yorkshire
他にはSonicPiやTidalCyclesなどを用いるパターンもありますが、今回はFoxDotでいきましょう。(きつねダンスの流行りに乗りたいので)
FoxDotの環境準備
SuperColliderのインストール
まずはSuperColliderをインストールします。
音を鳴らすための環境です。 IDEみたいなもので、この上でコーディングしていきます。
Pythonのインストール
Homebrewもしくは、Python公式サイトからインストールしてください。
$ python3 -V
Python 3.10.6
FoxDotをOSにインストール
以下のコマンドでFoxDotをOSにインストールしていきます。
pip3 install FoxDot
FoxDotをSuperColliderにインストール
続いて、SuperColliderを開いて左側の白い画面に以下のコマンドを入力します。
Quarks.install("FoxDot")
macの場合は、⌘ + Enterで実行です。
BatLib installed.
.
.
.
FoxDot installed.
などが出たらOKです。
一度ここでSuperColliderを再起動します。
FoxDotの起動
SuperColliderで以下のコマンドを実行して、サーバーを開きます。
FoxDot.start
⌘ + Enterで実行です。
これでFoxDotの信号を受信できる準備が整いました。
次にTerminal側で以下のコマンドを実行してFoxDotを起動します。
python3 -m FoxDot
「ModuleNotFoundError: No module named '_tkinter'」が表示された場合
brew install python-tk
音を鳴らしてみる
テンポ...BPMってやつを決めていきます。
とりあえず分かりやすく60で。
メジャースケール、マイナースケールなどを決めることもできるっぽいですが
名前しか聞き馴染みないので今回はスルーすることにしました
Clock.bpm = 60
次に鳴らせる音、音色を確認してみます。
print(SynthDefs)
['loop', 'stretch', 'play1', 'play2', 'audioin', 'noise', 'dab', 'varsaw', 'lazer', 'growl', 'bass', 'dirt', 'crunch', 'rave', 'scatter', 'charm', 'bell', 'gong', 'soprano', 'dub', 'viola', 'scratch', 'klank', 'feel', 'glass', 'soft', 'quin', 'pluck', 'spark', 'blip', 'ripple', 'creep', 'orient', 'zap', 'marimba', 'fuzz', 'bug', 'pulse', 'saw', 'snick', 'twang', 'karp', 'arpy', 'nylon', 'donk', 'squish', 'swell', 'razz', 'sitar', 'star', 'jbass', 'sawbass', 'prophet', 'pads', 'pasha', 'ambi', 'space', 'keys', 'dbass', 'sinepad']
いっぱい使えそうですが、よくわからないので今回はpluckとplayを扱ってみます。
シンセサイザー(pluck)
3行目:p1 >> pluck() は「ド」の音を4回鳴らします。
4行目:p1.stop() は3行目のp1を停止できます。
6行目:p2 >> pluck([0, 1, 2, 3, 4, 5, 6, 7]) は「ドレミファソラシド」が順番に鳴らせます。pluck([0])が「ド」、pluck([2])が「ミ」に対応しているわけですね。
8行目:p3 >> pluck([5, 2, 1], dur=[1, 1/2, 1/4]) で指定しているdurは音の長さ、拍数を変更しています。 4分音符、8分音符、16分音符というわけです。
10行目:Clock.clear() で全部停止です。
実行したいコード(鳴らしたい音)の行にカーソルを合わせて⌘ + Enterで実行です。
複数行選択すれば複数を一気に実行することも可能です。
ドラム(play)
3行目:d1 >> play('x-o-', sample=2) 最初の '' あるいは "" の中に繰り返したい音を入力します。
ここではベースドラムとハイハット、スネアドラムを叩くようにしています。
※ドラムセットのどれに該当するか分かっていません。
'x'はベースドラム、'X'はヘビーキック
'o'はスネアドラム、'O'はヘビースネア
'-'はハイハット(クローズ)、'='はハイハット(オープン)
'*'はクラップ
...とドラムに関する色々あるみたいなので、細かく音作りできそうですね。。
sampleで数値を変えると音も変わります。
sample=2とsample=4を指定するだけでもそれっぽくなりました。
7行目:d3 >> play('x-o[---]') で [] を使っていますが、音が細かくなります。
ハイハットを3回タタタンと細かく鳴らせるようになります。
9行目:d4 >> play('{xX}-{oO}-{*x}') で {} を使っていますが、音がランダムに選択されるようになります。
今回は「ベースドラムかヘビーキック」、ハイハット、「スネアドラムかヘビースネア」、ハイハット、「クラップかベースドラム」というようにしてみました。
これだけでもかなりそれっぽいです。
まとめ
簡単にそれっぽい音が鳴らせるようになりました。
What does the fox say?
追記
YoutubeにPyConJP 2019で田中慎太郎氏が発表したライブコーディングの動画がありますので、
ご興味ある方は見てみてください。
02-502_Pythonでライブをしよう -FoxDotを使った新時代のPython活用法-(田中 慎太郎)
大学生時代にPyConJP2018での田中慎太郎氏のWebスクレイピングに関する発表に感銘を受け、尊敬している方のため紹介させていただきました。