Sonntag, 21. Dezember 2014

Mit RaspberryPi Songtexte aus laufender Musik auslesen


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.