View on GitHub

ym2151-log-player-rust

ym2151-log-player-rust

ym2151-log-player-rust

YM2151(OPM)レジスタイベントログをJSONファイルから読み込んで、リアルタイム再生とWAVファイル出力を行うプログラムのRust実装版。

ym2151-log-player のRust版です。

状況

安定動作しています。

現在の位置付けはライブラリです。cat-play-mmlに組み込んで利用しています

pass2 json出力は、シンプル化のために削除済みです。必要になったらagentに実装させてください。

ステータス

全フェーズ完了 - すべての機能が実装され、動作可能です。

詳細は IMPLEMENTATION_PLAN.md を参照してください。

機能

クイックスタート / 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

動作:

  1. イベントログを読み込み
  2. 即座にリアルタイム音声再生を開始(C言語版と同じ)
  3. 再生と同時にWAVファイルをキャプチャ
  4. 再生完了後、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"}
  ]
}

注意: プログラムは入力イベントを自動的に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

ビルド要件

詳細なビルド手順は BUILD.md を参照してください。

その他の詳細は IMPLEMENTATION_PLAN.md を参照してください。

ライセンス

MIT License

利用ライブラリ