Projekt Live2Lyrics

Songtexte zur gespielten Musik

Ein Shellskript analysiert den gerade auf Ihrem PC abgespielten Song (Webradio, Youtube, MP3 im Musicplayer o.ä.) und lädt Titelnamen, 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.

Voraussetzungen


  • Linux PC
  • pulseaudio
  • libav-tools
  • 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