ncmpcpp
cmus und mocp sind ja ganz ok, aber ncmpcpp wollte ich doch mal anschauen…also gesagt, getan.
[Edit]: habe den Post über die Tage einige male revidiert bzw. ergänzt…
mpd
mpd ist schnell eingerichtet. Da nur ich mit meinem Desktop arbeite, habe ich es in der globalen Config gemacht (lässt sich aber natürlich auch per User unter ~/.config/mpd einrichten). In der globalen Config unter /etc/mpd.conf hab ich eigentlich nur zwei Zeilen angepasst – das Directory mit der Musiklibrary und das Directory für Playlists:
music_directory "/export/daten_internal/music" playlist_directory "/export/daten_internal/playlists"
Damit die Visualisierung funktioniert, muss noch folgender Schnipsel ergänzt werden
audio_output { type "fifo" name "my_fifo" path "/tmp/mpd.fifo" format "44100:16:2" }
normalization
Kann zwar noch nicht bestätigen, da noch nicht so beachtet, aber diese Option scheint mir sinnvoll:
volume_normalization "yes"
Wenn das dasselbe wie bei wodim ist, dann will ich es ganz klar.
Dann den Service durchstarten, erledigt.
mpc
mpc ist ja eigentlich der “Standard”-Client für mpd, und ich muss gestehen, der allein ist schon geil. mpd (zumindest bei Debian) hat autocompletion, also geh ich nicht auf die Details ein. Jedenfalls weiss ich jetzt schon, dass mpc bei mir in gewissen Scripten zum Einsatz kommen wird (starte Playlist xy täglich um 8 Uhr etc…).
Falls via Client (egal was für einer) die Lautstärke nicht gesetzt werden kann, muss beim Output lediglich die Zeile mixer_type “software” ergänzt werden. Notiers jetzt hier einfach noch, man weiss ja nie…
mixer_type "software"
ncmpcpp
Mit ncmpcpp (ncurses music player client plus plus) hab ich mich anfänglich etwas schwerer getan (beim Namen hab ich immer noch Mühe…). Wenn man’s dann aber mal geschnallt hat, ist es ein echt geiles Tool.
Beim ersten Start wird man wohl mal die Library updaten wollen – dazu drückt man einfach “u”. Oben rechts wird dies auch durch [U] angezeigt. Je nach Grösse der Library kann das schon etwas dauern.
Es gibt mehrere “Fenster” in ncmpcpp, welche mit den Tasten 1 – 8 ausgewählt werden können. Eines der ersten Dinger, die ich gemacht hab war ein Keybinding für die Taste 9 zu setzen, und zwar für die Hilfe. Das ist für einen Anfänger sehr hilfreich. Dies ist zwar nicht zwingend nötig – F1 ist der default für die Hilfe. Ich habe aber die F1-Taste bei mir komplett deaktiviert, weil sie nervt 😉
Beispiel-Configs findet man übrigens unter /usr/share/doc/ncmpcpp/examples. Am besten kopiert man die zu Beginn mal nach ~/.ncmpcpp.
#default help: f1... def_key "9" show_help
zudem – um sich einfach zuhause zu fühlen – hab ich noch diese zwei Bindings ergänzt
def_key "j" scroll_down def_key "k" scroll_up
Basics
Views
1: Playlist
2: Browse Library
3: Search Engine
4: Media Library
5: Playlist Editor
6: Tag Editor
7: Outputs
8: Music visualizer
mit ‘a’ kann man Lieder oder ganze Alben zur Playlist hinzufügen, Playlists können mit ‘S’ gespeichert werden.
weitere Steuerung (defaults)
q – Quit
f – vorwärts suchen
b – rückwärts suchen
m – Track nach oben in der Playlist schieben
n – Track weiter nach unten in der Playlist schieben
a – Track (oder Album, Artist,…) zur Playlist hinzufügen
del – Track aus Playlist löschen
S – Playlist speichern
e – Auswahl im Tag-Editor bearbeiten
\ – Zwischen klassicher und alternativer Ansicht wechseln
P – Display Mode wechseln (config value: playlist_display_mode)
# – Bitrate des Files anzeigen
i – Song Informationen anzeigen
I – Künstler Informationen anzeigen
L – Shuffle between available lyric databases
l – Song-Text anzeigen / wieder verstecken
> – nächster Track
< – vorheriger Track
p – Play/Pause
+ – Lautstärke 2% erhöhen
– – Lautstärke 2% verringern
= – Uhr anzeigen (tmux-like)
Im Netz findet man aber genügend Cheat-Sheets und Beschreibungen, bringts jetzt nicht, alles zu erklären. (Eigentlich hab ich’s ja nur für mich gepostet, solange ich die Keybindings noch nicht voll ‘intus’ hab…)
Modes
r – repeat mode [r—–]
z – random mode [-z—-]
y – single mode [–s—] (Wiederholt den aktuellen Track, wenn das Ende erreicht wurde)
R – consume mode [—c–] (entfernt den aktuellen Track von der Playlist, wenn das Ende erreicht wurde)
y – single mode [–s—] (wiederholt den aktuellen Track, wenn Ende erreicht wurde)
x – crossfade mode [—-x-]
R
– consume mode
und so sieht dann etwa der Visualizer (8) aus (im Screenshot mit visualizer_in_stereo = no, erst danach umgestellt). Den Stil der Visualisierung kann man übrigens mit der Leertaste “on the fly” ändern:
Tagging
Was mir auch sehr gut gefällt, dass ein ziemlich brauchbarer Tag Editor (6) bei ncmpcpp mitkommt. Nur leider hat der beim Ersten Versuch nicht wirklich was schreiben wollen – es gab nur ‘error whilte writing tags….file not found). Damit das ganze klappt, muss man ncmpcpp in der Config das mpd-Music-Directory mitgeben, danach klappts tadellos:
mpd_music_dir = /export/daten_internal/music
Theming
ncmpcpp lässt sich beliebig anpassen, darauf gehe ich jetzt aber nicht ein – hier findet man genügend Beispiele auf DotShare und Github…
Sonos
Und endlich habe ich eine Möglichkeit, den Sound meines Rechners auf die Sonos zu streamen! (ja, ich weiss es gibt z.B. Sonos-Controller unofficial, der auch ganz gut klappt, aber eben mit GUI)…
Dazu muss man in mpd einen neuen Output für einen HTTP-Stream definieren:
audio_output { type "httpd" name "HTTP Stream" encoder "lame" port "8000" quality "5.0" format "44100:16:1" }
oder via Shoutcast (ich hab das ganze auch via Icecast probiert, konnte aber keinen Unterschied feststellen):
audio_output { type "shout" encoding "mp3" name "Shout Stream (mp3)" host "icecast" port "8000" mount "/mpd.mp3" password "hackme" quality "0" # highest format "44100:16:1" }
Ich habe die erste Variante – via HTTP-Stream – verwendet, denn ich wüsste nicht, wie man bei Sonos ein Passwort mitgeben könnte. (wie erwähnt konnte ich keinen Unterschied mit Icecast feststellen, also dann doch gleich mit der “in-house” Lösung….
Wenn das alles erledigt ist, muss man im Sonos-Programm (wohl oder übel in der Desktopversion der Software, da es nur dort möglich ist) eine neue Radiostation hinzufügen. Na gut, dann hab ich das halt schnell auf der Kiste vom Vater gemacht:
Und nun kann man die eigene Playlist via ncmpcpp auf die Sonos streamen. Damit’s aber nicht auf dem Rechner und dem Sonos abgespielt wird, muss der ALSA-Output deaktiviert und der HTTP-Stream aktiviert werden. Das macht man, indem man den entsprechenden Output markiert und Enter drückt..
Outputs können aber auch in der Config “by default” aktiviert / deaktivert werden beim Start von mpd:
enabled yes|no
Wenn ich einen Track wechsle, hat es eine kurze (mehrere Sekunden…) Verzögerung (Anzeige in ncmpcpp ist schneller als Sonos), aber damit kann ich gut leben. Vielleicht auch einfach ein lokales WLAN-Problem, das nix damit zu tun hat… Das ganze konnte ich jedoch in mpd mit einem buffer von 0% etwas verbessern:
# This setting controls the percentage of the buffer which is filled before # beginning to play. Increasing this reduces the chance of audio file skipping, # at the cost of increased time prior to audio playback. buffer_before_play "0%"
Probleme
Das einzige, das ich nicht via ncmpcpp machen kann ist die Lautstärke anpassen. Hierzu hab ich aber bisher noch keine Lösung, verwende derzeit einfach den Sonos-Controller-unofficial oder die Android-App (unter Android ist übrigens MPDroid zu empfehlen…). Ist jetzt nicht ganz so tragisch, da der Stream ja sowieso irgendwo “gestartet” werden muss. Schön wär’s aber trotzdem direkt via ncmpcpp (Volume n/a kann man durch ein dummy-Gerät (mixer_type “null”) beheben, aber das ist dann wirklich halt nur ein dummy und das bringt ja auch nicht viel…)
Notifications
Anfangs hab ich mir mit notify-send eine Notiication mit einem 5 Sekunden Timeout gesendet, was grad läuft. Das klappt auch ganz gut, jedoch wenn ich ne Weile nicht am Rechner bin und dieser gelockt ist, stauen sich die Meldungen an (nehme an, dass das bewusst so ist, weil ja niemand die Notifications sieht, wenn der Rechner gelockt ist):
execute_on_song_change = /usr/bin/notify-send -t 5000 "Now Playing ♫" "$(mpc current)"
Da ich den Status aber sowieso in der i3bar anzeige, ist es eigentlich auch sinnlos, deswegen hab ich die Notification deaktiviert…
Mein Blocks-Script schaut folgendermassen aus
#!/bin/bash NCMP=$(mpc | grep "^\\[playing\\]" | awk '{print $1}') #falls Internet Radio laeuft - Sender interessiert mich nicht S_NCMP=$(mpc current -f '%artist% - %title%') NUM_NCMP=$($S_NCMP | wc -c) if [ "$NCMP" = "[playing]" ];then if [ "$NUM_NCMP" -lt 30 ];then echo -e " $S_NCMP" else echo -e " $S_NCMP..." fi fi if [[ $BLOCK_BUTTON == '1' ]]; then if [ "$(command -v ncmpcpp)" ]; then xterm -e ncmpcpp fi fi
EDIT 18.5.2018:
USB-Speaker anstatt Sonos/HTTP-Stream
Das mit dem Sonos ist mir mit der Zeit doch immer mehr auf den Wecker gegangen, erstens wegen der Verzögerung (10 Sekunden ganz normal), zweitens wegen des Volumes (Lautstärke kann logischerweise im HTTP-Stream nicht angepasst werden) und drittens war’s scheisse, wenn ich zum Filme schauen andere Lautsprecher nutzen musste als zum Musik hören.
Also hab ich mir einen Subwoofer zugelegt (Logitech G560).
Da ich die Speaker mit USB am Rechner verbunden hab, musste also die MPD-Config entsprechend angepasst werden:
audio_output { type "alsa" name "G560 USB Speaker" device "hw:3,0" format "44100:16:2" mixer_type "software" }
Das richtige Device zeigt aplay -l an. Testen lässt sich das ganze, bevor man es in der Config anpasst, folgendermassen:
aplay -D plughw:,0 /usr/share/sounds/alsa/Front_Center.wav
Et voila, alles funktioniert und endlich reagiert MPD instant ohne lange Verzögerung und ich benötige nur noch einen Lautsprecher für alles.
2 thoughts on “ncmpcpp”
ncmpcpp http://blog.datentraeger.li/?p=1304
Comments are closed.