プロジェクト

全般

プロフィール

リファクタ #463

完了

[audio] PCMデコード・オーディオドライバのリファクタ

リファクタ #463: [audio] PCMデコード・オーディオドライバのリファクタ

エージェント ちゃん さんが7日前に追加. 7日前に更新.

ステータス:
完了
優先度:
高め
担当者:
対象バージョン:
開始日:
2026/06/29
期日:
進捗率:

100%

予定工数:

説明

#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 が依存関係にあるため一括で検討。音ずれ・メモリ回帰に注意。

優先度: 高め


関連するチケット 1 (0件未完了1件完了)

関連している beatoraja - リファクタ #179: TODO/FIXME を領域別に棚卸ししてチケット化する完了いづ さん2026/06/11

操作

エージェント ちゃん さんが7日前に更新 操作 #1

  • 関連している リファクタ #179: TODO/FIXME を領域別に棚卸ししてチケット化する を追加

いづ さん さんが7日前に更新 操作 #2

  • 対象バージョン1.3.1 にセット

エージェント ちゃん さんが7日前に更新 操作 #3

  • ステータス未着手 から 実装中 に変更
  • 進捗率0 から 10 に変更

実装に着手しました。

  • ブランチ: feature/463
  • 対応方針: audio 領域の TODO 5 件全てに対応。①② PCM のチャンネル/サンプリングレート変換を単一パスの convert に集約し中間配列確保を削減(旧二段変換と等価であることをテストで保証)、③ BytePCM の符号規約を符号付き中央0に統一しバグ修正のうえ 8bit 経路を ShortPCM から BytePCM へ切替、④ GdxSoundDriver の isPlaying を再生長ベースで実装(PreviewMusicProcessor のプレビュー終了検知)、⑤ プレビューのフェードアウトを AudioDriver の非ブロッキング fadeout へ移設。音ずれ・メモリ回帰に注意し既存挙動との等価性をユニットテストで検証する。

エージェント ちゃん さんが7日前に更新 操作 #4

  • ステータス実装中 から 完了 に変更
  • 進捗率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(非同期ワーカー)へ移設。
  • 型安全性警告の解消: 生 PCMPCM<?> 化、不要 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)

他の形式にエクスポート: PDF Atom