I have an idea that might fix the tracks that end prematurely. It would work for fixing a small number of tracks, but would be impractical for lot of tracks unless it were automated with a program (which would be possible).
(
WARNING: I haven't tried this! I don't really expect you to try this, but I post the idea here in case someone else stumbles across this thread and may make use of it.)
There are two versions of the iTunes library file that contains playlist and some song information:
(1) "iTunes Library.itl" or sometimes "iTunes Library" with no extension, is a binary file not easily displayed or altered.
(2) "iTunes Library.xml" is a plain-text XML file that "contains some (but not all) of the same information stored in the iTunes Library file." (See
http://support.apple.com/kb/HT1451) This file is easily displayed and changed with any plain text editor. "If you delete the file, iTunes creates a new copy from the iTunes Library file" (i.e., the binary one).
I noticed in my .xml file the following hierarchy:
Code:
<dict>
...
<key>Tracks</key>
<dict>
<key>768</key> <---------for example
<dict>
...
<key>Name</key><string>Catching The Sun</string>
<key>Total Time</key><integer>283240</integer>
...
I believe the "Total Time" value is supposed to be the length of the track in thousandths of seconds. For example, iTunes.app shows this particular track with a (playing) Time of 4:43, which converted to seconds is 283 seconds. Thus, Total Time of 283240 probably represents 283.240 seconds, which would be 4 minutes and 43.240 seconds.
(I've only checked a couple of tracks, so one would want to check a variety of tracks to be convinced the above is true.)
I predict that tracks that end prematurely will have an incorrect value for "Total Time" in the iTunes Library.xml file. If that's true, one could change the value in the .xml file and then create a new binary library file from the .xml file:
http://support.apple.com/kb/HT1451
The only problem I see is that Apple says that the .xml file "contains some (but not all) of the same information stored in the iTunes Library file." That means that if you create a new .itl binary library file from the .xml file, "some (but not all)" of the information that was in the original binary library file will be lost. Looking at the .xml library file, I don't see anything obvious that's missing (plus some information is stored in the music file itself, too).
If this procedure worked, it could be automated with a script to check the song length in the music files and compare it to the Total Time in the .xml library file, fixing any discrepancies for every track.
I realize not many people are going to go this far; I just got curious about this problem and decided to post what I'd found (and conjectured).