Wiedergabe und Navigation einer Audio-CD über die Konsole mit dem VLC Media Player

  • Hallo zusammen,

    seit einigen Tagen versuche ich nun Audio CDs über die Konsole abzuspielen. Eigentlich kein Hexenwerk, von wegen! Cdcd, Cmus und den Mplayer habe ich bereits durch. Lediglich der Mplayer funktioniert teilweise.

    Was habe ich vor? An meinem Pi hängt ein Hub mit eigener Stromversorgung an welchem ein CD/DVD Laufwerk über einen IDE auf USB Controller angeschlossen ist. Zukünftig möchte ich von meinem Smartphone aus, mit der App Tasker und einem SSH Plugin kleine Skripte über SSH auf dem Pi ausführen. Die Skripte dienen zur Navigation für den CD/DVD Player.

    Der Player soll folgende Funktionen bereitstellen: Autoplay, Play/Pause, Next/Prev, Mute und Eject. Mit cdcd zum Beispiel ist das alles kein Problem, leider spricht die Anwendung nicht direkt das Laufwerk an, dadurch fehlt die Soundausgabe :neutral:

    Nun hat man mir nahe gelegt mein Vorhaben mit MPD umzusetzen, ich finde aber leider keinen Ansatzpunkt für mein Vorhaben. Es scheitert schon daran wie man von der Konsole aus mit MPD eine CD abspielt. Abspielen würde ich eine CD gerne ohne sie davor zu rippen. Ich freue mich über Tipps um das ganze zu realisieren.

    Grüsse

    Einmal editiert, zuletzt von PiBorg (9. April 2015 um 23:43)

  • Wiedergabe und Navigation einer Audio-CD über die Konsole mit dem VLC Media Player? Schau mal ob du hier fündig wirst!

  • Unter Umständen war mein Tipp doch nicht ganz so gut :angel:

    Mit mpd lässt sich zwar sehr einfach eine komplette CD oder ein einzelner Track zur Wiedergabewarteschlange hinzufügen

    Code
    $ mpc add cdda://
    
    
    $ mpc add cdda://1
    $ mpc add cdda://2
    $ mpc add cdda://3
    


    Allerdings kann man, offensichtlich, wenn man die CD als ganzes zur Playlist hinzufügt (erster Befehl) wieder nicht von Stück zu Stück springen. (Ist mir noch nicht aufgefallen, weil ich das beim Abspielen von CDs gar nicht tun will...)
    Das Abspielen startet man jedenfalls mit

    Code
    $ mpc play


    (siehe Manpage, die ist nicht so ein Monster wie die vom mplayer)


    Entschuldigung, dass ich damit schon wieder umschwenke, aber meine neue Empfehlung lautet vlc. Mit einem einfachen

    Code
    $ vlc cdda://sr0


    oder

    Code
    $ cvlc cdda://sr0


    erhält man eine Playlist mit allen Stücken der CD und vlc lässt sich auch ohne GUI starten (cvlc startet zB afaik nur das Kommandozeileninterface, lässt also ohne weitere Optionen von außen gar nicht steuern) und bietet viele andere Kontrollinterfaces wie telnet, das Web-Interface und wahrscheinlich noch eine Menge mehr.
    Man findet zwar leicht etwas dazu, aber eine kurze Zusammenfassung, was hier auf meinem Desktop funktioniert:

    Code
    $ cvlc -I oldrc --rc-unix /tmp/vlc.socket cdda://sr0


    und steuern mittels netcat-openbsd, das im Zweifelsfall erst installiert werden muss, zB

    Code
    $ echo -n next | netcat -U /tmp/vlc.socket

    Einmal editiert, zuletzt von smutbert (9. April 2015 um 18:52)

  • Hi smutbert,

    vielen Dank für deine ausführliche Antwort und das Testen :thumbs1:

    Zitat

    Entschuldigung, dass ich damit schon wieder umschwenke, aber meine neue Empfehlung lautet vlc

    Das passt schon, ich sehe die Abenteuer mit Mplay als Lernstunde und wenn ich irgendwann ans Ziel komme ist doch alles gut ;)

    Zitat

    Man findet zwar leicht etwas dazu, aber eine kurze Zusammenfassung, was hier auf meinem Desktop funktioniert:
    Code: Alles markieren
    $ cvlc -I oldrc --rc-unix /tmp/vlc.socket cdda://sr0
    und steuern mittels netcat-openbsd, das im Zweifelsfall erst installiert werden muss, zB
    Code: Alles markieren
    $ echo -n next | netcat -U /tmp/vlc.socket

    Ok, das muss ich erst mal verarbeiten. Verstehe ich das so richtig, das im ersten Befehl einfach der vlc in eine art Wartemodus versetzt wird und mit dem zweiten werden praktisch die Befehle für die Navigation übergeben?

    Das echo -n next, woher hast du das entnommen? Hier zum Beispiel https://www.videolan.org/doc/play-howto…html#idp5613680 unter Build HTML pages that use the plugin (version <= 0.8.5) sind alle Navigationsbefehle die ich benötigen würde, das Thema behandelt aber ein Plugin. :denker:

    Einmal editiert, zuletzt von PiBorg (9. April 2015 um 20:21)

  • Der erste Befehl liefert keinen "Wartemodus" sondern vlc beginnt gleich mit der Wiedergabe. Das "echo -n" ist auf meinem Mist gewachsen und hat funktioniert (es erschien mir unlogisch einen Zeilenumbruch an den Befehl zu hängen).
    Das netcat-bsd habe ich (nicht vlc-spezifisch) im Internet bei meiner Suche wie man etwas an einen unix-Socket schickt, gefunden. Die vlc-Befehle habe ich aus dem Hilfetext von vlc, siehe auch hier:
    http://getluky.net/2006/04/19/vlcs-awesome-rc-interface/

  • Ok, da wäre ich so als Laie nicht wirklich drauf gekommen :danke_ATDE:

    Was hast du bei dir für eine VLC Version laufen, hab mir VLC eben mal installiert und bekomme bei mir mit

    keine Playlist angezeigt, meine Ausgabe sieht so aus

    Code
    $ cvlc cdda://sr0
    VLC media player 2.0.3 Twoflower (revision 2.0.2-93-g77aa89e)
    [0x1ac67a8] inhibit interface error: Failed to connect to the D-Bus session daemon: Unable to autolaunch a dbus-daemon without a $DISPLAY for X11
    [0x1ac67a8] main interface error: no suitable interface module
    [0x1ac74b0] main interface error: no suitable interface module
    [0x1aa68f0] main libvlc error: interface "globalhotkeys,none" initialization failed
    [0x1ac74b0] dummy interface: using the dummy interface module...
    [0x1b2e4c0] main playlist: stopping playback
    [0x1b40600] main stream error: cannot pre fill buffer

    Einmal editiert, zuletzt von PiBorg (9. April 2015 um 21:14)

  • Version 2.2.0 Weatherwax (revision 2.2.0-0-g1349ef2)
    (das ist die aus Debian unstable/sid)

    Ich kann nicht erkennen, welche der Meldungen bei dir dafür verantwortlich ist, dass es im Endeffekt nicht funktioniert, deshalb rate ich einfach einmal. Versuch es mit

    Code
    $ vlc -I ncurses cdda://
  • Ok, das liegt dann aber vermutlich und hoffentlich am Zusammenspiel von vlc und Alsa und lässt sich lösen. Vielleicht genügt schon

    Code
    $ vlc -A alsa -I ncurses cdda://


    oder es muss auch noch das richtige Alsa-Gerät angegeben werden, mit

    Code
    $ vlc -A alsa --alsa-audio-device ALSAGERÄT -I ncurses cdda://


    das richtige Alsagerät kann ich dir aber nicht auswendig sagen. dazu müsstest du, (also wenn der erste Befehl noch nicht funktioniert hat) die Ausgabe von

    Code
    $ aplay -l


    posten und verraten an welchem Ausgang du die Musik erwartest (HDMI, analoger Ausgang, I²S, eventuell eine USB-Soundkarte,…).

  • Code
    $ vlc -A alsa --alsa-audio-device hw:0 -I ncurses cdda://

    gibt mir auch den Sound aus :danke_ATDE:

    Jetzt muss ich nur noch versuchen die Remote control commands durchzureichen. Ich versuche es mal wie du es oben beschrieben hast...

  • Ja, einfach oldrc oder wenn die vlc-Version sehr alt ist vielleicht rc statt ncurses und die Option für den Socket nicht vergessen --rc-unix /tmp/vlc.socket. Also eigentlich solltest du zu den obigen Befehlen aus Beitrag #2 eh nur das -A ALSA hinzufügen müssen.

    Einmal editiert, zuletzt von smutbert (9. April 2015 um 22:21)

  • Code
    vlc -A alsa --alsa-audio-device hw:0 -I oldrc --rc-unix /tmp/vlc.socket ncurses cdda://

    zeigt jetzt zwar nicht mehr die Playlist an, spielt aber direkt Track 1 ab. Mit

    Code
    $ echo -n next | netcat -U /tmp/vlc.socket

    aus einer zweiten Konsole gehts sogar zum nächsten Track.

    Werde mir nun mal die anderen Funktionen testen und mir Gedanken darüber machen wie ich das am besten über das Smarthone scriptmässig realisiere.

    Nochmals vielen Dank für deine schnelle Hilfe :thumbs1:

    Was mir direkt auffällt, ich starte ja die CD in der ersten Konsole mit

    Code
    $ vlc -A alsa --alsa-audio-device hw:0 -I oldrc --rc-unix /tmp/vlc.socket ncurses cdda://

    wenn ich nun aus der zweiten Konsole navigiere, was übrigens sehr gut funktioniert und dann das Abspielen mit

    Code
    $ echo -n stop | netcat -U /tmp/vlc.socket

    beende, bleibt ja die Sitzung in der ersten Konsole offen. Wie kann ich das sauber beenden? Und wenn ich das richtige sehe, ist ein automatischen Abspielen der CD nicht möglich, oder?

    Danke und Grüsse

    Einmal editiert, zuletzt von PiBorg (9. April 2015 um 22:49)

  • Genau, automatisch abspielen beim Einlegen. Würde die Regel dann so Aussehen?

    Code
    KERNEL=="input[0-9]*", RUN+="/usr/lib/udev/autoplay"

    und in autoplay wäre dann dieser Aufruf?

    Code
    vlc -A alsa --alsa-audio-device hw:0 -I oldrc --rc-unix /tmp/vlc.socket ncurses cdda://
  • Interessant! Wird da wirklich die CD gerippt, also mit

    Code
    flock -x -w 7200 200

    Ich frage, weil ein Rippen nicht notwendig ist. Würde es reichen die fock-Zeile auszukommentieren?

    Einmal editiert, zuletzt von PiBorg (9. April 2015 um 23:17)

  • So, es hat mich in den Fingern gejuckt :lol: Hab es nach dieser Anleitung umgesetzt.

    Zur Überprüfung dass das Script "audio-cd-rip.sh" beim Einlegen einer CD ausgeführt wird, hab ich einfach ein echo hinzugefügt

    Bash
    #!/bin/bash
    echo Audio CD wird abgespielt...  >> /var/log/autoplay.log
    vlc -A alsa --alsa-audio-device hw:0 -I oldrc --rc-unix /tmp/vlc.socket ncurses cdda://

    Wenn ich nun eine CD einlege, sehe ich zwar über tail -f /var/log/autoplay.log dass das Script ausgeführt wird, abgespielt wird die CD allerdings nicht :denker:

    Wo könnte ich hier ansetzen um die CD zum laufen zu bringen?

    Einmal editiert, zuletzt von PiBorg (10. April 2015 um 08:53)

Jetzt mitmachen!

Du hast noch kein Benutzerkonto auf unserer Seite? Registriere dich kostenlos und nimm an unserer Community teil!