Audio-CD auslesen

Wenn du dir nicht sicher bist, in welchem der anderen Foren du die Frage stellen sollst, dann bist du hier im Forum für allgemeine Fragen sicher richtig.
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

Hallo!
Ich suche schon seit längeren ein Modul, mit dem man Audio-CDs auslesen kann, also die Daten von der CD kopieren kann. Das ganze sollte sich sowohl mit Linux, als auch mit Windows vertragen.
Ich habe bereits http://sourceforge.net/projects/cddb-py/ gefunden, was sich jedoch nicht auf meinem Linux [OpenSuse 12.1] installieren lässt :(

Gibts sowas?? - oder muss ich auf ein anderes Programm zurückgreifen, dass ich mit [z.B.] os.system() benutzen muss??

Danke schoneinmal im Vorraus!

akhof
webspider
User
Beiträge: 485
Registriert: Sonntag 19. Juni 2011, 13:41

Eigentlich ist CDDB ja dafür bekannt Leuten, die sich CDs in Eigenarbeit rippen, korrekte Tags zu liefern. Für Rippen selbst braucht man was ganz anderes.

edit:
This is actually a set of three modules to access the CDDB and FreeDB online databases of audio CD track titles and information. It includes a C extension module to fetch track lengths under Linux, FreeBSD, OpenBSD, Mac OS X, Solaris, and Win32, which is easily ported to other operating systems.
problembär

Unter Linux gibt's die Tools "cdda2wav" und "cdparanoia".
Dafür Frontends wie "abcde" und "grip".

Ist aber alles ohne Python.
Benutzeravatar
Hyperion
Moderator
Beiträge: 7478
Registriert: Freitag 4. August 2006, 14:56
Wohnort: Hamburg
Kontaktdaten:

problembär hat geschrieben:Unter Linux gibt's die Tools "cdda2wav" und "cdparanoia".
Die könnte man aber ja z.B. über `subprocess` ansprechen.
encoding_kapiert = all(verstehen(lesen(info)) for info in (Leonidas Folien, Blog, Folien & Text inkl. Python3, utf-8 everywhere))
assert encoding_kapiert
akhof
User
Beiträge: 104
Registriert: Mittwoch 11. Mai 2011, 19:07
Kontaktdaten:

hey, danke! :D
lunar

@akhof: Kann das heute nicht eigentlich jeder Audio-Player, sowohl unter Linux als auch unter Windows? Wieso möchtest Du das noch selbst implementieren?
kodela
User
Beiträge: 185
Registriert: Montag 12. Oktober 2015, 21:24
Wohnort: Landsberg am Lech
Kontaktdaten:

Hallo,

ok, lang lang ist es her, dass sich hier jemand zu diesem Thema geäußert hat.

Ja, jeder Audioplayer kann heute wohl eine Audio-CD wiedergeben.

Nein, eine Audio-CD Rippen kann auch heute noch nicht jeder Audioplayer, zumindest nicht so einfach, dass man es jemanden zumuten kann.

Ich will hier ein Beispiel zeigen, wie man vorgehen muss, um mit dem bekannten VLC media player eine Audio-CD zu rippen:

Code: Alles auswählen

@ECHO OFF

REM im VieoLAN-Forum: https://forum.videolan.org/viewtopic.php?f=2&t=126878&p=426574#p426574

REM Diese Batchdatei ermoeglicht das Rippen aller Tracks einer Audio-CD nach MP3 oder WAV.
REM Sie muss jedoch an die individuellen Gegebenheiten angepast und
REM in der Codierung OEM850 gespeichert werden.
REM Die Pfade fuer die vlc.exe, das optische Laufwerk und den Zielordner muessen angepasst werden.

REM Wichtig für das richtige Auslesen der Tracks.
SETLOCAL ENABLEDELAYEDEXPANSION

REM Laufende Nummer auf Null setzen.
SET /a n=0

SET f=""

REM ### Zielordner anpassen - der Pfadname darf keine Leerstellen enthalten ###
SET p=D:\VLC\Musik\Neu\

REM Alle Tracks der CD bearbeiten.
REM ### Den Pfad fuer das optische Laufwerk anpassen (G:\). ###
FOR /R G:\ %%T IN (*.cda) DO (CALL :sub_transcode "%%T")

REM Nach Beendigung des Jobs zum Ende springen.
GOTO :eof

:sub_transcode
REM Hier beginnt die Bearbeitung eines Tracks.

REM Naechste laufende Nummer festlegen.
CALL SET /a n=n+1

REM Bearbeitung des naechsten Stueckes anzeigen.
ECHO transcodiere %1

REM Vornull fuer einstellige laufende Nummer beruecksichtigen.
IF !n! GTR 9 GOTO :without_zero

REM Wenn laufende Nummer einstellig ist:
CALL SET f=%p%Track0!n!
GOTO :transcode

REM Laufende Nummer ist zweistellig:
:ohne_Null   
CALL SET f=%p%Track!n!

:transcode  
REM ### Pfad fuer auszuefuehrende vlc.exe anpassen. ### 
REM Standard-Interface wird nicht angezeigt.
REM Soll das Standard-Interface angezeigt werden, den Parameter "-I http" entfernen.

REM Transkodierung nach MP3
CALL vlc -I http cdda:///G:/ --cdda-track=!n! :sout=#transcode{vcodec=none,acodec=mp3,ab=128,channels=2,samplerate=44100}:std{access="file",mux=raw,dst=!f!.mp3} vlc://quit

REM Transkodierung nach WAV
REM CALL vlc -I http cdda:///G:/ --cdda-track=!n! :sout=#transcode{vcodec=none,acodec=s16l,ab=224,channels=2,samplerate=48000}:std{access="file",mux=wav,dst=!f!.wav} vlc://quit

:eof
Das ist ziemlich umständlich, weshalb selbst vom VideoLAN-Team empfohlen wird, dafür einen speziellen CD-Ripper wie zum Beispiel CDex zu verwenden.

So einfach ist allerdings die Sache mit dem speziellen CD-Ripper auch nicht, besonders, wenn man sicherheitsbewusst ist, denn mit solchen Programmen bekommt man gerne etwas untergeschoben.

Es könnte also durchaus interessant sein, so etwas über Python zu lösen, wobei es nur um die Ansteuerung geht, im Prinzip das, was diese Batchdatei auch macht. Das Rippen selbst erledigt der VLC ausgezeichnet.

Über Python könnte man das optische Laufwerk, den Zielordner und das Zielformat (WAV oder MP3) abfragen und dann den VLC mit einem Kommandozeilenstring für jedes Audiostück auf der CD aufrufen.

MfG, kodela
BlackJack

Vielleicht kann das nicht jeder, aber eigentlich jeder Standardplayer der vom System ”empfohlen” wird. Selbst der windowseigene Windows Media Player kann das.
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
Selbst der windowseigene Windows Media Player kann das.
... und der kann das IMHO sogar ziemlich gut und schnell. Jedenfalls steckt der Win Mediaplayer Rhythmbox (unter Ubuntu der Standard) in Sachen MP3 rippen in die Tasche. Aber das ist ein anderes Thema ;-)

Gruß, noisefloor
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

kodela hat geschrieben:Nein, eine Audio-CD Rippen kann auch heute noch nicht jeder Audioplayer, zumindest nicht so einfach, dass man es jemanden zumuten kann.
Wer sich selbst zumutet mit CDs zu hantieren statt Spotify zu verwenden wie Leute die in 2015 angekommen sind, wird darüber wohl hinweg kommen.
BlackJack

@DasIch: Äh, wer in 2015 angekommen ist muss DRM-Kram streamen? Da möchte ich dann nicht ankommen! Ich habe meine Musik lieber ohne DRM und wenn streamen dann von meinem Server, lieber aber die Daten direkt mitnehmen um auch dann hören zu können wenn kein oder nur schlechtes Netz da ist. Selbst bei gutem Empfang will ich unterwegs kein Datenvolumen für Musik verbraten.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

BlackJack hat geschrieben:@DasIch: Äh, wer in 2015 angekommen ist muss DRM-Kram streamen?
DRM ist prinzipiell nicht schön aber wenn man etwas streamt oder leiht ist DRM meiner Meinung nach schon akzeptabel. Anders als bei Musik die ich kaufe, habe ich hier ja nicht die Erwartung dass ich unbegrenzt darauf Zugriff habe.

Ich habe meine Musik lieber ohne DRM und wenn streamen dann von meinem Server, lieber aber die Daten direkt mitnehmen um auch dann hören zu können wenn kein oder nur schlechtes Netz da ist. Selbst bei gutem Empfang will ich unterwegs kein Datenvolumen für Musik verbraten.
Sowohl Spotify als auch Apple Music erlauben dir Musik auch Offline zu hören.
BlackJack

@DasIch: Es gibt auch 2015 noch Leute die Musik nicht leihen wollen. Ich höre kostenloses Internetradio für die Sachen die ich nicht dauerhaft haben möchte, und das was ich mir in X Jahren gerne noch einmal anhören möchte, kaufe ich. DRM-frei ist da nach wie vor auch 2015 noch die CD das Medium für. Was heisst noch — das ist im Grunde das Medium das gewähleistet das die Konsumenten eine DRM-freie Alternative haben, denn wenn es nur noch Downloads gäbe, würde man legal wohl nix DRM-freies von den grossen Anbietern bekommen. Und die CD muss man dann halt rippen wenn man nicht tatsächlich mit CDs hantieren will.
DasIch
User
Beiträge: 2718
Registriert: Montag 19. Mai 2008, 04:21
Wohnort: Berlin

BlackJack hat geschrieben:Was heisst noch — das ist im Grunde das Medium das gewähleistet das die Konsumenten eine DRM-freie Alternative haben, denn wenn es nur noch Downloads gäbe, würde man legal wohl nix DRM-freies von den grossen Anbietern bekommen.
Ich weiß nicht wie es bei anderen Anbietern aussieht aber bei iTunes bekommst du Musik schon seit Jahren nur noch ohne DRM. DRM gibt es nur bei Büchern, Videos (wobei ich es auch hier bei ausgeliehenen Videos akzeptabel finde) und Musik die du über Apple Music beziehst.
kodela
User
Beiträge: 185
Registriert: Montag 12. Oktober 2015, 21:24
Wohnort: Landsberg am Lech
Kontaktdaten:

Hallo @BlackJack:

Mit Dir gibt es, wie ich Deinen Beiträgen hier entnehme, doch noch mindestens einen jüngeren hier in diesem Forum, der sich vorstellen kann, dass auch eine Audio-CD Quelle für das Hören von Musik sein kann, zumindest als Quelle für eine eigene digitale Sammlung, die man sich aus seiner (alten) CD-Sammlung zusammenstellen möchte. Es ging hier ja um das Rippen, nicht um das Hören. Das scheint @DasIch übersehen zu haben.

Deshalb die Frage, wie kann man über Python feststellen, ob auf einem System ein optisches Laufwerk zur Verfügung steht und wenn ja, welche Bezeichnung das Laufwerk hat?

MfG, kodela
Benutzeravatar
noisefloor
User
Beiträge: 3856
Registriert: Mittwoch 17. Oktober 2007, 21:40
Wohnort: WW
Kontaktdaten:

Hallo,
ob auf einem System ein optisches Laufwerk zur Verfügung steht und wenn ja, welche Bezeichnung das Laufwerk hat?
Windows, Linux oder MacOS?

Gruß, noisefloor
kodela
User
Beiträge: 185
Registriert: Montag 12. Oktober 2015, 21:24
Wohnort: Landsberg am Lech
Kontaktdaten:

Hallo @noisefloor:

Sorry, darauf hätte ich natürlich eingehen müssen. Für mich selbst wäre es Windows, aber an Linux und MacOS wäre ich auch interessiert.

MfG, kodela
BlackJack

@Kodela: Unter Linux könnte man den `udisks-daemon` via `dbus` befragen:

Code: Alles auswählen

#!/usr/bin/env python
# coding: utf-8
from __future__ import absolute_import, division, print_function
from functools import partial
import dbus

UDISKS_SERVICE = UDISKS_IFACE = 'org.freedesktop.UDisks'
UDISKS_DEVICE_IFACE = UDISKS_IFACE + '.Device'


def main():
    bus = dbus.SystemBus()
    udisks = bus.get_object(UDISKS_SERVICE, '/org/freedesktop/UDisks')
    for path in udisks.EnumerateDevices(dbus_interface=UDISKS_IFACE):
        device = bus.get_object(UDISKS_SERVICE, path)
        properties_iface = dbus.Interface(device, dbus.PROPERTIES_IFACE)
        device_get = partial(properties_iface.Get, UDISKS_DEVICE_IFACE)
        if device_get('DeviceIsDrive'):
            compatible_media = device_get('DriveMediaCompatibility')
            if any(media.startswith('optical') for media in compatible_media):
                print(device_get('DeviceFile'), ':', device_get('DriveModel'))


if __name__ == '__main__':
    main()
kodela
User
Beiträge: 185
Registriert: Montag 12. Oktober 2015, 21:24
Wohnort: Landsberg am Lech
Kontaktdaten:

Danke @BlackJack

und einen guten Rutsch ins Neue Jahr.

kodela
kodela
User
Beiträge: 185
Registriert: Montag 12. Oktober 2015, 21:24
Wohnort: Landsberg am Lech
Kontaktdaten:

Hallo,

ich habe nun etwas gebastelt, womit im System alle Laufwerke abgefragt und darauf überprüft werden, ob es sich um ein optisches Laufwerk mit eingelegter Audio-CD handelt. Hier meine Lösung:

Code: Alles auswählen

# coding=utf-8

import os
from string import ascii_uppercase

gefunden = False
for c in ascii_uppercase:
    path = c + ':'
    try:
        props = os.stat(path)
    except WindowsError:
        continue
    if os.path.isdir(path):
        props = os.stat(path)
        if props[6] == 0:
            # Größe des Objekts in Bytes - bei Audio CDs: 0
            print 'Im Laufwerk ' + path + ' ist eine Audio-CD eingelegt.'
            gefunden = True
if not gefunden:
    print 'Es wurde kein Laufwerk mit eingelegter Audio-CD gefunden.'
Gehe ich richtig in der Annahme, dass diese Lösung auch unter Linux und OS X funktioniert?

MfG, kodela
Antworten