PyCodeDJ マニュアル

Python コードを書く。保存する。音が変わる。

1. PyCodeDJ とは

PyCodeDJ は Python のソースコードをライブ演奏に変換するツールです。ファイルを AST 解析し、@loop が付いた関数の構造と dj.* のメタ情報を読み取って SuperCollider に OSC を送ります。

from pycodedj import dj, loop

@loop(interval=2.0)
def bass():
    dj.volume = 0.4
    for i in range(8):
        if i % 2 == 0:
            pass

@loop(synth="kick_floor", beat=0.25)
def kick():
    dj.volume = 0.8
    dj.pattern = "x . x ."

関数名がループ名になります。pycodedj eval demo.py::bass のように指定します。

2. インストールと起動

pip install 'pycodedj[watch]'

SuperCollider IDE で sc/synths.scd を実行し、次の表示を確認します。

PyCodeDJ synths loaded. Ready. OSC port: 57120
pycodedj eval examples/demo.py::bass

3. ループの基本構文

from pycodedj import dj, loop

@loop(interval=1.0)
def loop_name():
    dj.volume = 0.3
    dj.eq = "flat"
    pass
設定意味デフォルト
dj.volume音量。0.0〜1.00.3
dj.eqEQ プリセット"flat"
dj.low/mid/high帯域別 EQ 上書き。0.0〜2.0プリセット値
dj.patternリズムと音程のパターンなし
@loop(interval=0.25)
def hats():
    dj.volume = 0.08
    dj.eq = "edm"
    dj.low = 0.5
    dj.high = 1.25
プリセット傾向
"flat"補正なし
"classic" / "classical"低域と高域を控えめにして中域を少し出す
"jazz"暖かい低域、中域の存在感、少し柔らかい高域
"rock" / "pop"低域と高域を少し上げる
"edm" / "hiphop"低域を強める
"acoustic"低域を控えめにして中高域を少し上げる

4. コード構造マッピング

dj.pattern がないループでは、関数本体の形が音になります。

読み取るもの音楽パラメーター効果
ブロックの最大ネスト深度フィルター cutoff深いほど明るい
if / for / while の数LFO レート多いほど速い
ネストした def の数声部数多いほど厚い
コメント率リバーブコメントが多いほど空間が広い

5. dj.pattern でリズムと音程を指定する

@loop(synth="bass_acid", root="A1", scale="minor", beat=0.25)
def bass():
    dj.volume = 0.35
    dj.pattern = "0 . [0 3] ~ 5 . 3 ."
トークン意味
xルート音で鳴らす
.休符
0, 1, ...スケール度数
[0 3]コード
~タイ

dj.pattern = p1 のような変数参照は読み取りません。パターン文字列はループ本体に直接書いてください。

6. 複数ループ

@loop(synth="kick_floor", beat=0.25)
def kick():
    dj.volume = 0.8
    dj.pattern = "x . x ."

@loop(interval=4.0)
def pad():
    dj.volume = 0.08
    # 広い空間
    pass
pycodedj watch examples/demo.py

7. 音色リファレンス

synth= に SuperCollider の音色名を指定します。関数名はループ名のままで、synth= は鳴らす音色だけを選びます。

@loop(synth="bass_acid", root="A1", scale="minor", beat=0.25)
def acid():
    dj.volume = 0.25
    dj.pattern = "0 . 3 . 5 ."

全音色を 1 つずつ試聴:

pycodedj eval examples/sound_showcase.py::kick_floor
pycodedj eval examples/sound_showcase.py::bass_acid
pycodedj eval examples/sound_showcase.py::lead_acid

Kick

音色キャラクター向いている用途
kick_hardタイトでパンチのある短いキック強い頭拍、ミニマルなパターン
kick_floor太い four-on-the-floor キックダンス/テクノ系の主キック
kick_pulse軽めのパルスキック補助的な拍、柔らかいリズム支え
kick_softクリックを抑えた丸いキック柔らかいグルーヴ、静かな展開
kick_909長めの電子的なキックテールハウス/テクノの土台
kick_click立ち上がりが明確な短いキック速いパターン、輪郭が欲しい場面

Bass

音色キャラクター向いている用途
bass_rumble深くゆるい低域の圧力キック下のランブル層
bass_reese横に広がる Reese 系ベース暗いベースライン、持続する動き
bass_subクリーンなサブ低域ルート低音、床を支える音
bass_acidレゾナンスのある 303 風ベースアシッドベースライン、細かいシーケンス
bass_pluck短いプラック系ベースシンコペーションのある低域フック
bass_fm金属感のある FM ベース打楽器的なベースライン
bass_mono素直なモノシンセベース安定したベースフレーズ
bass_wobbleフィルターが揺れるベースダブステップ風の動き、ブレイク

Percussion

音色キャラクター向いている用途
hat_engine短いクローズ/オープンハット感16分グリッド、前に進むノリ
hat_ride長めのオープンハット/ライド感裏拍、持続する高域エネルギー
clap_snap鋭く乾いたクラップ短いアクセント
clap_snareスネア寄りの広いクラップ2拍4拍のバックビート
tom_drumピッチが動くタムフィル、展開、低めの打楽器
snare_roll連打系スネアロール、ビルドアップ
crash_noise長いノイズクラッシュセクション切替、インパクト
rim_shot乾いたリムのアタック隙間のあるシンコペーション
cowbell金属的な2音のヒットクラシックなマシンパーカッション
perc_blip小さな音程付きブリップミニマルな打楽器、細かい返し
shaker_loop連続するシェイカー感高域のグルーヴ、前に進む動き
tick_metal小さな金属クリックグリッチグリッド、高域アクセント
wood_block木質のノック音乾いたパーカッションパターン

Chords / Stabs

音色キャラクター向いている用途
chord_rave明るいレイヴスタブ短いコードヒット、フック
stab_neon艶のあるシンセスタブメロディックなアクセント
chord_dub柔らかい dub techno 風コード空間のあるコードパルス
stab_sawデチューンした saw スタブ強めの和声アクセント
chord_organオルガン風コード暖かい和声の土台
bell_rave金属的な FM ベル明るいメロディックスタブ
pad_minor暗いマイナーパッド不穏さ、暗めの和声ベッド
chord_deep低くフィルターされたコードディープハウス/dub techno のパルス
chord_glass透明感のあるコード明るくきれいな和声アクセント
pad_warmなめらかなアナログ風パッド柔らかい背景の和声
pad_stringストリングス風シンセパッド長く伸びる情緒的なレイヤー
pad_choir声のフォルマントを持つパッドリードボーカルなしの合唱感

Leads / Notes

音色キャラクター向いている用途
lead_acidアシッド風リードメロディックなシーケンス
lead_hooverHoover 系リード大きく伸びるフレーズ
pluck_soft柔らかいプラック隙間のあるメロディ
arp_synthアルペジオ向きシンセ速いメロディの動き
lead_square空洞感のある矩形波リードレトロなメロディックフック
lead_fmベル寄りの FM リード明るいデジタルメロディ
lead_chip短いチップチューン風リード速いゲーム音楽風フレーズ
lead_sawデチューンした saw リード大きめのメロディライン
lead_whistle細いサイン波風ホイッスル高域の対旋律
noteニュートラルな音程シンセdj.pattern の音程確認、コード確認

Atmosphere / FX

音色キャラクター向いている用途
pad_shimmer広くゆっくりしたシマーパッド背景のパッド
air_warehouse工業的な部屋鳴り空気感、ノイズベッド
vox_ahh声のフォルマント風パッドブレス、合唱風レイヤー
fx_drop低いインパクト音ドロップ、展開
fx_riser上昇するノイズビルドアップ
fx_glitch小さなグリッチクリック細かい打楽器テクスチャ
drone_space低く変化するドローン長いアンビエントの土台
fx_down下降するノイズスイープドロップ、セクション終わり
fx_zap短く落ちるレーザー風ヒット小さな FX の句読点
fx_noiseフィルターされたノイズバーストインパクト、展開
fx_laserピッチが曲がるレーザー FXSF 風アクセント
fx_vinylクラックルとヒスの背景質感、ローファイな背景

8. CLI リファレンス

pycodedj eval FILE::LOOP
pycodedj watch examples/demo.py
pycodedj panic
pycodedj stop bass
pycodedj mute bass
pycodedj unmute bass

9. トラブルシューティング

音が出ない場合は SuperCollider を boot し、sc/synths.scd を実行し、OSC port を確認してください。

loop not found の場合、:: の後ろが Python の関数名と一致しているか確認してください。

10. 内部構成

PyCodeDJ は Python ソースを ast で解析します。loop, dj, pattern は通常 import できる実行時ヘルパーです。