
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