4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?

More than 1 year has passed since last update.

きつねダンスが流行ってるのでFoxDot始めてみた

Posted at

流行っているきつねダンスに乗じたい

北海道日本ハムファイターズの「きつねダンス」が今とても流行っています。
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にインストールしていきます。

OSにインストール
pip3 install FoxDot

FoxDotをSuperColliderにインストール

続いて、SuperColliderを開いて左側の白い画面に以下のコマンドを入力します。

SuperColliderにインストール
Quarks.install("FoxDot")

macの場合は、⌘ + Enterで実行です。

BatLib installed.
.
.
.
FoxDot installed.

などが出たらOKです。

一度ここでSuperColliderを再起動します。

FoxDotの起動

SuperColliderで以下のコマンドを実行して、サーバーを開きます。

SuperCollider
FoxDot.start

スクリーンショット 2022-10-29 10.45.43.png
⌘ + Enterで実行です。
これでFoxDotの信号を受信できる準備が整いました。

次にTerminal側で以下のコマンドを実行してFoxDotを起動します。

Terminal
python3 -m FoxDot

「ModuleNotFoundError: No module named '_tkinter'」が表示された場合

python-tk
brew install python-tk

coolな画面が表示されたら準備バッチリです。
スクリーンショット 2022-10-03 23.14.04.png

音を鳴らしてみる

テンポ...BPMってやつを決めていきます。
とりあえず分かりやすく60で。

メジャースケール、マイナースケールなどを決めることもできるっぽいですが
名前しか聞き馴染みないので今回はスルーすることにしました

BPMの指定
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']

いっぱい使えそうですが、よくわからないので今回はpluckplayを扱ってみます。

シンセサイザー(pluck)

スクリーンショット 2022-10-29 17.38.55.png

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)

スクリーンショット 2022-10-29 17.52.09.png

3行目:d1 >> play('x-o-', sample=2) 最初の '' あるいは "" の中に繰り返したい音を入力します。
ここではベースドラムとハイハット、スネアドラムを叩くようにしています。

※ドラムセットのどれに該当するか分かっていません。

'x'はベースドラム、'X'はヘビーキック
'o'はスネアドラム、'O'はヘビースネア
'-'はハイハット(クローズ)、'='はハイハット(オープン)
'*'はクラップ
...とドラムに関する色々あるみたいなので、細かく音作りできそうですね。。

sampleで数値を変えると音も変わります。

sample=2sample=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スクレイピングに関する発表に感銘を受け、尊敬している方のため紹介させていただきました。

4
5
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
4
5

Delete article

Deleted articles cannot be recovered.

Draft of this article would be also deleted.

Are you sure you want to delete this article?