Beat Link C++ - 実装計画 v3.0
Beat Link C++ は Deep Symmetry Beat Link (Java) の C++20 移植プロジェクトです。
Pioneer DJ Link プロトコルを実装し、CDJ/XDJ/DJM 機器との通信を可能にします。
カテゴリ
Java
C++
状態
Core (beatlink/)
30
30
✅ 完了
Data (data/)
40
38
✅ 実装済み (UIスキップ)
DBServer (dbserver/)
7
7
✅ 完了
Python Bindings
-
1
✅ 完了 (105 API)
Tests
多数
少数
❌ 要拡充
コンポーネント
ファイル
行数
状態
DeviceFinder
DeviceFinder.cpp
399
✅
BeatFinder
BeatFinder.cpp
459
✅
VirtualCdj
VirtualCdj.cpp
1736
✅
VirtualRekordbox
VirtualRekordbox.cpp
712
✅
Beat
Beat.cpp
35
✅
CdjStatus
CdjStatus.cpp
6 (ヘッダ主体)
✅
MixerStatus
MixerStatus.cpp
6 (ヘッダ主体)
✅
DeviceAnnouncement
DeviceAnnouncement.cpp
6 (ヘッダ主体)
✅
DeviceUpdate
DeviceUpdate.cpp
6 (ヘッダ主体)
✅
MediaDetails
MediaDetails.cpp
238
✅
Metronome
Metronome.cpp
97
✅
PrecisePosition
PrecisePosition.cpp
59
✅
Util
Util.cpp
6 (ヘッダ主体)
✅
コンポーネント
ファイル
行数
状態
MetadataFinder
MetadataFinder.cpp
937
✅
TimeFinder
TimeFinder.cpp
607
✅
WaveformFinder
WaveformFinder.cpp
813
✅
BeatGridFinder
BeatGridFinder.cpp
394
✅
ArtFinder
ArtFinder.cpp
489
✅
AnalysisTagFinder
AnalysisTagFinder.cpp
541
✅
SignatureFinder
SignatureFinder.cpp
496
✅
OpusProvider
OpusProvider.cpp
482
✅
CrateDigger
CrateDigger.cpp
367
✅
MenuLoader
MenuLoader.cpp
692
✅
コンポーネント
状態
備考
TrackMetadata
✅
Builder パターン実装済み
WaveformPreview
✅
ANLZ コンストラクタ追加済み
WaveformDetail
✅
ANLZ コンストラクタ追加済み
BeatGrid
✅
ANLZ対応済み
CueList
✅
Entry デフォルトコンストラクタ追加済み
AlbumArt
✅
stb_image で JPEG/PNG デコード実装済み
DataReference
✅
デフォルトコンストラクタ追加済み
SlotReference
✅
DeckReference
✅
SearchableItem
✅
ColorItem
✅
コンポーネント
ファイル
行数
状態
Client
Client.cpp
280
✅
ConnectionManager
ConnectionManager.cpp
322
✅
Message
Message.cpp
465
✅
Field
Field.cpp
48
✅
NumberField
NumberField.cpp
74
✅
StringField
StringField.cpp
77
✅
BinaryField
BinaryField.cpp
47
✅
DataReader
DataReader.cpp
79
✅
Parsers (generated/ & data/)
コンポーネント
ファイル
行数
状態
rekordbox_anlz
rekordbox_anlz.cpp
557
✅ Kaitai生成
rekordbox_pdb
rekordbox_pdb.cpp
462
✅ Kaitai生成
AnlzParser
AnlzParser.cpp
353
✅
PdbParser
PdbParser.cpp
368
✅
ZipArchive
ZipArchive.cpp
215
✅
SqliteConnection
SqliteConnection.cpp
431
✅
Listeners (include/beatlink/)
すべてのリスナーインターフェースがヘッダーファイルとして実装済み:
BeatListener, DeviceAnnouncementListener, DeviceUpdateListener
MasterListener, SyncListener, FaderStartListener, OnAirListener
MasterHandoffListener, MediaDetailsListener, LifecycleListener
PrecisePositionListener
TrackMetadataListener, BeatGridListener, WaveformListener
AlbumArtListener, AnalysisTagListener, SignatureListener
TrackPositionListener, TrackPositionBeatListener
MountListener, DatabaseListener, SQLiteConnectionListener
以下はJava Swing固有のUIコンポーネントのため、C++への移植対象外:
コンポーネント
理由
WaveformDetailComponent
Java Swing UI
WaveformPreviewComponent
Java Swing UI
OverlayPainter
Java Swing UI
RepaintDelegate
Java Swing UI
※ C++側では beatlink_gui.cpp で ImGui ベースのGUIを独自実装済み
Phase 5: Python Bindings 完成 ✅ 完了
# 使用可能な機能
import beatlink_py as bl
bl .start_device_finder ()
bl .start_beat_finder ()
bl .start_virtual_cdj ()
bl .start_metadata_finder ()
bl .add_beat_listener (callback )
bl .get_track_metadata (player )
bl .get_waveform_preview (player )
bl .get_album_art (player )
bl .get_beat_grid (player )
bl .get_cue_list (player )
# 合計105個のAPI
# 実装済み
bl .get_waveform_preview (player ) # → WaveformPreview
bl .get_waveform_detail (player ) # → WaveformDetail
bl .get_album_art (player ) # → AlbumArt (raw bytes)
bl .get_cue_list (player ) # → CueList
bl .get_beat_grid (player ) # → BeatGrid
bl .clear_beat_listeners () # リスナー削除
# .github/workflows/build.yml
- macOS (arm64, x86_64)
- Linux (Ubuntu 22.04+)
- Windows (MSVC 2022)
beat-link-cpp/
├── CMakeLists.txt
├── README.md
├── INSTRUCTION.md
├── PLANS.md
├── include/beatlink/
│ ├── BeatLink.hpp # メインヘッダー (全インクルード)
│ ├── PacketTypes.hpp # プロトコル定数
│ ├── Util.hpp # ユーティリティ
│ ├── SafetyCurtain.hpp # 出力リミッター
│ ├── HandlePool.hpp # ハンドル管理
│ ├── ApiSchema.hpp # API イントロスペクション
│ │
│ ├── DeviceReference.hpp
│ ├── DeviceAnnouncement.hpp
│ ├── DeviceUpdate.hpp
│ ├── Beat.hpp
│ ├── CdjStatus.hpp
│ ├── MixerStatus.hpp
│ ├── MediaDetails.hpp
│ ├── PlayerSettings.hpp
│ ├── Metronome.hpp
│ ├── PrecisePosition.hpp
│ ├── Snapshot.hpp
│ │
│ ├── DeviceFinder.hpp
│ ├── BeatFinder.hpp
│ ├── VirtualCdj.hpp
│ ├── VirtualRekordbox.hpp
│ │
│ ├── *Listener.hpp # 各種リスナーインターフェース
│ │
│ ├── data/
│ │ ├── DataReference.hpp
│ │ ├── SlotReference.hpp
│ │ ├── DeckReference.hpp
│ │ ├── TrackMetadata.hpp
│ │ ├── BeatGrid.hpp
│ │ ├── CueList.hpp
│ │ ├── WaveformPreview.hpp
│ │ ├── WaveformDetail.hpp
│ │ ├── AlbumArt.hpp
│ │ ├── AnalysisTag.hpp
│ │ ├── SearchableItem.hpp
│ │ ├── ColorItem.hpp
│ │ ├── PlaybackState.hpp
│ │ │
│ │ ├── MetadataFinder.hpp
│ │ ├── TimeFinder.hpp
│ │ ├── WaveformFinder.hpp
│ │ ├── BeatGridFinder.hpp
│ │ ├── ArtFinder.hpp
│ │ ├── AnalysisTagFinder.hpp
│ │ ├── SignatureFinder.hpp
│ │ │
│ │ ├── OpusProvider.hpp
│ │ ├── CrateDigger.hpp
│ │ ├── MenuLoader.hpp
│ │ ├── Database.hpp
│ │ │
│ │ ├── MetadataProvider.hpp
│ │ ├── AnlzParser.hpp
│ │ ├── AnlzTypes.hpp
│ │ ├── PdbParser.hpp
│ │ ├── ZipArchive.hpp
│ │ ├── SqliteConnection.hpp
│ │ │
│ │ └── *Listener.hpp, *Update.hpp
│ │
│ └── dbserver/
│ ├── Client.hpp
│ ├── ConnectionManager.hpp
│ ├── Message.hpp
│ ├── Field.hpp
│ ├── NumberField.hpp
│ ├── StringField.hpp
│ ├── BinaryField.hpp
│ └── DataReader.hpp
│
├── src/
│ ├── *.cpp # Core 実装
│ ├── data/*.cpp # Data 実装
│ ├── dbserver/*.cpp # DBServer 実装
│ ├── generated/ # Kaitai 生成コード
│ │ ├── rekordbox_anlz.h/cpp
│ │ └── rekordbox_pdb.h/cpp
│ └── python_bindings.cpp
│
├── examples/
│ ├── simple_beat_listener.cpp
│ ├── beatlink_cli.cpp
│ └── beatlink_gui.cpp
│
├── tests/
│ ├── golden_test.py
│ ├── communication_test.py
│ ├── real_device_test.py
│ └── emulator.py
│
└── external/
├── beat-link/ # Java リファレンス
└── crate-digger-cpp/ # .ksy 定義
優先度
Phase
内容
状態
✅
0
安全性強化 (例外除去)
完了
✅
1
VirtualCdj
完了
✅
1.5
data/バグ修正
完了
✅
2
デバイス管理強化
完了
✅
3
OpusProvider
完了
✅
4
品質向上
完了
✅
5
Python Bindings 完成
完了 (105 API)
✅
6
テスト整備
完了 (Catch2)
🔵
7
CI/CD
将来
✅
8
ドキュメント
完了
ライブラリ
用途
バージョン
asio
ネットワーク
standalone (non-Boost)
nanobind
Python バインディング
最新
miniz
ZIP 展開
master
sqlite3
DB アクセス
3.45.0
kaitai_struct
バイナリパース
最新
utf8proc
UTF-8 処理
最新
imgui + glfw
GUI (オプション)
最新
CMake 3.15+
C++20 対応コンパイラ
GCC 11+
Clang 14+
MSVC 2022+
Python 3.8+ (バインディングビルド時)
ポート
用途
50000
Device Announcement (UDP)
50001
Beat Broadcast (UDP)
50002
Device Status (UDP)
12523
DBServer Query (TCP)
日付
バージョン
内容
2026-01-18
v1.0
初版作成
2026-01-18
v2.0
Phase 3 完了、OpusProvider 実装
2026-01-19
v3.0
全体移植状況の棚卸し、残作業整理
2026-01-20
v4.0
Phase 4-5 完了、Python Bindings 105 API実装、使用例スクリプト追加
2026-01-20
v5.0
Phase 6 完了 (Catch2 ユニットテスト)、Phase 8 完了 (Doxygen, README, CONTRIBUTING)