`AudioPool::load_from_serialized` sizes the slot Vec by pool_index and fills gaps
with empty `AudioFile::new(PathBuf::new(), …)` placeholders. Two bugs let a
placeholder reach the next save and abort it with "Is a directory":
- Off-by-one: `entries.max().unwrap_or(0) + 1` made an *empty* pool length 1, so a
project with no audio still got one placeholder. Size by `max(pool_index + 1)`
→ empty entries yield length 0.
- `serialize()` emitted placeholder slots: an empty path round-trips to
`relative_path = Some("")`, which `save_beam` resolves to the project directory
(`join("")`) and tries to read as media. Skip empty-path / no-packed-media slots.
- Defense in `save_beam`: gate referenced-media packing on `full.is_file()` (not
`exists()`), so any blank/dir path falls through to embedded data instead of
reading a directory.
Pre-existing; surfaced by a save → reload → save cycle on a raster-only project.
|
||
|---|---|---|
| .. | ||
| node_graph | ||
| automation.rs | ||
| bpm_detector.rs | ||
| buffer_pool.rs | ||
| clip.rs | ||
| disk_reader.rs | ||
| engine.rs | ||
| export.rs | ||
| metronome.rs | ||
| midi.rs | ||
| midi_pool.rs | ||
| mod.rs | ||
| pool.rs | ||
| project.rs | ||
| recording.rs | ||
| sample_loader.rs | ||
| track.rs | ||
| waveform_cache.rs | ||
| waveform_pyramid.rs | ||