Ibland kan det vara bättre att leverera information via ljud, t.ex om man bygger ett larm av något slag kanske man vill informera om att ett dörr är olåst. Enklast är att koppla en högtalare till Raspberry Pi och säga t.ex “bakdörren är olåst”
Det finns ett gratis talsyntesprogram som stöder Svenska ganska bra, inte i nivån som man ser på film men tillräckligt för att man ska förstå vad den säger. Man kan skicka ljudet antigen via audioutgången eller via hdmi-uttaget.
Börja med att installera espeak programmet
1 |
sudo apt-get install espeak |
och sedan installera stödet för ALSA-ljud om det inte redan är installerat
1 |
sudo apt-get install alsa-tools alsa-utils |
ljudnivån kan man styra ASCII-grafisk via alsamixer med PIL UPP och PIL NER
1 |
alsamixer |
när man är nöja så avslutar man med ESC
Man kan även styra ljudnivån via kommandoraden
1 2 3 4 5 6 7 8 9 10 11 12 |
pi@rpi ~ $ amixer sget PCM Simple mixer control 'PCM',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback -10239 - 400 Mono: Playback -270 [94%] [-2.70dB] [on] pi@rpi ~ $ amixer sset PCM 50% Sätt volymen till 50% Simple mixer control 'PCM',0 Capabilities: pvolume pvolume-joined pswitch pswitch-joined penum Playback channels: Mono Limits: Playback -10239 - 400 Mono: Playback -4919 [50%] [-49.19dB] [on] |
För att få den att uttala orden på Svenska anger man flaggan -v sv och om man vill att den ska prata Engelska -v en
så för att få den att säga “Ange pinkod” kör man kommandot
1 |
espeak -v sv "ange pinkod" |
Tyvärr får man en massa varningar om ljud
1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 |
pi@rpi ~ $ espeak -v sv "ange pinkod" ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.front ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround40 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround41 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround50 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround51 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.surround71 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.iec958 ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.hdmi ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.modem ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline ALSA lib pcm.c:2217:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.phoneline ALSA lib pcm_dmix.c:957:(snd_pcm_dmix_open) The dmix plugin supports only playback stream Cannot connect to server socket err = No such file or directory Cannot connect to server request channel jack server is not running or cannot be started |
Jag har försökt på ett smidigt sätt fixa till det men det verkar inte finns något enkelt sätt att få bort dem. På nätet föreslår man att dirigera alla errors till /dev/null
1 |
espeak -v sv "ange pinkod" 2> /dev/null |
Ett enkelt sätt att bli av med dem, men man bli av med alla aldra fel också, så om jag skrivit
1 |
espeak -v se "ange pinkod" 2> /dev/null |
så hade jag gärna sett felmeddelandet “Failed to read voice ‘se'”.
Ett enkelt sätt är att köra det som kommer ut från espeak via aplay som fungerar utan problem
1 |
espeak -v sv "ange pinkod" --stdout | aplay -q |
då får vi också se eventuella felmeddelanden från espeak
1 2 3 |
pi@rpi ~ $ espeak -v se "ange pinkod" --stdout | aplay -q Failed to read voice 'se' aplay: playback:2483: read error |
Om du har problem med att höra ljudet kan man bli tvungen att ställa ljudutgång “hårt”
1 2 3 |
amixer cset numid=3 0 # automatisk detektering amixer cset numid=3 1 # analoga utgången amixer cset numid=3 2 # hdmi utgången |
man kan även göra färdiga wav-filer genom att skicka datat till en fil i stället för till aplay
1 |
espeak -v sv "ange pinkod" --stdout > angepinkod.wav |
Så här låter den Svenska rösten Ange pinkod
Hej. Mycket bra blogg, jag har själv funderat över detta, men inte gjort slag i saken. Nu så kanske jag får tummen ur och provar själv.
Jag skall försöka få tid att hjälpa till med att hitta hur man kan få bort felmeddelandena med konfiguration.
Men den långa raddan med felmeddelanden har nog att göra med ALSA och standardinställningarna för den. Det verkar i vart fall som ˋespeakˋ inte går via den vanliga ljudmixern som de vanliga skrivborden använder (glömt vad den heter, lite pinsamt 🙂 ), utan går direkt på ALSA (Linux “lågnivå” ljuddrivrutiner). Kan vara att om man installerar den så försvinner felmeddelandena.
Den ser även ut som att den försöka med ljudmixern jackd, vilken används när man vill ha professionell ljudmixning där kort fördröjning är viktig. Så om man inte har en grafisk miljö, så kan det vara bra att använda den. Jag har inte kollat om den fungerar ihop med den vanliga ljudmixern, eller hur man får dem att fungera tillsammans.
Men bra blogg, tack!