Mixed Mode CDs are not handled correctly
Whipper currently assumes that the data track always has to be the last track. This is not a correct assumption for Mixed Mode CDs [1], which have audio and data tracks in one session. Data tracks can be both before and after the audio tracks.
The first part where this fails is in the musicbrainz id calculation. It will fail with an assertion error
Code in question (image/table.py):
# if the disc is multi-session, last track is the data track, # and we should subtract 11250 + 150 from the last track's offset # for the leadout if self.hasDataTracks(): assert not self.tracks[-1].audio leadout = self.tracks[-1].getIndex(1).absolute - 11250 - 150 `
This assumption is wrong. And I would personally prefer to simply use libdiscid's musicbrainz discid calculation (it also does freedb discid; and also does submission urls).
On my personal fork of whipper/morituri (useful parts are ending up in whipper), I ripped out this code and replaced it with discid. Then it fails later on, when trying to rip the first audio track (in my case: track 3), trying to index some result structure with index 3, where it should be using index 1. (Minus 2 - data tracks)
I have a bin/cue copy of this CD, and will upload it later on.
[1] https://en.wikipedia.org/wiki/Mixed_Mode_CD
You should hook me up with the bin/cue.