Delphi-PRAXiS

Delphi-PRAXiS (https://www.delphipraxis.net/forum.php)
-   Multimedia (https://www.delphipraxis.net/16-multimedia/)
-   -   AudioCD - Rippen des letzten Tracks (https://www.delphipraxis.net/168738-audiocd-rippen-des-letzten-tracks.html)

Garfield 7. Jun 2012 19:53

AudioCD - Rippen des letzten Tracks
 
Ich rippe mit IOCTL_CDROM_RAW_READ AudioCDs. Dabei verwende ich die Startadressen der Tracks als Anfang und die Startadresse des nächsten Tracks bzw des Leadout als Ende. Jedoch enden die auslesbaren Sektoren nicht erst beim Leadout, sondern schon etwas früher.

Ist es falsch, wie ich die Endemarken bestimme? Gibt es eine Regel, wie weit man vor dem Leadout aufhören sollte?

EWeiss 7. Jun 2012 20:49

AW: AudioCD - Rippen des letzten Tracks
 
CDCopy
Schau mal hier vielleicht fällt dir etwas auf was du nicht bedacht oder implementiert hast.

PS:
Oder ist das zufällig deine Seite? ;)
Da ist nämlich auch so nen Garfield Logo

gruss

Garfield 7. Jun 2012 21:27

AW: AudioCD - Rippen des letzten Tracks
 
Hast mich ertappt, Emil.

Dort lese ich immer 20 Sektoren, bis DeviceIoControl False zurückgibt. Dabei war mir noch nicht aufgefallen, dass nicht bis zum Leadout gelesen wird. Erst jetzt wo ich mit Lame_enc.DLL on the Fly encoden will. Damit ich nicht mit Pointern und Daten jonglieren will, werden 92 Sektoren eingelesen. Und da stellt sich dann die Frage, ob nicht irgendwann am Ende etwas fehlen könnte.

EWeiss 8. Jun 2012 03:38

AW: AudioCD - Rippen des letzten Tracks
 
Zitat:

Hast mich ertappt, Emil.
:-D

Leider kann ich dir dazu nicht sehr viel sahen da ich dafür in meinem Mediaplayer die AKRip32 Bibliothek verwende.
Da kenn ich solche probleme nicht.

gruss

Garfield 8. Jun 2012 05:39

AW: AudioCD - Rippen des letzten Tracks
 
Mit AKRip habe ich auch schon gearbeitet. Ich wollte es nun selbst versuchen und da ist es mir aufgefallen. Ob es nun ein Problem ist, weiß ich nicht.

Die Session beginnt und endet mit einer Pause, welche jeweils 2 Sekunden lang ist. Die anschließende Pause wird bei den Tracks mitgerippt und auch bei der Längenangabe einbezogen. Theoretisch könnte man sie weglassen.

EWeiss 8. Jun 2012 08:53

AW: AudioCD - Rippen des letzten Tracks
 
Zitat:

Zitat von Garfield (Beitrag 1169917)
Mit AKRip habe ich auch schon gearbeitet. Ich wollte es nun selbst versuchen und da ist es mir aufgefallen. Ob es nun ein Problem ist, weiß ich nicht.

Die Session beginnt und endet mit einer Pause, welche jeweils 2 Sekunden lang ist. Die anschließende Pause wird bei den Tracks mitgerippt und auch bei der Längenangabe einbezogen. Theoretisch könnte man sie weglassen.

Wie gesagt das kann man nur testen debugger knutschen und loslegen ;)
Feine Webseite hast du da.. :thumb:

gruss

himitsu 8. Jun 2012 09:17

AW: AudioCD - Rippen des letzten Tracks
 
Zitat:

Zitat von Garfield (Beitrag 1169917)
welche jeweils 2 Sekunden lang ist. Die anschließende Pause wird bei den Tracks mitgerippt und auch bei der Längenangabe einbezogen. Theoretisch könnte man sie weglassen.

Wobei die 2 Sekunden nur ein Standard in vielen Programmen ist.
Es müssen keine 2 Sekunden sein.

z.B. bei einer Liveaufnahme eines Konzertes macht sich sowas blöd, aber man kann die Tracks ja dennoch an den Liedgrenzen trennen ... nur hörbar (eine Pause) sollte es nicht sein. :angle2:

Du kannst aber nachsehn, ob und wieviel am Ende eines Tracks "still" ist und entfernst dann diese Stille.

p80286 8. Jun 2012 10:31

AW: AudioCD - Rippen des letzten Tracks
 
Ich meine mich zu erinnern, das die Struktur 2Sek Track 2Sek Track... ist.
Wobei ich so viele Erklärungen gehört und gelesen habe, daß ich eher zu der Auffassung neige, daß die 2 Sekunden Zufall sind aber (wieviele waren's nochmal) Sektoren als Trenner benötigt werden.

Gruß
K-H

Garfield 8. Jun 2012 10:55

AW: AudioCD - Rippen des letzten Tracks
 
Zitat:

Zitat von EWeiss (Beitrag 1169939)
Feine Webseite hast du da.. :thumb:

Danke.

Zitat:

Zitat von himitsu (Beitrag 1169943)
z.B. bei einer Liveaufnahme eines Konzertes macht sich sowas blöd, aber man kann die Tracks ja dennoch an den Liedgrenzen trennen ... nur hörbar (eine Pause) sollte es nicht sein. :angle2:

Das ist klar. Deshalb gibt es ja nur Startadressen und Du hast andere oder gar keine Trenner zwischen den Tracks.

Zitat:

Zitat von himitsu (Beitrag 1169943)
Du kannst aber nachsehn, ob und wieviel am Ende eines Tracks "still" ist und entfernst dann diese Stille.

Das will ich später noch in mein Programm einbauen. In den Demos nicht unbedingt.

Zitat:

Zitat von p80286 (Beitrag 1169973)
Ich meine mich zu erinnern, das die Struktur 2Sek Track 2Sek Track... ist.

Und am Ende noch einmal eine Pause.

Zitat:

Zitat von p80286 (Beitrag 1169973)
... daß ich eher zu der Auffassung neige, daß die 2 Sekunden Zufall sind aber (wieviele waren's nochmal) Sektoren als Trenner benötigt werden.

Weiß nicht ob es Zufall ist. Ich habe dazu noch keine Norm gefunden. Nur Erläuterungen. Eine Sekunde hat 75 Frames (= Sektoren).

Garfield 8. Jun 2012 19:55

AW: AudioCD - Rippen des letzten Tracks
 
http://digitalx.org/cue-sheet/

Nach den Ausführungen zu Syntax und Problemen scheint nur die erste Pause, also der stille Teil vor dem ersten Track, mit zwei Sekunden definiert zu sein. Für Pregrap und Postgrap werden als Beispielwerte ebenfalls zwei Sekunden angegeben.

http://de.wikipedia.org/wiki/Compact_Disc_Digital_Audio

Neben den Audiodaten gibt es Subchanneldaten. In Subchannel P ist ein einfaches Musik-Pause-Flag enthalten.

EWeiss 8. Jun 2012 21:42

AW: AudioCD - Rippen des letzten Tracks
 
Mal geprüft ob die DRM geschützt sind ?
Das es vielleicht deshalb nicht geht?

gruss

Garfield 9. Jun 2012 13:10

AW: AudioCD - Rippen des letzten Tracks
 
Ich habe bis jetzt nur zwei getestet:

http://musicbrainz.org/release/e3f9e...7-a88186419f22 (2008)
http://musicbrainz.org/release/73148...a-0190abdfd895 (1994)

Vermutlich sind sie nicht geschützt. EAC kann auch nicht mehr Sektoren auslesen. Ich will jetzt mal sehen, was GetLastError aussagt und ggfs meine Auswertung ändern.

Delphi-Quellcode:
        {
        *  Daten lesen.
        }
        Result := ReadCDDA(aTrack.dwOffset + dwReturned, dwSectors, aDevice, pBufferPCM);
        if not(Result)
        then begin
          beCloseStream(hbeStream);
          raise Exception.Create('Beim Lesen der Quelldatei ist ein Fehler aufgetreten.');
        end;
Da nützt es nicht viel, wenn man darauf achtet, dass man nicht über die nächste Startadresse hinaus liest.

Nachtrag:

Der Fehler ist:

Zitat:

ERROR_INVALID_PARAMETER

87 (0x57)

The parameter is incorrect.

Garfield 9. Jun 2012 14:36

AW: AudioCD - Rippen des letzten Tracks
 
Jetzt habe ich die Sektoren einzeln lesen lassen.

Album 1:
- Start Leadout LBA: 194892
- Gelesen bis LBA: 194742

Album 2:
- Start Leadout LBA: 178820
- Gelesen bis LBA: 17670

Sind komischerweise andere Werte als beim Lesen mehrerer Sektoren. Dafür aber identisch.

Ergebnis ist, dass die 150 Sektoren = 2 Sekunden vor dem Leodout nicht lesbar sind.

igel457 10. Jun 2012 14:09

AW: AudioCD - Rippen des letzten Tracks
 
Ich weiß zwar nicht ob das dein Problem löst, in dem Code zum Audio-CD lesen den ich vor einiger Zeit mal hier gepostet hatte, verfahre ich (wenn ich das richtig sehe) etwas anders (insbesondere bei der Berechnung der Sektoradressen):

http://www.delphipraxis.net/145494-audio-cd-rippen.html

Ich habe den Code gerade nochmal getestet und der letzte Track wird korrekt ausgelesen. Nur bei der Längenanzeige wurde im von mir getesteten Fall noch die Länge des auf der CD befindenlich Daten-Tracks dazu addiert -- es wurde jedoch nicht versucht diesen wiederzugeben.

Allerdings werte ich auch nicht so Scherze wie die Pausen zwischen den Tracks aus.

Garfield 10. Jun 2012 18:22

AW: AudioCD - Rippen des letzten Tracks
 
Danke Igel457. Ich habe mal verglichen, was anders ist und konnte das Problem lösen. Die Längen der Titel waren bei Dir und mir unterschiedlich. Das heißt, in meiner Hilfsroutine fehlte eine Klammer und die Frames der Startadresse wurden nicht substrahiert sondern addiert. :oops: :wall:


Alle Zeitangaben in WEZ +1. Es ist jetzt 08:52 Uhr.

Powered by vBulletin® Copyright ©2000 - 2024, Jelsoft Enterprises Ltd.
LinkBacks Enabled by vBSEO © 2011, Crawlability, Inc.
Delphi-PRAXiS (c) 2002 - 2023 by Daniel R. Wolf, 2024 by Thomas Breitkreuz