Push Song Information
Beschreibung
Diese Shell-Funktionen holen sich von verschiedenen MusicPlayern die gerade gespielte Datei, erzeugen aus den Metadaten der Datei ein Template und laden dieses dann auf einen Webserver hoch.
Das sieht z.B. so aus:
Spoiler: Anklicken zum Anzeigen…
Spoiler: Anklicken zum Anzeigen…
2012-01-08 07:59 +0100 Processing file "/Music_Free/Rock/The Old Stoic - The Old Stoic -- Jamendo - OGG Vorbis q7 - 2010.11.19 [www.jamendo.com]/10 - Sadow And The Moon.ogg"... New logical stream (#1, serial: 0be44329): type vorbis Vorbis headers parsed for stream 1, information follows... Version: 0 Vendor: AO; aoTuV b5 [20061024] (based on Xiph.Org's libVorbis) Channels: 2 Rate: 44100 Nominal bitrate: 224,000000 kb/s Upper bitrate not set Lower bitrate not set User comments section follows... ARTIST=The Old Stoic ALBUM=The Old Stoic TRACKNUMBER=10 JAMENDO-TRACK-ID=684839 TITLE=Sadow And The Moon ORGANIZATION=http://www.jamendo.com COMMENT=http://www.jamendo.com PUBLISHER=http://www.jamendo.com DESCRIPTION=http://www.jamendo.com WWW=http://www.jamendo.com/fr/album/79685 LICENSE=http://creativecommons.org/licenses/by-sa/3.0/ COPYRIGHT=http://creativecommons.org/licenses/by-sa/3.0/ ENCODED-BY=http://creativecommons.org/licenses/by-sa/3.0/ WCOP=http://creativecommons.org/licenses/by-sa/3.0/ COVERURL=http://imgjam.com/albums/s79/79685/covers/1.400.jpg WOAF=http://www.jamendo.com/fr/track/684839 DATE=2010-11-19 REPLAYGAIN_TRACK_PEAK=1.05464709 REPLAYGAIN_TRACK_GAIN=-8.22 dB Vorbis stream 1: Total data length: 9273388 bytes Playback length: 5m:41.319s Average bitrate: 217,353522 kb/s Logical stream 1 ended
Hintergrund
Hintergrund: Man fragt mich öfters mal, welche Musik im Hintergrund zu hören ist. Dann hatte ich nicht jedes Mal die Laune, die Datei herauszusuchen und demjenigen den Namen des Künstlers usw. zu schicken.
Mit diesen Shell-Funktionen kann man das dann über einen Mausklick bzw. auf der Konsole sehr schnell erledigen.
In meinem Fall wird die erstellte Vorlage hier hochgeladen: https://song.natenom.name.
Installation/Einrichtung
Man muss nun alle (benötigten) Funktionen in eine Datei packen und diese in seiner Shell „sourcen“. Dann erstellt man noch die .psi-settings.conf-Datei in seinem $HOME, passt die Variablen entsprechend an, fertig.
Alternativ kann man diese Funktionen auch in die Datei ~/.bashrc einfügen.
Verwendung
Wenn man jetzt gerade ein Stück bei Clementine hört, reicht das Öffnen der Konsole und die Eingab von
$ m-psi-clementine
um den Mitmenschen die notwendigen Informationen zu liefern, um sich die freie Musik selbst herunterzuladen :)
Unterstützte Player
Aktuell werden folgende MusicPlayer unterstützt:
Die Shell-Funktionen
Shell-Funktionen zur Abfrage des gerade gespielten Stücks
# Push song information of currently played song in mpd. function m-psi-moc() { file=$(mocp -i | sed -n -r 's/File: (.*)/\1/p'); m-psi "$file" } # Push song information of currently played song in Clementine. # Uses dbus to get file path. function m-psi-clementine() { file=$(qdbus org.mpris.clementine /Player GetMetadata | sed -n -r 's/location: (.*)/\1/p'); m-psi "${file##*file://}" } # Push song information of currently played song in Amarok. # Uses dbus to get file path. function m-psi-amarok() { file=$(qdbus org.mpris.amarok /Player org.freedesktop.MediaPlayer.GetMetadata | sed -n -r 's/location: (.*)/\1/p'); m-psi "$file" } # Push song information of currently played song in mpd. function m-psi-mpd() { file=$(mpc -f "%file%" | head -1); m-psi "$file" }
Jede dieser Funktionen liest das gerade gespielte Lied eines Players aus und ruft dann die Shell-Funktion m-psi mit dem Dateinamen als Argument auf.
Shell-Funktion zum Pushen der Dateiinformationen
Die Shell-Funktion m-psi sieht folgendermaßen aus:
function m-psi() { _file="${1}" # Print help if needed :) if [ $# -lt 1 ] then echo -e "Usage:\n music_psi /path/to/file\n" return 1 fi # Read settings or exit if file does not exist. [[ -f ~/.psi-settings.conf ]] && . ~/.psi-settings.conf || exit 255 if [ "$( echo ${_file} | cut -c1)" != "/" ] then #In case of mpd we get the relative path of the file. It does not start with /. In this case, add the musicdir path of mpd. _file="${_mpd_musicdir}/${file}" fi _date=$(date "+%Y-%m-%d %H:%M %z") # File header echo "blablahtmlcodehiernichtverwendetwegencodeblock :P" > ${_songinfo_file_local} # Write metadata into the file. Remove the _hide_path string from the absolute file path # in order to save privacy of how your filesystem is organized :) # For example: _hide_path is "/home/username/musicdir" and your filepath # is "/home/username/musicdir/bass/lala.mp3" then the result is: # /bass/lala.ogg m-printtaginfo "${_file}" 0 | sed s+"${_hide_path}"++g >> "${_songinfo_file_local}" # File footer echo "blablahtmlcodehiernichtverwendetwegencodeblock :P" >> ${_songinfo_file_local} # Copy file to remote host. scp -P ${_remote_port} -i "${_ssh_identity_file}" "${_songinfo_file_local}" "${_remote_user}@${_remote_ip}:${_songinfo_file_remote}" # Remove temporary file. rm ${_songinfo_file_local} }
Einstellungen
In der Funktion m-psi wird die Datei ~/.psi-settings.conf eingelesen, die bei mir folgenden Inhalt hat (private Daten geaendert):
- .psi-settings.conf
_remote_ip="yourip" _remote_user="yourusername" _remote_port="yoursshport" _songinfo_file_local="/tmp/song${$}" _songinfo_file_remote="/var/www/yourwebsite/htdocs/index.html" _hide_path="/home/hide/my/Musicpath" #Hide/remove this part of your path (usually your private music directory). _ssh_identity_file=/path-to-your-ssh-identity-file _mpd_musicdir="/home/of/your/mpd/musicdir"
