Projekt Live2Lyrics
Songtexte zur gespielten Musik
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