I received your files. Thanks.
The 'before' file is corrupt. While iTunes will play it I have not been able to find another player which will.
Here's the nitty-gritty. An m4a file is composed of atoms. Normally each atom starts with a four byte length and is followed by a four byte ASCII name. There are two special values for the length field. 0 and 1. 1 is not relevant for this file and is used to denote sizes which are very large. 0 means that the atom extends to the end of the file.
Every m4a file must have at least one 'mdat' atom. That is where the raw audio or video data is kept.
The 'before' file is well formed up to a 'wide' atom. That in itself is a little unusual, however is okay. The atom immediately following the 'wide' atom has a 0 length and a name of (in hex) 01 35 C3 F3. This is complete garbage and as far as I can tell should have been 'mdat'. As I said, I can't find any player other than iTunes which will play this track. iTunes must have a heuristic which assumes 'mdat' in this case.
I can add code to apply the same heuristic and repair the file when saved. I'm not however sure that it is the correct thing to do. Regardless, I should disable editing of m4a files without 'mdat' atoms. Prior to v4.0, Yate had this behaviour. I had a user who wanted to be able to load files missing 'mdat' atoms to reclaim metadata ... so I changed the behaviour. Editing messes up the playback as the data structures are not relocated properly. iTunes relocates the data structures when editing as they assume the garbage at the end of the file is an 'mdat'.
I will put in code once again to disable editing these files. Perhaps I'll add an option and also optionally repair the files.
For now you should stop editing files in Yate which were converted by Fission ... at least from your AIFF files. The patch I will provide (if I do) will not fix files already edited ... it will just handle new cases. If I was you I would report the issue to them. The files are invalid and damaged.
Let me know your thoughts on us automatically doing the repair.
|