CPU
Lieutenant
- Registriert
- Jan. 2006
- Beiträge
- 704
Hallo,
für ein Projekt muss ich via Java-Applet die CD-Id auslesen und bei musicbrainz.org die Daten zur CD besorgen.
Soweit die Anforderungen. Dann habe ich mal gegoogelt, ob es soetwas bereits gibt, bin jedoch auf kein Ergebnis gestoßen. Also habe ich mir gedacht, dass ich es selbst machen muss und bin auf diese nette kleine Beschreibung gestoßen: http://musicbrainz.org/doc/DiscIDCalculation
Das Grundkonzept ist mir klar, mir sind jedoch noch nicht die Schritte klar, die nötig sind. Und da könnt Ihr mir vielleicht helfen:
Nun zunächst, was ist die "First/Last Track number" und was ist der "Lead-out track offset"?
Verstehe ich das Richtig, dass Einfach nur der First-Track, Last-Track und der FrameOffset (von 0-tracklänge) in einen String gepackt wird und der dann mit sha1 gehashed wird? Und was bedeutet "If there are less than 99 tracks (almost certainly), the value 0 will be used instead. "?
Gruß,
CPU - hoffe Ihr könnt mir helfen ...![Traurig :( :(](/forum/styles/smilies/frown.gif)
für ein Projekt muss ich via Java-Applet die CD-Id auslesen und bei musicbrainz.org die Daten zur CD besorgen.
Soweit die Anforderungen. Dann habe ich mal gegoogelt, ob es soetwas bereits gibt, bin jedoch auf kein Ergebnis gestoßen. Also habe ich mir gedacht, dass ich es selbst machen muss und bin auf diese nette kleine Beschreibung gestoßen: http://musicbrainz.org/doc/DiscIDCalculation
Das Grundkonzept ist mir klar, mir sind jedoch noch nicht die Schritte klar, die nötig sind. Und da könnt Ihr mir vielleicht helfen:
The CD Index algorithm simply takes the following pieces of data and runs them through the SHA-1 hash function:
* First track number (normally one): 1 byte
* Last track number: 1 byte
* Lead-out track offset: 4 bytes
* 99 frame offsets: 4 bytes for each track
* If there are less than 99 tracks (almost certainly), the value 0 will be used instead.
Before the data is fed through the SHA-1 hash, it is converted to upper-case hex ASCII using printf("%02X", value); for single-byte values and printf("%08X", value); for 4-byte values.
Code:
sprintf(temp, "%02X", pCDInfo->First*Track);
sha_update(&sha, (unsigned char*) temp, strlen(temp));
sprintf(temp, "%02X", pCDInfo->Last*Track);
sha_update(&sha, (unsigned char*) temp, strlen(temp));
//Note that the lead-out track is stored in pCDInfo->Frame*Offset[0].
for (i = 0; i < 100; i++) {
sprintf(temp, "%08X", pCDInfo->Frame*Offset[i]);
sha_update(&sha, (unsigned char*) temp, strlen(temp));
}
sha_final(digest, &sha);
Nun zunächst, was ist die "First/Last Track number" und was ist der "Lead-out track offset"?
Verstehe ich das Richtig, dass Einfach nur der First-Track, Last-Track und der FrameOffset (von 0-tracklänge) in einen String gepackt wird und der dann mit sha1 gehashed wird? Und was bedeutet "If there are less than 99 tracks (almost certainly), the value 0 will be used instead. "?
Gruß,
CPU - hoffe Ihr könnt mir helfen ...
![Traurig :( :(](/forum/styles/smilies/frown.gif)