089-1233183
Roman Müller, Ismaning b. München

Live2Lyrics


chess cam

Live2Lyrics - Songtexte zur gespielten Musik


Ein Shellskript analysiert den gerade auf Ihrem PC abgespielten Song (Webradio, Youtube, MP3 im Musicplayer o.ä.) und lädt Titelname, den Interpreten sowie den zum Song passenden Songtext aus dem Internet.

Manchmal möchte man zum laufenden Song gerne neben Titel und Interpret auch die Songtexte (Lyrics) mitlesen.
Das Shellskript "live2lyrics.sh ermöglicht das:
Sie starten lediglich Ihren Song, z.B. im Browser oder Musikplayer (Rhythmbox, Banshee, VLC,...) und anschließend das Skript. Dieses nimmt 20 Sekunden des Musikstreams auf und übergibt die mp3-Daten an den Echonest-Server. Dort werden Songtitel und Interpret ermittelt und zurückgegeben.
Nun sucht das Skript auf www.songtexte.com nach den passenden Lyrics und gibt diese -sofern vorhanden - in der Konsole aus.



(!) Hinweis: Die Nutzung des Skripts sowie der darin enthaltenen Software-Aufrufe erfolgt auf eigene Gefahr. Insbesondere ist der Anwender selbst verantwortlich für die Legalität der Verwendung im jeweiligen Land.
chess cam

Live2Lyrics - Songtext for the currently playing song


A shellscript analyses the currently playing song (webradio, youtube, mp3 audio player,...) and gets the titlename and artist as well as the song lyrics from the internet.

Sometimes you want to read the lyrics of the currently playing song.

The shellscript "live2lyrics.sh" does this job:
You just need to start playing the song in your webbrowser or audio player, then start the script. It will record 20 seconds of audio and send the data to the echonest server, where the title and artist are being recognized.
Next, the script will search for the lyrics at www.songtexte.com and display them, if found.




(!) Attention: You as the user are solely responsible for the legality of using the script (and the software calls in it) in your country.




Voraussetzungen / Prerequisites:

  • a Linux computer
  • pulseaudio
  • libav-tools
  • an Echonest API KEY
  • echoprint-codegen
  • curl
  • lynx



Source code


#!/bin/bash
#Please configure:
PULSE_SOURCE="alsa_output.pci-0000_00_1b.0.analog-stereo.monitor"
ECHONEST_API_KEY="YOUR_API_KEY"

#unmuting pulseaudio source
pacmd set-source-mute $PULSE_SOURCE false

#recording 25 seconds
echo "recording..."
timeout --foreground --signal=INT 20 gst-launch-1.0 pulsesrc device=$PULSE_SOURCE ! audioconvert ! audioresample ! wavenc ! filesink location=mic.mp3

#codegen for echoprint abfrage
echo "generating code..."
echoprint-codegen mic.mp3 0 20 > code.txt

#get songtitel
echo "searching echonest database..."
curl -F "query=@code.txt" http://developer.echonest.com/api/v4/song/identify?api_key=$ECHONEST_API_KEY > echonest_response.json

#from response: title and artist
grep -Po '(?<="artist_name": ")[^"]*' echonest_response.json | tr -d "\n" > temp_title.txt
printf "+" >> temp_title.txt
grep -Po '(?<="title": ")[^"]*' echonest_response.json >> temp_title.txt
title=$(head -n 1 temp_title.txt) 
#replacements
title_url=${title// /+} #replace blank character
title_url=${title_url//\'/} #replace '
title_url=${title_url//-/+} #replace -
title_url=${title_url//\.mp3/} #replace .mp3
title_url=${title_url//_/+} #replace _ 
echo "$title"
echo "$title_url"
if [ "$title" = "+" ]
then 
	echo "no record found in Echonest DB"	
	exit 
fi
#get songtext
printf "Getting songtext..."
wget -U "Firefox/3.0.15" http://www.songtexte.com/search?c=all\&q=$title_url -O temp_songtexte.com.html
temp=`sed -En 's/.*\"topHitLink\" href=\"(.*)\.html.*/\1/p' temp_songtexte.com.html`
temphtml=$temp".html"
echo "$temp"
if [ -z "$temp" ] #isnull?
then
	echo "lyrics not found."
else
	wget -U "Firefox/3.0.15" http://www.songtexte.com/$temphtml -O temp_songtext.html
	sed -n -e 's/.*<div\sid=\"lyrics\">\(.*\)<\/div>.*/\1/p' temp_songtext.html > temp_songtext_extract.html
	echo $title_url
	echo "Songtext from www.songtexte.com :"
	lynx -dump temp_songtext_extract.html
	#cp temp_songtext_extract.html $lyrics_folder$title_url".html"
fi



back
Kontakt / Impressum      Datenschutz