Mit RaspberryPi Songtexte aus laufender Musik auslesen
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.
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.
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>.*/\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"
Keine Kommentare:
Kommentar veröffentlichen
Hinweis: Nur ein Mitglied dieses Blogs kann Kommentare posten.