[Python-de] Re: systemunabhängiges Audio CD modul ?

genrich Genrich at gmx.net
Die Nov 9 14:31:51 CET 2004


Diez B. Roggisch schrieb:
  > Das ist kein Fehler, sondern eine Warnung die besagt das in zukuenftigen
> python-versionen (eben >2.4) bitshifts mittels << eine Vergroesserung der 
> Zahl erzeugen, falls sie ueber die Groesse von int hinaus gehen und dabit 
> potientiell Bits verloren gehen.

Danke für die Erklärung... Kann man die Warnung auch unterdrücken?


> Warum ist denn die DiskID falsch? Ist eine Diskid etwas genormtes?
Ja, sie soll mit der www.freedb.org ID identisch sein, damit ich dort eine Abfrage über 
Titel-Information starten kann...

Ich gibt eine "freedb.howto" in der auch ein Beispiel in C vorhanden ist:
========================================================
struct toc {
	int	min;
	int	sec;
	int	frame;
};
struct toc cdtoc[100];
int
read_cdtoc_from_drive(void)
{
	/* Do whatever is appropriate to read the TOC of the CD
	 * into the cdtoc[] structure array.
	 */
	return (tot_trks);
}
int
cddb_sum(int n)
{
	int	ret;
	/* For backward compatibility this algorithm must not change */
	ret = 0;
	while (n > 0) {
		ret = ret + (n % 10);
		n = n / 10;
	}
	return (ret);
}
unsigned long
cddb_discid(int tot_trks)
{
	int	i,
		t = 0,
		n = 0;
	/* For backward compatibility this algorithm must not change */
	i = 0;
	while (i < tot_trks) {
		n = n + cddb_sum((cdtoc[i].min * 60) + cdtoc[i].sec);
		i++;
	}
	t = ((cdtoc[tot_trks].min * 60) + cdtoc[tot_trks].sec) -
	    ((cdtoc[0].min * 60) + cdtoc[0].sec);
	return ((n % 0xff) << 24 | t << 8 | tot_trks);
}
main()
{
	int tot_trks;
	tot_trks = read_cdtoc_from_drive();
	printf("The discid is %08x", cddb_discid(tot_trks));
}
========================================================

Leider wird hier u.a. auch mit der Audio-Frame-Länge gerechnet. Von dem CDROM-Modul in 
pygame bekomme ich allerdings nur die Sekunden-Länge raus... Ich weiß nicht ob das reicht, 
um die DiscID zu berechnen...

Kennt sich damit jemand aus?

-- 
Genrich