ym2151-log-editor
YM2151イベントログエディタ(TUIインターフェース)。Rust製。
概要
YM2151シンセサイザーのイベントログ用ターミナルベースのJSONエディタです。YM2151イベントデータの可視化と編集を支援し、特にタイミング調整とイベント検査に焦点を当てています。
機能
- JSON可視化: YM2151イベントログを読みやすい形式で表示
- KeyON表示: レジスタ0x08のイベントを「KeyON」として表示し、わかりやすくします
- 時刻表示モード: 累積時間(wait)と絶対タイムスタンプを切り替え
- 累積モード: イベント間のデルタ時間を表示(編集に便利)
- タイムスタンプモード: 開始からの絶対時間を表示(内部ストレージ形式)
- ナビゲーション: 矢印キーでイベントを閲覧
- ファイル操作: JSONファイルの読み込みと保存
クイックスタート
インストール
Rust 1.70以降が必要です。
# リポジトリのクローン
git clone https://github.com/cat2151/ym2151-log-editor.git
cd ym2151-log-editor
# ビルド
cargo build --release
# JSONファイルを指定して実行
cargo run -- path/to/your/file.json
使用方法
# ファイルを指定してエディタを起動
./target/release/ym2151-log-editor your_log.json
キーボード操作
| キー | 動作 |
|---|---|
| ↑/↓ | イベント間を移動 |
| / または ENTER | 現在行の前に新しいイベントを挿入 |
| DELETE | 現在のイベントを削除 |
| 0-9 | 待機時間を設定(0-9ミリ秒、累積モードのみ) |
| P | プレビュー再生(JSON全体を再生) |
| L | ループ再生の切り替え(インタラクティブモード) |
| T | 時刻表示モードの切り替え(累積 ↔ タイムスタンプ) |
| S | ファイル保存 |
| Q または ESC | アプリケーション終了 |
JSON形式
エディタはJSON形式のYM2151イベントログを扱います:
{
"events": [
{
"time": 0.0,
"addr": "20",
"data": "4F"
},
{
"time": 0.01,
"addr": "08",
"data": "78"
}
]
}
time: 絶対タイムスタンプ(秒単位)addr: YM2151レジスタアドレス(16進数)data: レジスタデータ値(16進数)
時刻表示モード
累積モード(デフォルト)
前のイベントからの待ち時間(デルタ)を表示します。タイミングを編集する際に便利で、イベント間の遅延を確認および調整できます。
例:
0.000000 20 4F ← 最初のイベント(時刻0)
0.010000 40 16 ← 前から10ms後
0.010000 KeyON 78 ← 前から10ms後
タイムスタンプモード
開始からの絶対時間を表示します。これはファイル保存時に使用される内部形式です。
例:
0.000000 20 4F ← 開始から0ms
0.010000 40 16 ← 開始から10ms
0.020000 KeyON 78 ← 開始から20ms
Tキーを押してこれらのモードを切り替えます。
KeyON表示
レジスタ0x08(KeyON/KeyOFFレジスタ)のイベントは、読みやすさを向上させるため「08」の代わりに「KeyON」として表示されます:
0.010000 KeyON 78 ← キーオン/オフイベントを簡単に識別
0.500000 KeyON 00
開発
プロジェクト構造
src/
├── main.rs - エントリーポイントとイベントループ
├── app.rs - アプリケーション状態とロジック
├── models.rs - データ構造(Ym2151Event、Ym2151Log)
└── ui.rs - UI描画
ビルド
cargo build # 開発用ビルド
cargo build --release # 最適化ビルド
テスト
test_data/sample.jsonにサンプルテストデータが用意されています:
cargo run -- test_data/sample.json
ドキュメント
詳細な実装計画と今後のロードマップについてはIMPLEMENTATION_PLAN.mdを参照してください。
依存関係
- ratatui 0.29 - ターミナルUIフレームワーク
- crossterm 0.29 - ターミナルバックエンド
- serde 1.0 - シリアライゼーションフレームワーク
- serde_json 1.0 - JSONサポート
関連プロジェクト
- ym2151-tone-editor - YM2151音色エディタ(参考実装)
- ym2151-log-play-server - YM2151ログ再生サーバー
ライセンス
詳細はLICENSEファイルを参照してください。
今後の拡張機能
- 挿入したイベントのレジスタアドレスとデータ値の編集
- アンドゥ/リドゥ機能
- オーディオプレビュー統合
- 一括時間スケーリング
- イベントフィルタリングと検索
完全なロードマップについてはIMPLEMENTATION_PLAN.mdを参照してください。
projectが目指すもの
- waitの最低限のedit
- eventの最低限のedit
- eventの最低限の可視化
projectが目指さないもの(スコープ外)
- 高機能。
- MML入力によるevent挿入。
- 高度な可視化。8chの並列表示。DAWのevent editorにある全ての機能以上のものを実現。
- DAW機能。ピアノロール表示と編集。五線譜表示と編集。dataのオートメーション表示と編集。MIDI INによるevent挿入。
- query。eventをqueryすることで実現できる高度なedit。noteだけ、指定eventだけ、等をfilterしてeditし、かつevent増減でもevent間の依存関係を崩さない高度にインテリジェントな自動event依存関係認識。
- 逆コンパイル。event内容を解析し、SMFやMMLへの高度にインテリジェントな逆変換。timeからBPMとmeasure、beat、tickを算出し、その成功率100%。