操作
リファクタ #463
完了[audio] PCMデコード・オーディオドライバのリファクタ
リファクタ #463:
[audio] PCMデコード・オーディオドライバのリファクタ
説明
親 #179 「TODO/FIXME 棚卸し」からの派生(audio 領域)。オーディオはリスクが高く優先。
対象 TODO¶
-
src/.../audio/PCM.java:171— prefferedSampleRate, prefferedChannels を使った逐次変換でメモリ確保コストを削減。 -
src/.../audio/PCM.java:82— PCMLoader 側での逐次変換が実装されたら削除(171 と連動)。 -
src/.../audio/PCM.java:77— BytePCM のバグが解消されたら ShortPCM から切替(BytePCMTest 参照)。 -
src/.../audio/GdxSoundDriver.java:147— isPlaying 相当が未実装(Sound に再生中判定メソッドがない)。 -
src/.../select/PreviewMusicProcessor.java:139— プレビューのフェードアウトを AudioDriver 側で実装したい。
対応観点¶
PCM の逐次変換は 171→82→77 が依存関係にあるため一括で検討。音ずれ・メモリ回帰に注意。
優先度: 高め
エージェント ちゃん さんが7日前に更新
- 関連している リファクタ #179: TODO/FIXME を領域別に棚卸ししてチケット化する を追加
エージェント ちゃん さんが7日前に更新
- ステータス を 未着手 から 実装中 に変更
- 進捗率 を 0 から 10 に変更
実装に着手しました。
- ブランチ:
feature/463 - 対応方針: audio 領域の TODO 5 件全てに対応。①② PCM のチャンネル/サンプリングレート変換を単一パスの
convertに集約し中間配列確保を削減(旧二段変換と等価であることをテストで保証)、③ BytePCM の符号規約を符号付き中央0に統一しバグ修正のうえ 8bit 経路を ShortPCM から BytePCM へ切替、④ GdxSoundDriver のisPlayingを再生長ベースで実装(PreviewMusicProcessor のプレビュー終了検知)、⑤ プレビューのフェードアウトを AudioDriver の非ブロッキングfadeoutへ移設。音ずれ・メモリ回帰に注意し既存挙動との等価性をユニットテストで検証する。
エージェント ちゃん さんが7日前に更新
- ステータス を 実装中 から 完了 に変更
- 進捗率 を 10 から 100 に変更
対応が完了しました。
概要¶
audio 領域の TODO 5 件を解消するリファクタ。PCM 変換のメモリ削減、BytePCM の符号バグ修正、プレビュー再生終了検知・フェードアウト改善を、音ずれ・メモリ回帰を避け既存挙動との等価性をテストで保証しつつ実施。併せて audio パッケージの型安全性警告と IDE のビルドパスエラーも解消した。
変更点¶
-
① PCM 変換の単一パス化:
changeChannels().changeSampleRate()の2段変換を単一パスPCM.convert(channels, sampleRate)に集約し中間配列確保を削減(旧2段変換とビット単位で等価)。 -
③ BytePCM 符号統一: 8bit を符号付き中央0に統一しバグ修正、PortAudio ミキサの
-128バイアス除去、PCM.loadの 8bit 経路を ShortPCM フォールバックから BytePCM へ切替。 - ④ GdxSoundDriver.isPlaying: 再生長ベースで実装し非ループプレビューの自然終了を検知(PortAudio の正確判定は維持)。
-
⑤ フェードアウト移設: プレビューのブロッキング sleep ループを AudioDriver の非ブロッキング
fadeout(非同期ワーカー)へ移設。 -
型安全性警告の解消: 生
PCMをPCM<?>化、不要 import 削除、回避不能な総称型配列キャストは範囲限定の@SuppressWarningsに集約(動作不変)。build.gradle の IDE Groovy パーサ誤検知も解消。 -
IDE ビルドパス修正:
Beatoraja.code-workspaceに../jbms-parser/../jbmstable-parserを追加し、コンポジットビルドの included build を vscode-java がインポートできるようにしてmissing required Java projectエラーを解消。 - 変更ファイル:
PCM.java,ShortPCM.java,ShortDirectPCM.java,FloatPCM.java,BytePCM.java,AbstractAudioDriver.java,AudioDriver.java,AudioElement.java,GdxSoundDriver.java,GdxAudioDeviceDriver.java,PortAudioDriver.java,PreviewMusicProcessor.java, 各テスト,build.gradle,Beatoraja.code-workspaceほか
テスト¶
-
.\gradlew.bat test: 成功(全スイート green)。convert 等価性・BytePCM 符号/補間・duration ベース isPlaying・fadeout ランプ/キャンセルのユニットテストを追加。
関連 MR¶
- !137 (feature/463 → develop)
- !138 (feature/463-vscode-workspace → develop)
操作