I have a question for developers regarding SPU.
I'm currently working on improving PSX (SPU) ADPCM decoder in vgmstream project (https://github.com/losnoco/vgmstream) and I've noticed a quirk about it: data stream frequently starts with a single null frame and concludes with a single frame filled with 0x7's after end marker (0x01) flag. I've been told so far that the former is used to initialize SPU (warm up frame of sorts) and the latter is used to clean it up after it finished playing the sound but I don't know more details beyond that.
How does the real SPU handle this? Does it actually fully decode and output 28 silent samples at the start and at the end of the sound? Or are those frames skipped over/not outputted? It sort of looks like the latter is more likely because not skipping those frames results in gaps when looping plus number of samples in sound header (when provided) does not include start/end frame.
I'm currently working on improving PSX (SPU) ADPCM decoder in vgmstream project (https://github.com/losnoco/vgmstream) and I've noticed a quirk about it: data stream frequently starts with a single null frame and concludes with a single frame filled with 0x7's after end marker (0x01) flag. I've been told so far that the former is used to initialize SPU (warm up frame of sorts) and the latter is used to clean it up after it finished playing the sound but I don't know more details beyond that.
How does the real SPU handle this? Does it actually fully decode and output 28 silent samples at the start and at the end of the sound? Or are those frames skipped over/not outputted? It sort of looks like the latter is more likely because not skipping those frames results in gaps when looping plus number of samples in sound header (when provided) does not include start/end frame.