Skip to content

Latest commit

 

History

62 Commits

Folders and files

NameName
Last commit message
Last commit date
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

djay-audio-loader

Swinsian または Music.app で選択中の楽曲を djay Pro の指定デッキにロードするツール群。

アーキテクチャ

flowchart TD
    subgraph helper["djay-audio-loader-helper"]
        config["config.rs\n(設定読込)"]
        hotkey["hotkey.rs\n(CGEventTap 監視)"]
        latest_track["latest_track\n(最新トラック情報保持)"]
        config --> hotkey
        hotkey --> latest_track
    end

    hotkey -->|"Ctrl+Shift+1/0\nサブプロセス起動"| main
    main -->|"stdout JSON"| latest_track
    hotkey -->|"Ctrl+Shift+5"| ndp_publish

    subgraph did["drag-into-djay"]
        main["main.rs"]

        subgraph track["track.rs (選択トラック取得)"]
            direction TB
            ax_swinsian["AX API\n(Swinsian)"]
            osascript["osascript\n(Music.app)"]
        end

        subgraph drag["drag.rs (ドラッグ実行)"]
            direction TB
            ax_djay["AX API\n(djay Pro 座標)"]
            cgevent["CGEvent\n(マウス操作)"]
        end

        main -->|"優先順位①アクティブ\n②Swinsian→Music"| track
        main --> drag
    end

    track -.->|選択行の座標・メタ情報| drag

    subgraph apps["外部アプリケーション"]
        Swinsian(["Swinsian"])
        MusicApp(["Music.app"])
        djayPro(["djay Pro"])
    end

    ax_swinsian <-->|Accessibility API| Swinsian
    osascript <-->|AppleScript| MusicApp
    ax_djay <-->|Accessibility API| djayPro
    cgevent -->|ドラッグ&ドロップ| djayPro

    subgraph ndp["ndp (now-dj-playing)"]
        ndp_publish["ndp-publish\n(楽曲タグ・アートワーク送信)"]
        ndp_server["ndp-server"]
        shared_dir["共有ディレクトリ\n(iCloud Drive)"]
        viewer["viewer\n(now-dj-playing)"]
        ndp_publish -->|"local モード\nnow_playing.json\nartwork.*"| shared_dir
        ndp_publish -->|"web モード\nHTTP POST"| ndp_server
        shared_dir -->|ファイル監視| viewer
        ndp_server -->|WebSocket| viewer
    end

Loading

ツール構成

バイナリ 役割
drag-into-djay 選択中トラックを djay Pro の指定デッキにドラッグ&ドロップでロードする CLI
djay-audio-loader-helper グローバルホットキーを監視し drag-into-djay を呼び出すヘルパ

前提条件

  • macOS
  • Swinsian または Music.app が起動済み
  • djay Pro が起動済み・フォアグラウンド表示されていること
  • システム設定 > プライバシーとセキュリティ > アクセシビリティ にて本ツールへの権限を付与済みであること

ビルド

cargo build --release

生成されるバイナリ:

target/release/drag-into-djay
target/release/djay-audio-loader-helper

使い方

drag-into-djay

Swinsian または Music.app で楽曲を選択した状態で実行する。

drag-into-djay -d <DECK_NO>

オプション:

オプション 説明 デフォルト
-d, --deck <DECK_NO> ロード先のデッキ番号 (1 or 2) 必須
--drop-delay <MS> ドロップ前のホバー待機時間 [ms] 250
--no-activate アプリのアクティブ化処理をスキップする false

例:

# デッキ1にロード
drag-into-djay -d 1

# デッキ2にロード(アクティブ化スキップ)
drag-into-djay -d 2 --no-activate

動作:

  1. 以下の優先順位でアプリの選択中トラックを取得:
    1. Swinsian がアクティブ(フォアグラウンド)かつ選択中トラックあり
    2. Music.app がアクティブかつ選択中トラックあり
    3. Swinsian が起動中かつ選択中トラックあり(非アクティブ)
    4. Music.app が起動中かつ選択中トラックあり(非アクティブ)
  2. djay Pro のウィンドウ座標を Accessibility API で動的取得
  3. CGEvent でドラッグ&ドロップを実行

djay-audio-loader-helper

グローバルホットキーを監視し、押下時に drag-into-djay を呼び出す。Ctrl+C で終了。

djay-audio-loader-helper [OPTIONS]

オプション:

オプション 説明 デフォルト
--no-activate drag-into-djay--no-activate を渡す false
-D, --session-basedir <DIR> セッションログのベースディレクトリ なし
-S, --session-dir <DIR> セッションディレクトリを直接指定 なし
-P, --publisher <PATH> ndp-publish バイナリのフルパス(未指定時は NDP 機能無効) なし
-C, --publisher-config <PATH> ndp-publish 設定ファイルのパス なし
-W, --publisher-web-mode ndp-publish を web モードで動作させる false
--publisher-code <CODE> セッション参加用 6 桁コード(web モード時) なし

デフォルトホットキー:

ホットキー 動作
Ctrl+Shift+1 デッキ1にロード
Ctrl+Shift+0 デッキ2にロード
Ctrl+Shift+5 最新のロード曲情報で ndp-publish を実行

動作:

  • ホットキー押下時に drag-into-djay をサブプロセスとして起動
  • ホットキーイベントは消費され、他のアプリには伝達されない
  • drag-into-djay の実行中に再度ホットキーを押した場合はスキップ(多重起動防止)
  • djay-audio-loader-helperdrag-into-djay は同じディレクトリに配置すること

NDP (Now DJ Playing) 連携

now-dj-playingndp-publish CLI と連携し、再生中の楽曲情報をリアルタイムに viewer アプリへ共有する。

  • -P を指定すると NDP 機能が有効化される
  • デッキへのロード成功時に helper が最新の楽曲情報を保持
  • Ctrl+Shift+5 で保持中の楽曲情報を基に ndp-publish を実行
local モード(デフォルト)

設定ファイルの local.publish_base_dir に指定されたディレクトリに楽曲情報を書き出す。helper 起動時に出力先ディレクトリをクリンナップ(前回セッションの残存データを削除)する。

djay-audio-loader-helper \
  --no-activate \
  -P /path/to/ndp-publish \
  -C /path/to/ndp-publish.config.json
web モード

ndp-server にHTTPで楽曲情報を送信する。起動時にセッション参加(join)を行い、Ctrl+C 終了時にセッション離脱(leave)を自動実行する。

djay-audio-loader-helper \
  --no-activate \
  -P /path/to/ndp-publish \
  -C /path/to/ndp-publish.config.json \
  -W \
  --publisher-code 123456

web モードのライフサイクル:

  1. 起動時: ndp-publish -J でセッションに参加(認証コード不正時はエラー終了)
  2. Ctrl+Shift+5: ndp-publish -W --file <PATH> で楽曲情報を送信
  3. Ctrl+C: ndp-publish -L でセッションから離脱して終了

About

No description, website, or topics provided.

Resources

Stars

0 stars

Watchers

0 watching

Forks

Releases

Packages

Contributors

Languages