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…

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"

Navigation
Datenschutz in diesem Wiki
Wir speichern nicht...

Lizenz dieses Wikis



Soweit nicht anders angegeben stehen die Inhalte dieses Wikis unter der Creative Commons Lizenz by-sa.

Informationen zur Weiterverwendung der Inhalte dieses Wikis