PR2 的 cpal 音频主时钟(#63)当前是单声道预混:playback_start 经 spawn_blocking 把整条时间线音频 extract_pcm(mono)→ mix_clips 预混成一个 buffer 再喂 cpal。已能用且 A/V 同步正确,但两点可优化:
- 单声道 → 立体声/声相(pan):新增立体声流式解码(
ffmpeg -ac 2 -ar <dev> -f f32le -,不复用 pcm.rs::raw_to_mono_f32——它会平均成单声道),cpal 回调按声道写。
- 一次性全量解码 → 后台分块填充:长工程启动有几秒解码延迟(已移出 IPC 线程,但仍全量)。改为 append-only buffer +
AtomicUsize filled(回调只读 < filled 部分),边播边解,启动即响应。
涉及:crates/opentake-media/src/decode/audio_stream.rs(新)+ src-tauri/src/playback/audio.rs。体验优化,不阻塞主线。
PR2 的 cpal 音频主时钟(#63)当前是单声道预混:
playback_start经spawn_blocking把整条时间线音频extract_pcm(mono)→mix_clips预混成一个 buffer 再喂 cpal。已能用且 A/V 同步正确,但两点可优化:ffmpeg -ac 2 -ar <dev> -f f32le -,不复用pcm.rs::raw_to_mono_f32——它会平均成单声道),cpal 回调按声道写。AtomicUsize filled(回调只读< filled部分),边播边解,启动即响应。涉及:
crates/opentake-media/src/decode/audio_stream.rs(新)+src-tauri/src/playback/audio.rs。体验优化,不阻塞主线。