ym2151-log-player-rust
YM2151(OPM)レジスタイベントログをJSONファイルから読み込んで、リアルタイム再生とWAVファイル出力を行うプログラムのRust実装版。
ym2151-log-player のRust版です。
状況
音は鳴っていますが不具合があります。issuesを参照ください。
pass2 json出力は、シンプル化のために削除済みです。必要になったらagentに実装させてください。
ステータス
✅ 全フェーズ完了 - すべての機能が実装され、動作可能です。
- ✅ Phase 1: Nuked-OPM FFIバインディング
- ✅ Phase 2: JSONイベント読み込み
- ✅ Phase 3: イベント処理エンジン
- ✅ Phase 4: WAVファイル出力
- ✅ Phase 5: リアルタイムオーディオ再生
- ✅ Phase 6: メインアプリケーション統合
- ✅ Phase 7: Windows ビルドとテスト
詳細は IMPLEMENTATION_PLAN.md を参照してください。
機能
- ✅ JSONログファイルからイベントを読み込み
- ✅ 起動直後から即時リアルタイムオーディオ再生(デフォルト、C言語版と同じロジック)
- ✅ 再生と同時にWAVファイルをキャプチャ保存(output.wav)
- ✅ Nuked-OPMライブラリによる正確なYM2151エミュレーション
- ✅ 高品質サンプルレート変換(55930 Hz → 48000 Hz、再生用)
クイックスタート / Quick Start
詳細なビルド手順については BUILD.md を参照してください。
For detailed build instructions, please refer to BUILD.md.
使い方
基本的な使い方(リアルタイム再生 + WAV保存)
cargo run --release sample_events.json
または、ビルド済みの場合:
./target/release/ym2151-log-player-rust sample_events.json
動作:
- イベントログを読み込み
- 即座にリアルタイム音声再生を開始(C言語版と同じ)
- 再生と同時にWAVファイルをキャプチャ
- 再生完了後、
output.wavを保存
CI/ヘッドレス環境での実行
音声デバイスが利用できない環境(CI/ヘッドレス環境)では、ALSA設定ファイルを使用して音声出力をファイルにリダイレクトできます:
# ALSA設定ファイルを作成
cat <<'EOF' > ~/.asoundrc
pcm.!default {
type file
slave.pcm "null"
file "/tmp/alsa_capture.wav"
format "wav"
}
EOF
# 通常通りプログラムを実行
cargo run --release sample_events.json
この設定により、音声デバイスなしでもプログラムが正常に動作します。
音声出力は /tmp/alsa_capture.wav に保存され、同時に output.wav も生成されます。
コマンドライン引数
使用方法:
ym2151-log-player-rust <json_log_file>
例:
ym2151-log-player-rust sample_events.json
ym2151-log-player-rust events.json
JSONイベントログファイル形式
{
"event_count": 100,
"events": [
{"time": 0, "addr": "0x08", "data": "0x00"},
{"time": 2, "addr": "0x20", "data": "0xC7"}
]
}
event_count: イベント総数events: イベント配列time: サンプル時刻(絶対時刻)addr: YM2151レジスタアドレス(16進数文字列)data: レジスタに書き込むデータ(16進数文字列)is_data: (オプション、読み込み時は無視されます)
注意: プログラムは入力イベントを自動的に2段階(アドレス書き込み→データ書き込み)に分割し、必要な遅延を挿入します。
ビルド要件
注意: リアルタイムオーディオ再生(デフォルト)には音声出力デバイスが必要です。 Linux環境では、ALSA開発ライブラリのインストールが必要です:
# Ubuntu/Debian
sudo apt-get install libasound2-dev
# Fedora
sudo dnf install alsa-lib-devel
リリースビルド
cargo build --release
./target/release/ym2151-log-player-rust sample_events.json
テストの実行
# 標準テスト(realtime-audio機能込み)
cargo test
ビルド要件
- Rust 1.70以降
- zig cc(Cコンパイラとして使用)
- (オプション)ALSA開発ライブラリ(Linux環境でrealtime-audio機能を使用する場合)
詳細なビルド手順は BUILD.md を参照してください。
その他の詳細は IMPLEMENTATION_PLAN.md を参照してください。
ライセンス
MIT License
利用ライブラリ
- Nuked-OPM: LGPL 2.1
- その他のRustクレート: 各クレートのライセンスに従う