機能と使い方をまとめたドキュメント。インストール手順は install.md を参照。
プロのライブ現場向けの プログラマブル DJ エンジン。人間の UI 操作・AI 提案・Lua スクリプトが、同じ Conductor 層に対する "指示" として等価に扱われるのが設計思想。
- 2 デッキ + クロスフェーダー + マスター + EQ / フィルタ / FX の標準ミキサー構成
- BPM・キー解析、Hot Cue、ループ、ビートシンク、キーシンク、テンポレンジ切替
- 自動化テンプレート (Visual / Node / Lua) で「次の遷移」を予約・実行
- セットリスト管理 +
.csetエクスポート/インポート - YouTube から取り込み (yt-dlp 連携)
トップバーから 7 画面を切り替える。
| 画面 | 役割 |
|---|---|
| Mix | 2 デッキ + ミキサー + 自動化トランスポート。本番中はここに居る |
| Controller | ジョグ・Transport Cue・ミキサー・検索を集約。USB 音声 / MIDI / Pro DJ Link の接続設定 |
| Library | 取り込んだトラックの一覧と検索、デッキへのロード |
| Templates | 自動化テンプレートを作る (Visual / Node / Lua の 3 タブ) |
| Setlist | プレイ順をピン留めし、トランジションを設計する。.cset 入出力 |
| YouTube | URL から音源を取り込む (feature: yt-download) |
| Settings | キー割り当て、オーディオデバイス、ライブラリパス |
右上の ⌨ Keys ボタンでショートカット一覧が出る。
- Library 画面: 楽曲のあるフォルダをスキャンする → BPM / キー / Hot Cue が自動推定される
- Mix 画面: 左のデッキ A に Load… で曲をロード。Play で再生開始
- ロード直後は波形の解析バーが流れる。終わると拍グリッド/Hot Cue が描画される
- デッキ B にも別の曲をロードし、
BEAT SYNCでテンポを合わせる - 必要に応じて
KEY SYNCで Camelot キーを揃える (半音単位の pitch-shift) - クロスフェーダーや EQ を触ってミックスする。
MixSuggestionパネルが次曲候補を提案してくれる
- 波形: 全体波形 (上段) と拡大波形 (下段、ズーム可)。クリックでシーク
- TEMPO: ±6 / ±10 / ±16 % のレンジを切替。
MTで master tempo (keylock) を有効化するとピッチ保存のままテンポだけ動く - BEAT SYNC: 反対デッキの effective BPM (track BPM × playback_speed) に自分の playback_speed を合わせる
- KEY SYNC: 反対デッキの Camelot key への最短半音差を pitch_offset に保存
- CUE ボタン: PFL (ヘッドフォン送り)。出力デバイスに CUE バスを割り当てておく必要あり (Settings)
- CH VOLUME: チャンネルフェーダー (0.0〜2.0)
- 各デッキに LOW / MID / HIGH の 3 バンド EQ
- フィルタ (HPF/LPF 兼用ノブ)
- FX (リバーブ / ディレイ等。要件 §6 参照)
[で IN、]で OUT (どちらも最寄りビートにスナップ)\で ON/OFF.で 1 bar 拡張、,で 1 bar 縮小
- 数字キー
1〜8でジャンプ Shift + 1〜8で現在位置を保存 (ビートスナップあり)Alt + 1〜8で削除
トラックの構造を意味付きでマークする。MixSuggestion はここを基準に「次曲のここから入れる」候補を出す。
- クロスフェーダーは −1.0 (A) 〜 +1.0 (B) の連続値
- Center ボタンで 0 に戻す
- Master スライダーは画面上部にも常駐
アクティブデッキの BPM / Key / Energy に近い候補を、未ロード側デッキ向けに提案する。
Enterで 1 位を反対デッキにロード + Cue 位置にシークEscで dismiss
Template Launcher で自動化テンプレートを選び「Start」。実行中は TransportStatusPanel に進捗が出る。
Reverseチェックで B→A 方向に反転して走らせる (Deck A↔B + クロスフェーダー符号を内部で flip)Shift + Escで abort 確認ダイアログ- 個別ターゲットの上書きは
OverrideControlsから (O = Override / R = Resume / C = Commit)
左右に A / B の波形・BPM・残り時間・ジョグ・テンポ・ループ・Hot Cue、中央にミキサー、下部に検索可能なライブラリとセットリストを表示する。Mix と同じ再生状態を使い、画面切り替え後も再生と MIDI 操作を継続する。
- Controller 上部の音声出力表示から 接続と出力 → Audio を開く。
- 音声出力デバイスとミキシング方式を選ぶ。Internal は MAIN とヘッドホン CUE、External は Deck A と Deck B に、異なるステレオ出力ペアを割り当てる。
- A / B の再生と自動化を停止して 音声出力を適用。チャンネル番号はドライバーと実機の設定に合わせる。画面の
1 / 2などは音声出力番号で、DJM の CH1 / CH2 と同じ意味ではない。 - 下部のライブラリから A / B へ曲をロードし、Play。ヘッドホン試聴は中央の HEADPHONE CUE、CUE / MASTER バランス、ヘッドホン音量を使う。
TRANSPORT CUE は再生位置と押下中の試聴を扱うデッキ操作。HEADPHONE CUE はヘッドホンへの音声送り。External ではミックスとヘッドホン操作を外部ミキサーで行い、ソフトの EQ・フィルタ・フェーダー・マスター、およびそれらを使う自動化を無効化する。デッキ FX は利用できる。
接続と出力 → MIDI で入力ポート・機種プリセットを選び、MIDI を接続 / 更新する。CDJ は USB のソフトウェア操作モードにして、各機器が操作する A / B を指定する。FLX4 / FLX10 は対応 LED 用の出力ポートも選択できる。実機フェーダーは現在のソフトの値を通過してから反映される。切断後はポートを再検出し、再接続する。
DJM-A9 の既定 MIDI 割り当ては CH1 → A / CH3 → B (MIDI チャンネル 1)。External で使う音声出力ペアも、実際に A9 の CH1 / CH3 に届くようドライバー側と合わせる。FLX10 はデッキ 1 / 2、HOT CUE ページ 1 を使用する。機種ごとの未割り当て操作は MIDI プリセットの説明 を参照。
Pro DJ Link と機種プリセットは実機未検証の実験的対応。 同じ CDJ に対して、LAN から曲を読み込んで本体で演奏するモードと、USB で Conduction を操作するモードを同時に使う構成は対象外。LAN モードでは CDJ 自身の音声出力をミキサーに接続する。
- Conduction と CDJ を同じ LAN につなぐ。接続と出力 → Pro DJ Link で使用するネットワークインターフェースを選ぶ。
- Pro DJ Link に接続するを有効にし、CDJ への選曲・ロードを試す場合は ライブラリを LAN に公開するも有効にする。送信元デッキは初期値 A、仮想プレーヤー番号は自動を選び、Link 設定を適用。
- 準備完了後、公開曲数と公開できなかった曲を確認する。OGG など実機向けの変換が必要な曲は事前に WAV キャッシュを生成する。取り込みや Cue 編集後は 公開ライブラリを更新する。
- Conduction 側の追従デッキで SYNC を有効にする。拍グリッドが必要。マスターの交代や音声出力の遅延補正は実際の出力を計測して確認する。
LAN 公開は初期状態でオフ。公開中は選択インターフェースから登録済み楽曲を読み取れる。従来形式の青い波形は既存 RMS データから生成し、拡大表示の細部は概算。高度なカラー / 3 バンド波形要求とアートワークには未対応。詳しい対応範囲と 60 分の実機確認手順は 実機検証ガイド を参照。
Templates 画面では自動化テンプレートを作成・編集できる。3 つのタブで、同じ Template モデルを別々の角度から扱う。
AutomationTimeline 上で、ターゲット別 (crossfader, deck_volume.A, deck_eq_low.A …) に keyframe を打つ。
- ドラッグでキーフレームの位置と値を変更
- カーブタイプ (linear / smooth / ease-in / ease-out) を keyframe 単位で切替
- 直接プレビューが反映される
react-flow ベースのノードエディタ。トラックごとに Source → Target のノードペアを並べる薄め MVP。
- 複雑な依存を視覚化したいとき向け
- Source ノードは「いま何拍め」「BPM」など、Target ノードは「crossfader = …」のような書き込み先
Monaco エディタで Lua スクリプトを書く。Lua は コードジェネレータ として扱われ、コンパイル時に Template AST に変換される (オーディオスレッドで Lua は走らない)。
Cmd/Ctrl + Enter でコンパイル。エラーは Monaco の inline marker として表示される。
set_duration(bars) -- テンプレートの全長 (bars 単位)
set_direction("a_to_b" | "b_to_a")
keyframe(target, beat, value, curve)
-- target: "crossfader" | "deck_volume.A" | "deck_eq_low.A" ...
-- curve : "linear" | "smooth" | "ease_in" | "ease_out"| 名前 | 概要 |
|---|---|
clamp(x, lo, hi) |
クランプ |
lerp(a, b, t) |
線形補間 |
smoothstep(a, b, t) |
smoothstep 補間 |
each_bar(bars, fn) |
1 bar ごとに fn(bar, beat) を呼ぶイテレータ |
each_phrase(bars, fn) |
4 bar (phrase) ごとに fn(phrase, beat) を呼ぶイテレータ |
set_duration(16)
keyframe("crossfader", 0, -1.0, "linear")
keyframe("crossfader", 64, 1.0, "smooth")
each_bar(16, function(bar, beat)
local t = bar / 16
keyframe("deck_eq_low.A", beat, lerp(1.0, 0.0, smoothstep(0, 1, t)), "linear")
end)エディタ右上のボタン (もしくは Help アイコン) で Conduction Script Docs のスライドインパネルが開く。Overview / Globals / Built-in functions / Prelude / Targets table / Curves table / Examples が入っている。Esc で閉じる。
5 つのビルトインプリセット (linear_16bar, crossfade_outro_intro, eq_swap, filter_sweep, build_drop) はすべて Lua ソース付き。Templates 画面で「View source」を押すと Lua コードが出てくるので、コピーして自分用に改造できる。
ユーザーが作成したテンプレートは user_templates テーブルに保存される (conduction-library の SQLite)。Templates 画面の右ペインから:
- Duplicate (複製)
- Rename
- Delete
ができる。プリセットは preset.*、ユーザーテンプレートは user.* のプレフィックスで識別される。
プレイ順とトランジションを設計するための画面。
- 左ペイン: トラック一覧をドラッグして並び替え
- 右ペイン:
SetlistOverviewで曲ごとのトランジション秒数・テンプレート割当 .cset形式でエクスポート / インポート (他人と共有・別マシンに持ち運び可能)
「Load to Deck」を押すと、現在ハイライトしている曲がデッキ A もしくは B に流し込まれる。
- 取り込み済みトラックの一覧、メタデータ (Title / Artist / BPM / Key / Energy / Length)
- ダブルクリックでアクティブなデッキにロード
- 右クリックメニューから再解析やパスのコピー
スキャンは初回フォルダ指定後、バックグラウンドで進む。BPM / キーは conduction-analysis クレートが推定する。
URL を貼って Import を押すと、yt-dlp がローカルにダウンロード → 自動解析 → Library に追加される。
cargo build --features yt-download でビルドされたバイナリのみ有効。
- Audio output: MAIN / CUE のデバイスを指定。Internal / External とステレオ出力ペアの詳細は Controller の 接続と出力 → Audio で設定
- Key bindings: 後段 (Phase 3b-10) で画面から変更可。現状はハードコードのデフォルト
- Library path: トラック取り込みのルート
| キー | 動作 |
|---|---|
Space |
再生 / 一時停止 (active deck) |
Q / W |
デッキ A / B にフォーカス |
← / → |
1 拍 back / fwd (Shift で微小シーク) |
I / O |
2 拍 back / fwd |
K / L |
4 拍 back / fwd |
↑ / ↓ |
ズーム in / out |
1〜8 |
Hot Cue 1〜8 にジャンプ |
Shift + 1〜8 |
現在位置を Hot Cue として保存 |
Alt + 1〜8 |
Hot Cue 削除 |
[ / ] / \ |
Loop IN / OUT / Toggle |
. / , |
Loop +1 / −1 bar |
Enter |
MixSuggestion の 1 位を採用 |
Esc |
MixSuggestion を dismiss / docs パネル閉じる |
Shift + Esc |
実行中テンプレートを Abort |
O / R / C |
フォーカス中ターゲットの Override / Resume / Commit |
Cmd/Ctrl + Enter |
Script エディタでコンパイル実行 |
- SQLite:
~/Library/Application Support/com.xxvw.Conduction/library.db(macOS) - スキーマバージョンは
schema.rs::CURRENT_SCHEMA_VERSIONで管理 (現在 v6)。起動時に自動マイグレーション - Waveform / beats / cues / hot cues / setlists / user_templates が同 DB に格納される
- Link の曲 / セットリスト ID は同 DB に保存。同一パスの曲を再取り込みしても維持され、削除した ID は再利用しない
.csetファイルは setlist 全体 + 参照トラックの軽量メタを 1 ファイルにまとめる
UI で何かを操作すると ui/src/lib/ipc.ts 経由で Tauri command が呼ばれる → crates/conduction-app/src/commands.rs で受け取る → 必要なクレート (audio / conductor / library / script) に委譲する。
オーディオスレッドは cpal のコールバックで回り、ステート同期は arc-swap + ringbuf で行う。10 Hz の mixer snapshot が UI に降りてきて、波形カーソルだけ 60 Hz に補間して描く。
詳しくは conduction-requirements.md。
| 症状 | 対処 |
|---|---|
| 起動しても「audio engine connecting…」のまま | オーディオデバイスを他アプリが専有 / Settings で出力選択 / 一度アプリを終了 |
| ポート 38127 が使用中エラー | lsof -ti:38127 | xargs kill |
| Monaco エディタの補完が空欄 | ブラウザキャッシュ削除 / dev サーバ再起動 |
| BPM/Key が出ない | 解析が走っていない可能性。Library から再解析を試す |
Lua コンパイルエラー: attempt to call a nil value (global ...) |
Conduction Script API のサンドボックスは math / string / table のみ許可。OS 系 API は使えない |
.cset インポートで一部曲が無い |
参照先トラックが当該マシンに存在しない。Library 取り込みを先に行う |