Skip to content

Incomplete-Outputs-Lab/prodjlink-volume-guardian

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

1 Commit
 
 

Repository files navigation

ProDJLink Volume Guardian

ProDJLink Volume Guardian は、Pioneer DJ 機器のネットワーク通信(ProDJLink)を監視し、フロアの音量が規定値を超えた際に警告を表示、および CDJ へ強制的な停止信号(緊急停止)を送出するための Tauri ベースのデスクトップアプリケーションです。

音響エンジニアやベニューのオーナーが、過大入力による機材故障や騒音苦情を未然に防ぐためのセーフティツールとして設計されています。


🚀 主な機能

  • リアルタイム・レベルモニタリング: DJM(ミキサー)から送信される各チャンネル、またはマスターアウトのレベルを 単位で監視。

  • 多段階アラート:

  • Warning: 閾値を超えそうになった際の視覚的警告。

  • Emergency Stop: 規定時間を超えて過大入力が続いた場合、対象 CDJ への強制 Pause/Stop 指令。

  • デバイス自動検知: ネットワーク上の CDJ/DJM を ProDJLink アナウンスパケットにより自動リストアップ。

  • 軽量・高速: Rust (Tauri) による低リソース消費と、ミリ秒単位のパケット処理。


🏗 システムアーキテクチャ

ネットワーク構成

本アプリは ProDJLink ネットワーク内の「仮想ノード」として動作します。

graph TD
    subgraph DJ_Booth [DJ Booth Network]
        CDJ1[CDJ-3000 / Player 1]
        CDJ2[CDJ-3000 / Player 2]
        DJM[DJM-A9 / Mixer]
        Switch(Network Switch)
    end

    subgraph Monitoring_PC [Management PC]
        TauriApp[ProDJLink Guardian]
    end

    CDJ1 <--> Switch
    CDJ2 <--> Switch
    DJM <--> Switch
    Switch <--> TauriApp

    DJM -- "UDP Port 50001 (Meter Data)" --> TauriApp
    TauriApp -- "UDP Port 50002 (Remote Stop)" --> CDJ1

Loading

ソフトウェア内部構造

Tauri の Rust バックエンドでパケットのパースを行い、フロントエンドにリアルタイムデータを流し込みます。

sequenceDiagram
    participant DJM as DJM-A9
    participant Rust as Rust Backend (Tokio)
    participant UI as Frontend (React/Vue)
    participant CDJ as CDJ-3000

    Note over Rust: UDP Port 60000 で Announce 送信
    DJM->>Rust: 音量・フェーダーステータス (Port 50001)
    Rust->>Rust: 閾値判定 (Level > Threshold?)
    Rust->>UI: イベント発行 (Update Level/Alert)
    
    alt 強制停止トリガー
        Rust->>CDJ: リモートコントロールパケット (Stop/Pause)
        CDJ->>CDJ: 再生停止
    end

Loading

🛠 技術スタック

Layer Technology Description
Framework Tauri Rustベースの軽量デスクトップフレームワーク
Backend Rust 高速なパケット処理とメモリ安全性の確保
Networking tokio / socket2 非同期UDP通信およびマルチキャスト制御
Frontend React / TypeScript リアルタイム・ダッシュボード表示
Protocol ProDJLink (Custom implementation) 有志による解析に基づくパケット通信

📡 ProDJLink 仕様の要点

本システムが利用する主要な通信ポートとデータ形式です。

  • Discovery (): デバイス間の存在確認。アプリは自身を「PC/Virtual Device」として登録します。
  • Status (): ミキサーのレベルメーター情報( などの値)やフェーダー位置を受信します。
  • Remote Control (): CDJ に対して再生、一時停止、キュー移動などの指令を Unicast で送信します。
  • 注: 最新の CDJ-3000 等では Stagehand プロトコルに準拠した形式が必要です。

📂 プロジェクト構造

.
├── src/                # フロントエンド (UI) コード
├── src-tauri/
│   ├── src/
│   │   ├── main.rs      # Tauri エントリポイント
│   │   ├── link/        # ProDJLink プロトコル実装
│   │   │   ├── packet.rs   # パケット構造定義
│   │   │   └── device.rs   # デバイス管理ロジック
│   │   └── monitor.rs   # 音量監視・判定エンジン
│   └── Cargo.toml       # Rust 依存関係
└── README.md


⚠️ 免責事項 (Disclaimer)

  • 自己責任: 本アプリケーションによる CDJ の強制停止は、パフォーマンスを著しく阻害する可能性があります。運用環境での使用は十分にテストを行ってください。
  • 非公式: 本アプリは Pioneer DJ 株式会社の公式製品ではありません。プロトコルのアップデートにより動作しなくなる可能性があります。

🛠 セットアップとビルド

プリレクイジット

  • Rust / Cargo
  • Node.js / npm or pnpm
  • ProDJLink が動作するネットワーク環境(有線 LAN 推奨)

開発用実行

npm install
npm run tauri dev

今後の実装予定

  • チャンネルごとの個別閾値設定
  • 停止前のカウントダウン警告表示
  • ログ記録機能 (CSV 出力)

About

Proof-of-Concept. ProDJLink Audio Guardian

Resources

Stars

Watchers

Forks

Releases

No releases published

Contributors