WinForms-UserControl-Bibliothek zum Brennen von Audio-CDs oder MP3-CDs/DVDs aus *.mp3-Dateien

    • VB.NET

    Es gibt 6 Antworten in diesem Thema. Der letzte Beitrag () ist von kafffee.

      WinForms-UserControl-Bibliothek zum Brennen von Audio-CDs oder MP3-CDs/DVDs aus *.mp3-Dateien

      Hallo liebe Community,

      ich hab mit Hilfe von @-Franky- eine Bibliothek zum Brennen von Audio-CDs oder MP3-CDs/DVDs aus *.mp3-Dateien erstellt.

      Andere Quellformate wie *.wav, *.wma oder ähnliches sind evtl. auch möglich, ich habe das aber nicht getestet, da ich nur MP3s auf meinem Rechner habe.

      Zur Verwendung:
      -Public Function CDBurners gibt eine Auflistung der Laufwerksbuchstaben zurück, die zum Brennen geeiginet sind (also z.B: D:)

      -Public Function GetFreeSectors gibt die auf dem eingelegten Medium freien Sektoren zurück. Als Argument muss man den Laufwerksindex übergeben, ich gehe mal stark davon aus, dass z.B. D: >> Index 0 und E: >> Index 1 sein würde, also dass das Ganze alphabetisch ist... Man sollte vor dem Aufruf von BurnCD darauf achten, dass genügend freie Sektoren zum Brennen aller Daten vorhanden sind. Leider hab ich bis jetzt nur widersprüchliche Informationen hierzu gefunden. Audio-CDs beinhalten auch noch ein TOC (Table Of Content), also ein "Inhaltsverzeichnis", damit das Laufwerk weiss, wo auf der CD welcher Track zu finden ist... Ob man beim Brennen von Daten-CDs/DVDs die Dateigrösse der Daten von der Platte 1:1 auf die Dateigrössse auf CD/DVD übertragen kann, weiss ich bis jetzt auch noch nicht... Wenn man jetzt "bloss" die Megabytes ermitteln, will und kein Problem mit Nachkommastellen hat, kann man die Anzahl der Sektoren jedoch einfach durch 512 teilen... Wenn jemand mehr Informationen als ich hat/findet, bitte melden!!

      -Public Function BurnCD startet dann das eigentliche Brennen. Als Argumente übergibt man:
      -Playlist: DIe einzelnen zu brennenden Tracks als Dateinamen
      -CDDrive: Den Laufwerksbuchstaben des Brenners, also z.B. D:
      -BurnAsMP3CD: True, wenn man eine MP3- bzw. Daten-CD/DVD brennen möchte
      -CDName: So wird die CD dann benannt

      -WrapUp schliesst das Brennen dann ab. Es sollte aufgerufen werden, wenn Brennerstatus = CDBurner.Brennstatus.Done - also nicht, wenn Fortschritt = 100 ist, denn dieser wird nie erreicht sondern bleibt bei 99 oder so stehen, selbst wenn das Brennen fertig ist...

      -Es gibt ausserdem 3 Events:
      -NewBurnStatus Wenn sich der Brennstatus ändert
      -NewNotification Wenn es eine Programmmeldung gibt, dieses kann z.B. dazu verwendet werden, um die Property Statusmeldung in einer MessageBox auszugeben
      -NewProgress Wenn sich der Brennfortschritt ändert, kann man dazu benutzen, um die Property Fortschritt z.B. in einer TrackBar anzuzeigen

      Also, an alle dies interessiert: Viel Spass damit :thumbsup:
      Dateien
      • CDBurner.zip

        (296,49 kB, 111 mal heruntergeladen, zuletzt: )

      kafffee schrieb:

      -Public Function GetFreeSectors gibt die auf dem eingelegten Medium freien Sektoren zurück.

      In meinem Programm frage ich die Grenzen beim Erstellen der Playlist ab.
      Bei Audio CDs geht es nicht um Sektoren. Es passen maximal 99 Tracks auf die CD und nach Red Book Standard eine Gesamtlaufzeit von 74 Minuten.
      Bei den meisten Rohlingen ist bei 80 Minuten das physikalische Ende erreicht.

      Vielen Dank für die ganze Arbeit.

      Elephant schrieb:

      In meinem Programm frage ich die Grenzen beim Erstellen der Playlist ab.

      Ja das hatte ich auch so vor in meinem grossen Projekt. Darf ich fragen wie du das machst? Gibt das Windows Media Payer Control so eine Funktion her, dass man die Länge einer Playlist ermitteln kann? Weil dann könnte man das ja ganz einfach noch in die DLL implementieren... Hab dazu (nach kurzer Suche allerdings) nichts gefunden...
      Ansonsten werd ich die Länge meiner Playlist auch vom aufrufenden Programm aus ermitteln. Ich hab da eine Klasse für Titelinformationen erstellt, die u.a. die Tracklänge beinhaltet, und Instanzen dieser Klasse habe ich dann in einer ObservableCollection(Of Class) hinterlegt...

      Elephant schrieb:

      Bei Audio CDs geht es nicht um Sektoren.

      Jein. Die Sektoren lassen sich ja in Minuten umrechnen. Bloss Problem dabei war, dass ich dazu widersprüchliche Informationen im Internet gefunden hab, also wie viele Bytes ein Sektor hat... Du weisst, dass du mit der DLL auch MP3-DVDs und MP3-CDs erstellen kannst? Weil dann müsstest du statt der Minuten und Sekunden die Dateigrössen ermitteln...

      Elephant schrieb:



      Es passen maximal 99 Tracks auf die CD und nach Red Book Standard eine Gesamtlaufzeit von 74 Minuten.
      Bei den meisten Rohlingen ist bei 80 Minuten das physikalische Ende erreicht.

      OK, also dass mit den 99 Tracks war mir neu aber ich muss zugeben ich hab auch nicht sonderlich lang recherchiert. Gut zu wissen :)
      Auch das könnte man noch direkt implementieren... Jou 74 Minuten sind die Standard-CDs und 80, die die paar Jahre später oder so auf den Markt kamen... Aber wie gesagt DVDs kann man damit auch brennen...

      kafffee schrieb:

      Darf ich fragen wie du das machst? Gibt das Windows Media Payer Control so eine Funktion her,

      Ob der Media Player so eine Funktion hat, weiß ich nicht.
      Ich habe alle meine CDs (ja sowas habe ich, bin ja ein alter Sack) auf den Rechner geschaufelt. Damit man Musik nicht nur nebenbei hören kann, sondern auch mal mit voller Konzentration auf die Töne, nicht als MP3. Sondern mit allen Daten, Festplattenplatz kostet ja kaum noch was.
      Zu jeder CD, die Dateien den Namen des/der Interpreten, den Songnamen und die Länge des Songs.
      Das Cover der jeweiligen CD gescannt, dann zu jedem Song ein Bild des/der Interpreten aus dem Netz (damit bin ich aber noch nicht fertig).
      Für das ganze dann ein Programm, was die Songs wiedergibt, klein das Bild des Covers anzeigt und groß das Bild des/der Interpreten.
      Eine Suchfunktion, zufällig Wiedergabe, Playlist erstellen, bei Wunsch Speichen und laden hat das ganze auch.
      Damit man von einer eigenen Playlist auch eine CD brennen kann, damals die Frage.

      Elephant schrieb:

      Ich habe alle meine CDs (ja sowas habe ich, bin ja ein alter Sack) auf den Rechner geschaufelt.

      Wieso alter Sack? Hab meine ganzen CDs auch in einer oder mehreren langen Nächten mal eingelesen, und das waren nicht grad wenige...

      Elephant schrieb:

      Damit man Musik nicht nur nebenbei hören kann, sondern auch mal mit voller Konzentration auf die Töne, nicht als MP3.

      Also wenn die MP3s mit mindestens 128k codiert sind hör ich persönlich da keinen Unterschied. Aber es gibt ja auch Leute die schwören auf die guten alten Vinyl Platten zwecks besserer Sound und volles Klangspektrum und so... Muss jeder selber wissen

      Elephant schrieb:

      Das Cover der jeweiligen CD gescannt, dann zu jedem Song ein Bild des/der Interpreten aus dem Netz

      Auch das lässt sich programmatisch lösen ;)

      Naja ich wünsch dir jedenfalls viel Spass mit der DLL...

      kafffee schrieb:

      Wieso alter Sack?

      Vermute das 20-jährige kaum CDs haben.

      kafffee schrieb:

      Auch das lässt sich programmatisch lösen

      Da habe ich keine Idee, die mir gefällt.
      Entweder sehe ich das erst beste Bild und beim nächster Song vom gleichen Interpreter wieder dasselbe Bild.
      Oder per Zufallszahl eins der gefunden, egal ob Müll oder gut (trifft beim erst besten auch zu).
      Oder eine Auswahl wo ich eins wähle, will aber Musik höheren und nicht Bilder auswählen.
      Da gefällt mir meine Variante, jeder Song hat sein eigens von mir für gut befundene Bild besser.
      Ist zwar mehr Arbeit, muss ja aber nicht morgen für alle Songs fertig sein.
      Aber das kann natürlich jeder machen, wie er will.

      Dieser Beitrag wurde bereits 1 mal editiert, zuletzt von „Elephant“ ()