• No results found

out regarding certain limitations on the produced result and how this could be further developed with

N/A
N/A
Protected

Academic year: 2021

Share "out regarding certain limitations on the produced result and how this could be further developed with"

Copied!
31
0
0

Loading.... (view fulltext now)

Full text

(1)
(2)

Abstract

This is a bachelor’s thesis that has been formulated with the company Astrid Education. The goal is to design a model in Python that allows children to perform vocal sound training of the English language and get real-time feedback on the pronunciation.

The project began with a literature study and interviews with experts that provided a stable foundation and an understanding of the sound and language structure, with the main focus on phonemes and formants. To keep the project to a reasonable size, it was limited to just looking at vocal sounds and not whole words. From this, a program could be created in Python with a number of different toolboxes. In the beginning the program was built to extract formants to analyze and visualize in a figure, this became the cornerstones of the program. After that, the development could continue with adding audio recording, cluster analysis, a real-time implementation and a calibration part. The calibration provided the conditions to be able to stretch a phoneme canvas that became unique for each user. The cluster analysis could then create a ball that the user could move around in the canvas with the persons voice and thus perform vocal sound training.

The results produced met the goals of a model for vocal sound training. A discussion could be carried

out regarding certain limitations on the produced result and how this could be further developed with

its design and visual side.

(3)

Sammanfattning

Detta är ett kandidatexamensarbete som utfromats mot företaget Astrid Education. Målet är att utforma en modell i Python som låter barn utföra vokalljudsträning av det engelska språket och i realtid få återkoppling på uttalet.

Projektet började med att utföra en literaturstudie samt intervjuer med sakkunniga som gav en stabil grund och en förståelse för ljudet och språkets uppbyggnad, med huvudsaklig fokus på fonemer och formanter. För att hålla projektet till en rimlig storlek begränsas det till att enbart kolla på vokalljud och inte hela ord. Från detta kunde ett program börja skapas i Python med en rad olika toolboxes.

Programmet började byggas upp genom att först extrahera formanter att analysera och visualisera i en figur, detta blev programmets grundstenar. Därefter kunde utvecklingen fortsätta med att lägga till ljudinspelning, klusteranalys, realtids-implementationen samt en kalibreringsdel. Kalibreringen gav förutsättningar för att kunna spänna upp en fonemcanvas som blev unik för varje användare. Kluste- ranalysen kunde sedan skapa en boll som användaren kunde flytta runt i denna canvas med sin röst och därmed utföra vokalljudsträning.

De resultat som framställdes uppfyllde målen med en modell för vokalljudsträning. En diskussion

kunde utföras angående vissa begränsningar på det framställda resultatet och hur detta skulle kunna

vidareutvecklas med dess utformning och visuella sida.

(4)

Innehåll

1 Introduktion 1

1.1 Bakgrund och syfte . . . . 1

1.2 Talet och engelska som andraspråk . . . . 1

1.3 Avgränsingar . . . . 1

2 Teoretisk bakgrund 2 2.1 Fonetik . . . . 2

2.2 Talproduktion . . . . 2

2.2.1 Vokalbildning . . . . 3

2.3 Akustisk fonetik . . . . 4

2.3.1 Formanter och spektrogram . . . . 4

3 Metod 6 4 Problemfördjupning 7 4.1 Grundkoncept . . . . 7

4.2 Utrustning . . . . 7

4.2.1 Python 3.8 . . . . 7

4.2.2 Praat . . . . 7

4.2.3 Toolboxes . . . . 7

5 Implementation i Python 9 5.1 Extrahera formanter . . . . 9

5.2 Gaussisk blandningsmodell . . . . 9

5.3 Fonemcanvas och kalibrering . . . 10

5.4 Feedback i realtid . . . 11

6 Resultat 12 6.1 Extraherade formanter . . . 12

6.2 Fonemcanvas . . . 14

6.3 Test av program . . . 14

7 Diskussion 17 7.1 Analys . . . 17

7.1.1 Medelvärdesbildning . . . 17

7.1.2 Resultat . . . 17

7.1.3 Felanalys . . . 18

7.2 Programmets begränsningar . . . 18

7.3 Vidareutvecklingar . . . 19

8 Slutsats 21

A Bilaga: Python-kod

A.1 Extrahera formanter . . . .

A.2 Realtime . . . .

A.3 Uppbyggnad av fonemkanvas . . . .

(5)

1 | Introduktion

1.1 Bakgrund och syfte

I dagens moderna samhälle med teknologi och en oändlig mängd vägar för att nå kunskap så har många möjligheten att lära sig ett nytt språk, däremot saknas ofta verktygen för att lära sig uttala språket då det finns en mycket större komplexitet i det än att bara kolla på ett klipp på internet. För att lära sig uttala ett nytt språk måste en lära sig fysiskt hur munnen och läpparna ska formas för eventuellt nya ljud, det handlar om att skapa en känsla och förståelse för det nya språket.

Detta kandidatexamensarbete skrivs mot företaget Astrid Education vars mål och visioner är att skapa en utbildning med kvalitet som är lättillgänglig för alla, oavsett vart i världen du befinner dig eller vilken ekonomi du har. Med hjälp av maskininlärning och taligenkänning vill Atrid Education skapa en plattform som lärare och elever världen över kan ta del av och minska gapet till kunskap för något av det viktigaste kommunikationsmedlet vi har, språket.

Idag finns redan en mängd olika applikationer för taligenkänning, till exempel har vi Siri för Apple och Alexa för Amazon, dessa jobbar med AI och taligenkänning. Meningen med dessa applikationer är att kunna tala till enheten och att denna ska förstå exakt vad du sagt och kunna svara till dina önskemål eller påståenden[1]. Syftet med detta kandidatexamensarbete är dock att vidareutveckla Astrid Educations vision med en interaktiv plattform, där målet är att skapa ett program som kan ta in vokalljud, läsa av och utvärdera det för att i realtid kunna ge feedback i utbildningssyfte. Målet för det här projektet är att bygga ett interaktivt och stimulerande program som riktar sig mot ett lärande av engelska språket. Detta är något som kan komma att vidareutvecklas till fler språk om ett gott resultat framställs.

1.2 Talet och engelska som andraspråk

Med dagens samhälle och möjligheten att nå världens alla hörn kan en inse hur viktigt språket är.

Barn som inte har engelska som sitt modersmål kommer naturligt ha det svårare att lära sig och utöva uttalet, detta då de flesta engelska fonemer inte finns med i barnens modersmål. Det handlar om att muskelminnet är vant med sitt modersmål och kommer därmed anamma dessa muskler när personen utövar ett nytt språk[2]. Det som sker är att personer ofta landar i att uttala nya ord med de fonem personen redan kan, alltså från sitt modersmål och det är där det ofta går fel.

Som tidigare nämnt så finns det en fysisk aspekt för att kunna lära sig ett nytt språk, det handlar om att veta hur munnen ska forma sig, hur tungan ska placeras och hur mycket luft du ska pressa genom stämbanden. Detta är svårt att beskriva i ord och lära ut utan interaktiv övning. Därmed kommer detta projekt behandla detta problem genom att bygga ett program som enkelt och tydligt får användaren att förstå det nya språket, vilket i detta fall är engelskan.

1.3 Avgränsingar

Då utlärningen av ett språk är ett stort område som inte kommer hinnas med att behandlas i sin helhet

under detta projekt så har en del avgränsningar gjorts. Detta projekt kommer därför bara behandla

uttal av vokalljud och inte hela ord och meningar. Vidare kommer programmet byggas utifrån det

engelska språket och därmed kommer det inte behandla andra språk, detta är dock något som kan

utvecklas utanför projektet. Då målet är att bygga ett program och inte en färdig produkt så kommer

en avgränsande del vara gränssnittet. Där finns en rad vidareutvecklingar att göra men som inte

kommer finnas med här.

(6)

2 | Teoretisk bakgrund

2.1 Fonetik

Tal kan betraktas som en meningsfull sekvens av ljud, de ljud som innebär skillnader i mening och sätten på vilka de kan kombineras styrs av fonologi. Vetenskapen om talet och särskild talljud kallas fonetik.

De minsta ljudförändingar som krävs för att skapa eller ändra en betydelse av ljudet kallas fonemer[3].

Fonemer kan kännas igen från språklexikon där det ofta görs fonetiska representationer av det uppslag- na ordet, dessa representationer ska hjälpa läsaren med uttalet. Fonetiska representationer markeras med hakparentes, det kan till exempel se ut såhär: [ô

¯

w

Ed] , där det engelska ordet red finfonetiskt transkriberats. Här står [ô] för det amerikanska uttalet av /r/, sträcket under r:et visar att ljudet produceras längre bak i munnen och [

w

] signaler att läpparna är något rundade [4].

Ofta delas fonektiken upp i tre huvudgrenar [5]. T alproduktion som beksriver hur talljud bildas, Akustiskf onektik som beskriver talljudets akustika egenskaper och T alreception som beskriver hur talljuden uppfattas. I detta projekt läggs mest vikt vid Akustiskfonetik, men det är även viktigt att förstå talets uppkomst för att sedan förstå de akustika analyserna.

2.2 Talproduktion

Ljuden som bildar talet produceras genom att talaren styr formen på talorganen och mängden luft som passerar genom dem. Mängden luft som passerar, eller lufttrycket, styrs av lugnorna. Lufttryc- ket kontrolleras av sex uppsättningar muskler som påverkar lungvolymen, dessa muskler är: buken, diafragman och fyra uppsättningar av revmuskler[3]. Luften som sedan tvingas genom stämbanden ger upphov till en vibration och en grundton som sedan förstärks i näs- och munhålan. Denna tonen formas eller atrikuleras sedan till något som kan uppfattas som tal. Tungan är den mest rörliga och mest betydelsefulla artikulatorn, men även underkäken, läpparna och velum kan påverka artikulatio- nen som formar tonen till bokstavsljud och ord. Varje variation i kanalform påverkar dess resonanser;

om kanalen någonstans längs vägen blir tillräckligt sammandragad, blir ljudgenerering resultatet. I

Figur 2.1 visas talorganens anatomin, där kan ljudets produktion följas från lufttrycket i lungan till

artikulationen i munnen.

(7)

2.2.1 Vokalbildning

Som tidigare nämnt är läpparnas form och tungans respektive underkäkens placering viktig för artiku- lationen. Olika bokstavsljud har olika kombinationer av dessa. Denna rapport fokuserar på vokalljud och korrekt uttal av dessa, det är därför viktigt att förstå hur de skapas.

Alla språks vokaler kan placeras ut i en slags karta som beskriver tungans placering och underkäkens läge vid ljudningen. Denna karta karta kallas hädanefter för fonemcanvas i rapporten. I Figur 2.2 återfinns denna fornemcanvas för de engelska vokalljuden.

Tungans placering bestämmer om vokalen är en så kallad främre, central eller bakre vokal. En främre vokal bildas om tungans högsta punkt är i munhålans främre del, ett exempel på en sådan vokal är [I:] som i svenskans bil [bI:l]. Om tungas högsta punkt istället är långt bak i munhålan nära svalget, bildas en bakre vokal. En bakre vokal är till exempel /å/ i svenskans skål [sko:l]. Vokalerna mellan dessa två lägen kallas centralvokaler, ett exempel på en sådan är [9] som finns i svenska ordet beslag [b9sla:g] .

Samtidigt som vokaler kan vara främre, centrala eller bakre vokaler så kan de även vara öppna, halv- öppna eller slutna vokaler. De tre sistnämnda kategorierna bestäms av underkäkens läge, det vill säga hur öppen munnen är. När en öppen vokal ljudas är underkäken avslappad och munnen öppen, ett exempel på en sådan vokal är [a] som i svenska ordet tak [ta:k]. När en sluten vokal ljudas är istället munnen mer stängd, ett exempel på en sådan är [0] som i svenska ordet kul [k0l]. Vokalerna mellan dessa två placeringar av käken kallas även dem för centralavokaler, ett exempel på en sådan är [œ] som i svenska ordet för [fœ:r]

Som tidigare nämnt spelar även formen på läpparna en roll när det kommer till vokalbildning. De brukar kategoriseras i rundade respektive orundade vokaler. En rundad vokal i svenskan är exempelvis /o/ som i sol [su:l], ett exempel på en orundad vokal i svenskan är /i/ som i riv [ri:v].

Figur 2.2: Engelska vokalljud klartlagda som front till back respektive open till close

1

(8)

2.3 Akustisk fonetik

Akustisk fonetik är det experimentella studiet av talet som fysikalisk process[6]. Det innefattar mät- ningar, analyser och beskrivningar av talet som ljudvågor. Genom att tolka ljud på detta vis kan det enkelt analyseras i datorprogram.

2.3.1 Formanter och spektrogram

Talljud skiljer sig från varandra genom olika uppsättningar av akustiska signaler. Tidigare nämndes att luften som tvingas genom stämbanden skapar en grundton, denna grundton brukar betecknas F

0

. Det ljud som alstras vid tal är sammansatt av många deltoner vars frekvenser är heltalsmultipler av F

0

. På sin väg genom håligheterna i svalg, mun och näsa förstärks dessa i vissa frekvensområden genom resonans[7]. För vokalljud är frekvensen för de lägsta två eller tre resonanserna viktigast, dessa resonansfrekvenser kallas formanter och numrerade från lägsta frekvens och uppåt: F1, F2, F3 osv[3].

Vid vilka frekvenser dessa resonanser uppstår beror på talarens håligheter i svalg, mun och näsa, även kallat ansatsrör. Eftersom kvinnor, barn och män oftast har olika kroppsbyggnad så har de oftast även olika långa ansatsrör med olika resonans-egenskaper.

Formanter är tacksamma att analysera vid vokalljud eftersom vokalernas ljudning är direkt kopplat till dessa tre formanters frekvenslägen. F1 kan kopplas till underkäkens position då denna är högre hos öppna än hos slutna vokaler, medan F2 kan kopplas till tungas placering då denna är högre hos främre än hos bakre vokaler. Den tredje formanten F3, och formanter av högre grad, varierar inte så mycket mellan olika vokalljud och analyseras därför sällan, men de blir något lägre vid rundade vokaler [8].

Formanter och andra egenskaper hos talsignaler studeras ofta med ljudspektrogram. I ett spektrogram representeras tiden av den horisontella axeln, frekvensen av den vertikala axeln och intensiteten eller ljudnivån av svärtningsgraden. Det är just denna svärtningsgrad som är viktig vid formantanalys. Om en bandbredd som är mindre än F

0

väljs framträder deltonerna som smala mörka band i spektrogram- met. Om en större bandbredd väljs så syns inte längre deltonerna, de bredare mörka banden kommer då representera formantvärden.

I Figur 2.3 visas ett spektrogram av en ljudfil där talaren säger vokalen /a/ som i svenskans sal [sa:l] .

Figur 2.3: Spektrogram till vokalljud /a/.

Det syns tydligt två mörkare breda band i spektrogrammet, dessa representerar F1 samt F2.

(9)

I Figur 2.4 visas datapunkter för de tre första formanterna när de placerats ut i samma spektrogram som i Figur 2.3.

Figur 2.4: Spektrogram med F1, F2 och F3 till vokalljud /a/.

F1 och F2 ger tydliga mätpunkter för vokalljudet medan mätpunkterna för F3 inte ger en lika tydlig/rak

linje. Detta indikerar som tidigare nämnt att det i huvudsak är F1 och F2 som visar på vilken vokal

som ljudas.

(10)

3 | Metod

Om en grov förenkling görs, kan metoden delas upp i två steg. Det första är att utföra en förunder- sökning som täcker teorin bakom talet, medan det andra är att analysera ljudsignaler för att bygga programmet.

Först införskaffades förkunskaper kring talets uppkomst, fonemer och formanter. En förstudie gjordes genom att ta del av litteratur, tidigare vetenskapliga arbeten inom området samt intervjuer. Den första intervjun gjordes Rachel Baker som doktorerat inom lingvistik vid Northwestern University och som nu har rollen Chief Academic Officier på Astrid Education. Den andra intervjun gjordes med Preben Wik som mellan åren 2004 och 2011 forskade på KTH åt instutitionen Musik, Tal och Hörsel. 2008 var Preben Wik handledare till ett examensarbete med liknande inriktning som detta projekt.

Efter att tagit del av den teoretiska bakgrunden bildades en idé kring hur programmet skulle kunna

fungera och implementeras i Python. Genom att extrahera formantvärden från ljudinspelningen och

plotta dessa påbörjades en process att sammanställa datan till ett medelvärde. Det viktiga i detta steg

var att eventuellt bakgrundsljud eller vokaldynamiken när talaren påbörjar eller avslutar ljudningen in-

te inkluderades i medelvärdes-bildningen. Störningsljud som ej ska inkluderas i medelvärdes-bildningen

filtreras ut med hjälp av en gaussisk blandningsmodell. Det nya medelvärdet ger en bra representation

för värdena på F1 och F2 av de vokalljud som ljudas. Programmet plottar sedan detta medelvärde i

realtid vilket ger användaren en direkt feedback på dennes uttal. Användarens ljudningar styr detta

medelvärde, som representeras av en boll som rör sig i plotten. Genom en kalibrering kan värden av

korrekta vokalljud uppskattas. Dessa uppskattning representeras av färgade områden i plotten, om

användaren lyckas styra bollen in något området är uttalet av tillhörande vokal korrekt.

(11)

4 | Problemfördjupning

4.1 Grundkoncept

En grundidé var att bygga ett program i MATLAB och skapa spektrogram som sedan kunde analyseras, men denna tanke övergavs snabbt då ett gammalt examensarbetet[9] dök upp som gav andra idéer.

Efter en fortsatt studie för att hitta den rätta metoden så återfanns ett brett sortiment av toolboxes för Python och en större mängd information som passade projektet, därmed föll valet på att utforma projektet i Python.

Som tidigare nämnt så är tanken att bygga ett program som lär barn uttala engelska vokalljud. Visionen är att kunna spänna upp en canvas med fonemer, se Figur 2.2. I denna canvas ska användaren, med sin röst, kunna styra en boll in i olika målområden för olika vokalljud. Områdenas placering bestäms av förinspelningar och den tidigare nämna fonemcanvasen.

4.2 Utrustning

En rad olika program kommer användas för att undersöka och förstå formanter, samt för att kun- na bygga den önskvärde modellen för detta projekt. De program som kommer användas presenteras nedan.

4.2.1 Python 3.8

Python 3.8 är det huvudprogram som kommer användas för att bygga det här projekt. Python är ett program skapades år 1991, det designades av Guido van Rossum och vidareutvecklades av Python Software Foundation. Det skapades för att göra det enklare för kodare att läsa men även skriva kortare och enklare kod[10]. Idag är Python ett av de mest använda programmeringsspråken och har användare världen över som dagligen programmerar och skapar nya användbara projekt, däribland stora företag så som Dropbox och Google.

4.2.2 Praat

Praat[11] är ett datorprogram som skapades för att analysera talet och dess fonemer, det skapades och håller än idag på att utvecklas och uppdateras av Paul Boersma och David Weenink på departementet Phonetic Sciences vid University of Amsterdam. Programmet har flera användningsområden, däribland att skapa spektogram, detta verktyg har använts i detta projekt för att skapa en förståelse för fonemer, vilket kan visas i Figur 2.4. Sedan finns en rad andra användningsområden med Praat, varav några är att kunna extrahera formanter från en ljudfil samt att manipulera tal. Praat har även en utvecklad gren i form av en toolbox, vid namn Parselmouth, som fungerar mot Python som kommer komma till användning för projektet.

4.2.3 Toolboxes

Parselmouth[12] är en toolbox till Python utvecklat från applikationen Praat[11]. Med toolboxen följer de funktioner som finns i applikationen Praat men som kan användas och utvecklas i ett eget pyt- honprogram. Parselmouth kan likt Praat extrahera formanter i en ljudfil vilket är dess område för programmet i detta projekt.

Scikit-learn[13] är ännu ett program som innehåller en rad toolboxes som kan extraheras till ett eget

Python-program. Det som är speciellt med Scikit-learn är att det är ett maskininlärnings-verktyg

(12)

för Python och att det lätt och effetkivt utför data-analys. Det startade som ett sommarprojekt skapat av Google och blev sedan en del av en masteruppsats och vidare utvecklades det till sitt första publika släpp år 2010. De verktyg som kan ges från Scikit-learn och användas är dels en rad olika kluster-modeller, regressionsanalyser samt klassificering av modeller. Utav dom klustermodellerna så finns Spektral Klustring samt Gaussisk Blandningsmetod, det sistnämnda kommer vara en del av uppbyggnaden för projektets programvara.

För att kunna leverera en produkt som kan agera i realtid så användes en toolbox vid namn PyAudio.

Detta är en toolbox som ger användaren möjlighet att spela och spela in audio och med detta går

det att bygga programmet för en realtids-uppdatering. PyAudio är en förbindelse mellan Python och

programmet PortAudio[14] som i sig är ett program som kan användas för diverse programmeringsspråk

och har samma funktioner som PyAudio.

(13)

5 | Implementation i Python

5.1 Extrahera formanter

I programmet används funktioner från Parselmouth som möjliggör att analysera en ljudinspelning och extrahera värden på önskade formanter vid en given tidpunkt. Eftersom fonemcanvasens axlar består av formant F1 samt F2 är det värden för dessa två som används i detta projekt. Dock väljes det att extrahera formantvärden upp till F3 då detta visat sig ge mer korrekta värden på F1 och F2. Om det väljes att enbart identifiera två formanter kan vissa värden som egentligen tillhör F3 misstolkas som värden tillhörande F1 eller F2, vilket ger ett sämre eller direkt felaktigt resultat.

För att tillfälligt bakgrundsljud eller annan signalstörning inte ska påverka programmet extraheras 20 formantvärden, med hjälp av en gaussisk blandningsmodell sammanställs de oftast förekommande värdena till ett medelvärde.

5.2 Gaussisk blandningsmodell

För att bilda ett medelvärde av endast de relevanta datapunkterna används scikitlearn’s funktion sklearn.mixture i Python som möjliggör genomförandet och analys av en “Gaussian Mixture”. Denna gaussiska blandningsmodell är en rimlighets modell som antar att datapunkterna genererats från en blandning av ett ändligt antal Gaussiska fördelningar med okända parametrar [13]. Modellen repre- senterar förekomsten av delpopulationer i en totalpopulation. Med paketet kommer även möjligheter att bestämma antal delpopulationer som ska beräknas samt att identifiera en centroid, mittpunkt, för dessa.

I programmet som utvecklas i detta projekt beräknas två delpopulationer. Ena populationen kommer omsluta eventuellt bakgrundsljud medan den andra populationen kommer omsluta de formanter som skall representera den rörliga bollen.

Nedan visas två figurer [15] som visualiserar en gaussisk blandningsmodell. I detta fall har det valts att identifiera två delpopulationer av en mängd data. I Figur 5.2 identifieras de två delpopulationerna där µ

1

och µ

2

representerar centroiderna för respektive population.

Figur 5.1: En hypotetisk datamängd. Figur 5.2: Delpopulationer av datamängd

med tillhörande centroid.

(14)

För att få ett tydlig och användarvänlig program plottas enbart den centroid som tillhör den population med flest datapunkter, det vill säga inspelningens dominerande ljud. Denna centroids värden plottas i programmet som den boll användaren styr med sin röst.

5.3 Fonemcanvas och kalibrering

Programmets första del är att spänna upp en individuell karta eller spelplan för användaren och bestämma placeringen för målområderna. Detta görs genom att förinspela tre vokalljud som kan anses som nyckel-parametar. Genom att spela in och analysera vokalljuden som innehåller extremvärden av F1 och F2 kan en spelplan spännas upp där alla övriga vokalljud kommer befinna sig inom detta område.

Inspelningarna går till som sådana att en textrad dyker upp där vokalljudet som ska ljudas beskrivs, användaren ska där utföra vokalljudet på ett överdrivet sätt. Inspelningen av användarens vokalljud pågår i två sekunder, med samma metod som beskrivet ovan, och återupprepas tre gånger för varje vokalljud. Efter inspelningarna sammanställs ett medelvärde av vokalljuden som kommer lägga grund till användarens spelplan.

Första vokalljudet som användaren kommer härma är [I:], medelvärdet av detta kommer ge användarens lägsta värde på F1 samt högsta värde på F2. Det andra vokalljudet är [u:] som istället kommer ge använderens lägsta värde för F2. Slutligen tas ett medelvärde [A:] användarens högsta värde för F1.

Utifrån dessa värden kan sedan övriga värden för vokalljuden placeras ut utan att nya inspelningar behöver göras.

Figur 5.3: Vokalljudskarta

1

med markerade vokaler där extremvärden förekommer

När inspelningar av extremvärdena gjorts plottas dessa värden och ett tillhörande färgmarkerat område

i spelplanen. Användaren kan då styra en boll in och ut ur dessa områden med hjälp av sin röst.

(15)

5.4 Feedback i realtid

Eftersom idén med den framtagna modellen är att lärandet ska komma från en learning by doing- process är det viktigt att återkopplingen sker i realtid. Om längden på inspelningen av användarens ljudning är lång kommer detta resultera i att det även tar lång tid att bearbeta och analysera av formanterna, eftersom detta görs för varje sample. Det i sig kommer göra att realtidsåterkopplingen går förlorad och att programmets respons på användarens ljud blir fördröjt. En fördröjd respons försvårar användarens inlärningsprocess då det inte blir tydligt vilka ljud som flytter bollen i rätt respektive fel riktning.

Om inspelningen däremot är för kort kan ett eventuellt bakgrundsljud bli den dominanta delpopula- tionen av inspelningen vilket skulle resultera i en felaktig placering av bollen i spelplanen. En uppda- teringsfrekvens på 20 gånger per sekund visade sig ge en bra relation mellan direktåterkoppling och tillräckligt lång inspelning för att extrahera relevant data.

I Python används biblioteket PyAudio som möjliggör liveinspelningar där segment på 0.05 sekunder

analyseras enligt beskrivet ovan. Som grafiskt användargränssnitt används sedan en vanlig browser där

de färgade målområderna och bollen, vars placering uppdateras 20 gånger per sekund, plottas.

(16)

6 | Resultat

6.1 Extraherade formanter

Nedan visas en bild där 20 värden av F1 och F2 plottas mot varandra, detta är från en inspelning av vo- kalljudet /i/ som i engelskans “me”. Inspelningen pågick i två sekunder och formantvärden extraherades med funktioner från Parselmouth.

Figur 6.1: Värden på F1 och F2 för inspelat vokalljud /i:/

I bilden syns en tydlig koncentration av datapunkter där F1 har det ungefärligavärdet 300 Hz och F2 det ungefärliga värdet 2800 Hz. De tre datapunkterna som avviker något från de andra extraherades vid tidpunkterna 0.1 s, 0.2 s och 0.3 s och kommer diskuteras mer i avsnitt 7.1.1.

Nedan visas en bild där ytterligare en inspelning av vokalljudet /i:/, inspelningen genomförs med

samma talare och tillvägagångssätt som i Figur 6.1. Här plottas även centroiderna, mittpunkterna, för

de två delpopulationerna som tagits fram genom den gaussiska blandningsmetoden.

(17)

För att säkerställa att formantvärderna som extraheras är rimliga och förhåller sig till varandra som förväntat gjordes inspelningar av ytterligare vokalljud. Inspelningarna var två sekunder och gjordes med samma talare som nämnts tidigare. Nedan visas plottar för vokalljuden /i/,/u/ och /a/ samt en plot där centroiderna för dessa vokalljud presenteras i samma fönster. Det blir tydligt att förhållandet mellan vokalljuden som stämmer överens med fonemkartan.

Figur 6.3: Formantvärden samt dominant centroid för inspelat vokalljud /i/

Figur 6.4: Formantvärden samt dominant centroid för inspelat vokalljud /u/

Figur 6.5: Formantvärden samt dominant centroid för inspelat vokalljud /a/

Figur 6.6: Centroider för inspelade vokalljud

/i/,/u/ och /a/

(18)

6.2 Fonemcanvas

Nedan visas två bilder där vokalljuden för spelplanens ytterkant plottats som färgmarkerade områden.

Placeringarna för dessa färgområden bestäms med inspelningar från användare, se avsnitt 5.3 Fo- nemcanvas och kalibrering. Bilderna nedan är skärmbilder från det interface där användaren, i realtid, kan styra den lilla blå bollen. Genom att korrekt ljuda vokalljudet /i/, som i engelskans me, kommer bollen röra sig uppåt i spelplanen och placera sig i det gröna området, vilket visas i Figur 6.8.

Figur 6.7: Skärmbild från program. Figur 6.8: Skärmbild från program där använda- ren ljudar /i:/.

6.3 Test av program

På grund av Covid-19 kunde en fullständig undersökning av programmet ej genomföras. För att kunna dra slutsatser av programmets funktion och användarvänlighet skulle en större mängd personer behöva testa programmet. Trots detta har det valts att ta med resultat från de åtta vuxna och två barn som fick testa programmet. Detta för att få en överblick och en första indikation på programmets funktion och användarvänlighet.

Test av programmet gjordes på personer i olika åldrar samt olika kön och bakgrunder. Den vuxna testgruppen bestod av fem män i åldrarna 21-30 samt fem kvinnor i åldrarna 24-31. Möjligheten att testa på den faktiska målgruppen, barn, var begränsad men två flickor på åtta respektive sju år fick testa programmet. Frågor angående programmets funktionalitet ställdes, det ställdes även frågor till alla testpersoner för att kunna ge en tydlig bild av vad som behövde förändras och utvecklas. Frågorna som ställdes var:

• Blir fonemcanvasen som förväntat?

• Klarar användare av att placera bollen i sitt målområden?

• Hur upplever du återkopplingen från programmet?

En sammanställning av de två första frågorna presenteras i Tabell 6.1.

(19)

Tabell 6.1: Utav 12 personer som testat programmet och svarat på enkäten.

Frågor Stämmer

inte alls [%] Stämmer

delvis [%] Stämmer helt [%]

Blir fonemcanvasen som förväntat? 33.33 58.33 8.33 Klara användaren av att placera

bollen i sitt målområde? 0 50 50

I Figur 6.9 visas ett urval av vissa testpersoners fomencanvas, det syns här en relativt stor spridning på placeringen av målområdena. Bilderna är skärmbilder vid olika tidpunkter under testerna och är tänkta att visa på olika fonemcanvaser. Därför är placeringen av den blå bollen, som styrs av rösten, inte av någon vikt.

Figur 6.9: Fonemcanvas efter kalibrering från sex slumpmässigt utvalda testpersoner

De två inom målgruppen, flickorna på sju respektive 8 år, hade liknande röstomfång. Det godkändes därför att de tillsammans kalibrerade och spände upp en fonemcanvas, som presenteras i Figur 6.10.

Deras målområden har en något större area för att underlätta fösöket. De två testpersonerna fick sedan

individuellt försöka placera bollen inom målområderna och svarade individuellt på frågorna.

(20)

Figur 6.10: Gemensam fonemkanvas för de två testpersonerna inom målgruppen: barn

Testpersonerna fick även bedöma vissa påståenden som gavs till dom och resultatet till dessa påståen- den presenteras i Tabell 6.2.

Tabell 6.2: Utav 12 personer som testat programmet och svarat på enkäten.

Påstående Stämmer

inte alls [%] Stämmer

sällan [%] Stämmer

ofta [%] Stämmer helt [%]

Det känns som att bollen följer min röst 0 8.33 83.33 8.33 Jag förstår vad jag ska göra för att

klara uppgiften 0 0 8.33 91.67

Det var roligt att använda detta program 0 8.33 0 91.67

(21)

7 | Diskussion

7.1 Analys

7.1.1 Medelvärdesbildning

I Figur 6.1-6.5 syns det att tre formantvärden avviker från övriga oavsett vilket vokalljud som ljudas.

Att de skiljer sig från övrig data kan bero på vokaldynamiken. Just eftersom de är de tre första värdena och eftersom de ofta uppträder på samma ställe indikerar detta att det skulle kunna vara formantvärden som hör till när talaren formar sin vokal innan den hålls konstant. Vokaldynimken spelar en roll i att identifiera engelska vokalljud [2] och skall inte betraktas som lika störande datapunkter som eventuellt bakgrundsljud.

För att få ett svar på varför dessa värden uppträder och vad de skulle kunna kopplas till gjordes en analys i programvaran Praat. Där visar det sig att dessa tre formantvärden uppträder oavsett om talaren börjar ljuda sitt vokalljud innan inspelningen börjat eller om början av ljudningen sker när inspelningen börjat. Detta betyder att det inte kan uteslutas att dessa värden beror på ljud från knapptryck eller något störningsljud när datorns mikrofon aktiveras.

Oavsett härkomst för dessa värden har de valts att eliminerats i medelvärdesbildningen. Detta eftersom att datapunkterna skulle bidra till att medelvärdet inte speglar området där flest formanter återfinns.

Eftersom placeringen av bollen som användaren styr i programmet baseras på detta medelvärda skulle dessa datapunker bidra till en inkorrekt och “hoppig” representation på spelplanen.

7.1.2 Resultat

Svaren från den vuxna testgrupen kunde sammanställas med att det generellt var svårt att spänna upp en fonemcanvas och att den inte blev som det förväntade teoretiska resultatet. Om det bortsågs från att alla målområderna inte fullt fick de förväntade utplaceringarna lyckades majoriteten av testpersonerna flytta den rörliga bollen till alla eller majoriteten av fonem-områdena. En återkommande situation var dock att testpersonen hade svårigheter att lyckas med fonemet [u:]. Både kalibreringen samt att placera den rörliga bollen i sitt kalibrerade område visade sig vara svårt. En återkommande reflektion hos många av testpersonerna var dessutom att återkopplingen från programmet var något “hoppig”, alltså att den rörliga bollen förflyttade sig tvärt över spelplanen och sedan återgick till ett mer stabilt tillstånd. Detta tyckte vissa påverkade känslan av att det faktiskt var deras röst som styrde bollen.

Ett återkommande svar var även att det var svårt att förstå återkopplingen angående vad de gjorde fel och endast kunde prova sig fram för att göra “rätt” ljud. Övrigt gavs även kommentarer om att det fanns en viss svårighet med att spänna upp canvasen i sitt eget röstomfång samt att det för vissa var jobbigt att inte känna att man gjorde tillräckligt bra ifrån sig i och med det tidigare nämnda

“hoppigheten”.

De två barnen som fick testa programmet fick både en relativt rimlig fonemcanvas och lyckades båda placera bollen inom samtliga målområden. Det är svårt att dra några slutsatser baserat på endast två försök, men att barn skulle kunna ha lättare för spänna upp en fonemcanvas skulle kunna bero på att de inte har lika starka associationer till orden som ges som exempel när de ska härma vokalljuden.

Istället för att fokusera på hur de i vanliga fall säger det engelska ordet “you” kanske de mer fokuserar på att faktiskt ljuda /u:/.

Innan testerna noterades även testpersonens dialekt, ett mönster som noterades var att testpersoner

med dialekter som avviker mycket från rikssvenskan hade svårare med vissa vokalljud. Här blir det

viktigt att notera och reflektera kring att programmet anser en viss dialekt som rätt. Även om personer

med olika dialekter kan göra sig förstådda i tal, visar vokalljudstränaren att de ljudar inkorrekta vokaler.

(22)

Etiska aspekter och problematik kring detta är viktigt att ta i beaktning, detta diskuteras vidare i avsnitt 7.3. En motivering till att ändå ha denna snäva acceptans är något som Preben under intervjun [16] kallade: Pedagogical overshoot. Det handlar om att vid inlärning överdriva grunderna. Till exempel när barn lär sig att titta, vänster-höger-vänster innan de går vägen. Få vuxna är så noggranna innan de går över vägen men tack vare den pedagogiska överdriften som barn får, så är de observanta på varifrån bilar kan komma. På likande sätt kan det vara med vokalljuden. Vid inlärningen kan det vara fördelaktigt att lära sig överdriva sitt uttal, för att sedan i ord och meningar bli förstådd trots att uttalet kanske inte är lika exakt eller överdrivet som detta program kräver.

Om någon slutsats ska dras från de begränsade antalet tester som gjordes kan det vara att användarna har svårt att spänna upp sin fonemcanvas. En lösning till detta skulle kunna vara att användaren får fylla i ålder och kön och att det utifrån detta finns färdiga fonemcanvaser som användaren blir tilldelad. En problematik med detta skulle då dock bli att ålder och kön inte är de enda faktorerna för vilket röstomfång du har. Röstens omfång beror främst på stämbandens längd samt munnen och halsens storlek. Att generalisera det till enbart ålder och kön skulle kunna medföra problem.

En annan slutsats är att programmet verkar ha en tilltalande metod och uppgift. En stor del av testpersonerna tyckte att programmet var roligt att använda, vilket tyder på att målet att skapa ett interaktivt och stimulerande program uppfyllts.

7.1.3 Felanalys

I det program som skapades så uppstod en del avvikande punkter som försummades i denna process.

Detta är punkter som skulle kunna vara en del av ett resultat från en annan fonem, trots detta uteslöts dessa då dessa även kan bero på bakgrundsljud och störningar. Ett problem som kan uppstå med att dessa avvikande punkter ignorerades är att ett möjligt fonem blev undanplockat. Då detta projekt bara kollar på vokalljud och enbart ett vokalljud i taget och inte hela ord så är det inte lika viktigt att ha med dom avvikande punkterna, däremot så kan ett eventuellt framtida arbete med produkten behöva ändra på detta för att kunna analysera hela ord och vokalljud i följd.

Så många avvikande punkter som möjligt försökte undvikas, dock förblev några alltid kvar vilket orsakade en del “hoppighet” i den bild som i realtid uppdaterades. Önskvärt hade varit om bollen som användaren styrde rörde sig i len rörelse för att kunna ge den bästa och tryggaste upplevelsen för användaren. Dessutom bör personen som använder läroverktyget kunna sitta i vilken miljö som helst utan att bakgrundsljud förstör, eftersom det inte är en självklarheten att du kommer kunna sitta ostörd i ett rum. Att ha ett eget rum är för många en lyx och inte en realitet. Därför är det viktigt att kunna låta användaren använda verktyget när som och hur som. Om det så är i ett eget rum, i ett klassrum fullt med barn eller om det är utomhus.

7.2 Programmets begränsningar

Till en början sattes en del begränsningar för att kunna skapa en rimlig storlek på projektet. Däre-

mot uppstod andra begränsningar när programmet började utvecklas. Dels uppstod en del problem

då fonem-canvasen skulle spännas upp, till en början uppstod två olika fonemer på samma ställe. En

felsökning gjordes, efter diskussioner med sakkunniga testades användarens vokalljud mot färdiga pro-

grammet Praat, även här visade formantvärderna något annat än förväntat. Felsökningen fortsatte med

att en annan person läste in vokalljuden. Under dessa försök blev fonemvärderna som förväntat, detta

väckte en diskussion kring hurvida dialekter kan ha en stor påverkan. Programmet tar inte hänsyn till

användarens dialekt och det finns risk för att en användare med annan dialekt än brittisk engelska får

resultat som vid första anblick kan anses felaktiga.

(23)

användaren i en situation där denne inte förstår vad som blir fel i uttalet och inte heller hur denna ska göra för att förbättra det.

En annan begränsning med programmet är att det inte har förmågan att avgöra om kalibreringen gått fel. Även om användaren skulle misslyckas med att härma det korrekta uttalet eller om ett bakgrunds- ljud skulle vara dominant i inspelningen hade programmet analyserat signalen och baserat användarens spelplan utifrån datan.

I programmet utförs analys av de två första formanterna. Som nämnt i den teoretiska bakgrunden spelar den tredje formanten också en roll, om än en liten, för vokalljudsbildning. Den tredje formanten är kopplad till hur rundade läppar talaren har men är inte nödvändig för att kunna skilja på några engelska vokalljud. Den tredje formanten extraheras i programmet men enbart för att ge ett mer korrekt värde för dom första två formanterna. Detta begränsar programmet till att enbart avläsa och analysera användarens placering av käke och tunga i ljudningen.

7.3 Vidareutvecklingar

Som tidigare beskrivet så finns en del begränsningar med detta projekt, utifrån dessa kan vidareut- vecklingar diskuteras. Utöver visuella förbättringar och ökad användarvänlighet finns det utvecklings- områden inom själva guidningen till att använda programmet samt att utöka programmet för att få möjligheten att träna på konsunantljud och till slut hela ord.

I dagsläget kan användaren enbart träna på vokalljuden /i:/, /u:/ samt /a:/ och de färgmarkerade målområderna baseras enbart på inspelningar från användaren. En viktigt vidareutveckling för att fullända programmet är att placera ut målområden som övriga vokalljud. För dessa utplaceringar behövs inga ytterligare inspelningar eftersom de förhåller sig till /i:/,/u:/ och /a:/ på samma sätt oavsett användare. Detta blir därför en relativt enkel vidareutveckling som använder utplaceringar av tidigare nämnda nyckelparametrar för att placera ut övriga målområden.

När det kommer till den visuella delen så är det väldigt viktigt då programmet främst riktar sig mot barn. För att kunna fånga en användares intresse eller skapa en nyfikenhet hos denne krävs det att programmet är visuellt tillanade för målgruppen, i detta fall barn. Att kunna leka runt med och styra en boll i en rymd för att sedan testa sig fram till rätt uttal är det huvudsakliga syftet och programmets pedagogiska del. Något annat som skulle kunna finnas med för att öka intresset är en slags poängställ- ning, där användaren kan samla poäng genom att lära sig. En annan vidareutveckling som ökar viljan att förbättra sig men även ger en ytterligare dimension i lärandet är att kunna välja svårighetsgrad. Att kunna börja på en lätt nivå där acceptansområdet är stort ger användaren självförtroende innan hen går vidare och blir bättre och bättre. Med olika stora acceptansområden kan även olika dialekter tas i beaktning. Storleken på dessa målområden behöver baseras på tidigare forskning eller vetenskapliga tester, detta för att undvika att ett målområde täcker två olika vokalljud.

För att undvika felkalibrering bör programmet använda sig av information som ålder och kön på an- vändaren. Inspelningarna av extemvärderna till fonemcanvasen skulle kunna utvecklas att användaren hör en inspelning av det vokalljud som användaren sedan skall härma. Uppläsaren skulle då ha samma biologiska kön och frekvensspann som talaren och vara i ungefär samma ålder, detta skulle underlätta för användaren när denne ska härma ljuden. Med generell data på formantvärden för ett visst kön och tillhörande åldersgrupp skulle programmet kunna reagera på avvikande resultat, och därefter be användaren återupprepa en viss vokal i kaliberingen. Detta skulle minimera risken för att använda- ren får en inkorrekt spelplan. Det hade även varit fördelaktigt om programmet kunde lagra data på användare, detta för att undvika att samma användare behöver kalibrera flera gånger.

För att programmet ska fungera i utbildningssyfte är det viktigt att programmet har ett tydligt mål

och en tydlig guidning till hur användaren når detta mål. I dagsläget är en stor del att testa sig fram

och att härma eller gissa sig till korrekt ljudning av vokalljudet. En vidareutveckling hade kunnat

(24)

vara visualiseringar som visar hur munnen ska formas för att komma närmare målet eller uppmanande instruktioner som guidar användaren.

För att uppfylla programmets mål och för att det ska vara logiskt att använda är det vitalt att

den bollen som användaren styr rör sig i realtid och efter användarens ljudningar. I dagsläget tar

programmet in ljud och analyserar formantvärden även när användaren inte ljudar, detta kan vara

bakrundsljud eller störningsljud från datorn. Detta gör att den styrande bollen ibland gör hopp i

spelplanen trots att användaren håller en konstant ljudning. Detta blir pedagogiskt problematiskt och

kan förvirra användaren då bollen rör sig bort från målet trots att ljudningen inte förändrats. Detta

skulle kunna elimineras genom att analysera pitchen på användaren, om programmet inte plockar

upp någon pitch, det vill säga ljudning, kan bollens position låsas. För att undvika att bollen gör

tvära förflyttningar i spelplanen skulle en normalisering kunna göras där plötsliga hopp i medelvärdet

av formanterna inte plottas på spelplanen. En lösning till detta skulle kunna vara att använda ett

rekursivt filter som Kalman filtret[17]. Kalman filtret skulle i detta fall kunna uppskatta en mjuk

rörelse av bollen utifrån inkompletta eller ”hoppiga” värden.

(25)

8 | Slutsats

Syftet med detta arbete var att vidareutveckla Astrid Educations vision med en interaktiv plattform.

Målet var att skapa ett program som kan ta in vokalljud, analysera och utvärdera det för att i realtid kunna ge feedback i utbildningssyfte.

Trots att det finns mycket att vidareutveckla och förbättringar att göra, innan programmet är en färdig

produkt, har målet att extrahera och analysera relevant data från vokalljud uppfyllts. Målet att kunna

ge feedback i realtid och att på ett interaktivt vis visualisera denna data har också uppfyllts, här finns

dock förbättringar i hur feedbacken ges och hur datan respresenteras.

(26)

Litteratur

[1] Sagar Khillar. Difference Between Alexa and Siri. 2020. url: http://www.differencebetween.

net/technology/difference-between-alexa-and-siri/ .

[2] Maja Westberg, Rebecka Vestman och Rachel Baker. Phonemes and formants with Rachel Baker.

Febr. 2021.

[3] Christine H. Shadle. Chapter 22: SPEECH PRODUCTION AND SPEECH INTELLIGIBILITY.

New Haven, Connecticut, 2019.

[4] lingvo.info. Fonetik, ljudkatalog “Ljuden vi talar”. 2021. url: https : / / lingvo . info / sv / babylon/phonetics .

[5] Göteborgs Universitet INSTITUTIONEN FÖR FILOSOFI. LG Fonetik 2 H18. Maj 2021.

[6] Nationalencyklopedin, akustisk fonetik. url: https://www.ne.se/uppslagsverk/encyklopedi/

l%C3%A5ng/akustisk-fonetik .

[7] Hartmut Traunmüller. Nov. 1997. url: https://www2.ling.su.se/staff/hartmut/tur.htm#

sid3.

[8] Hartmut Traunmüller. Nov. 1996. url: https://www2.ling.su.se/staff/hartmut/svok.htm.

[9] David Lucas Escribano. Pronunciation Training of Swedish Vowels Using Speech Technology, Embodied Conversational Agents and an Interactive Game . 2008. url: https://www.speech.

kth.se/prod/publications/files/3540.pdf .

[10] Sohom Pramanick. History of Python. 2019. url: https://www.geeksforgeeks.org/history- of-python/ .

[11] Paul Boersma och David Weenink. Praat: doing phonetics by computer [Computer program].

Version 6.1.38, retrieved 2 January 2021 http://www.praat.org/. 2021.

[12] Yannick Jadoul, Bill Thompson och Bart de Boer. “Introducing Parselmouth: A Python interface to Praat”. I: Journal of Phonetics 71 (2018), s. 1–15. doi: https://doi.org/10.1016/j.wocn.

2018.07.001 .

[13] F. Pedregosa m. fl. “Scikit-learn: Machine Learning in Python”. I: Journal of Machine Learning Research 12 (2011), s. 2825–2830.

[14] Phil Burk. PortAudio - an Open-Source Cross-Platform Audio API. url: http://www.portaudio.

com/.

[15] Oscar Contreras Carrasco. Gaussian Mixture Models Explained. Febr. 2020. url: https : / / towardsdatascience.com/gaussian-mixture-models-explained-6986aaf5a95 .

[16] Maja Westberg, Rebecka Vestman och Preben Wik. Metod för vokalljudsträning med Preben Wik . Febr. 2021.

[17] Shuo Wang. Kalman Filter in a Nutshell. Dec. 2020. url: https://towardsdatascience.com/

kalman-filter-in-a-nutshell-e66154a06862 .

(27)

A | Bilaga: Python-kod

A.1 Extrahera formanter

Denna kod tar en ljudfil, extraherar formanter, delar upp formantvärderna i två delpopulationer och plottar den största populationens cetrumpunkt.

1

2

p r i n t( ’ s t a r t ’)

3

t i m e . s l e e p (2)

4

fs = 4 4 1 0 0 # S a m p l e r a t e

5

s e c o n d s = 2 # D u r a t i o n of r e c o r d i n g

6

m y r e c o r d i n g = sd . rec ( int ( s e c o n d s * fs ) , s a m p l e r a t e = fs , c h a n n e l s =2)

7

sd . w a i t () # W a i t u n t i l r e c o r d i n g is f i n i s h e d

8

w r i t e (’ o u t p u t . wav ’ , fs , m y r e c o r d i n g ) # S a v e as WAV f i l e

9

sns . set ()

10

plt . r c P a r a m s [’ f i g u r e . dpi ’ ] = 100

11

snd = p a r s e l m o u t h . S o u n d (" o u t p u t . wav " )

12

F o r m a n t e r = snd . t o _ f o r m a n t _ b u r g ( m a x _ n u m b e r _ o f _ f o r m a n t s =4)

13

x =[]

14

y =[]

15

for i in r a n g e (1 ,20) :

16

f1 = F o r m a n t e r . g e t _ v a l u e _ a t _ t i m e (1 , i * 0 . 1 )

17

f2 = F o r m a n t e r . g e t _ v a l u e _ a t _ t i m e (2 , i * 0 . 1 )

18

19

x . a p p e n d ( f2 )

20

y . a p p e n d ( f1 )

21

# plt . p l o t ( f2 , f1 , ’ o ’ , m a r k e r s i z e =3 , l a b e l = i )

22

# plt . l e g e n d ( [ " 0 . 1 s " , " 0 . 2 s " , " 0 . 3 s " ,"0.4 s " ,"0.5 s " ,"0.6 s " ,"0.7 s " ,"0.8 s " ,"0.9 s " ,"1.0 s " ,"1.1 s " ,"1.2 s " , " 1 . 3 s " ,"1.4 s " ,"1.5 s " ,"1.6 s " ,"1.7 s " ,"1.8 s " ,"1.9 s " ,"2.0 s "] , loc ="

l o w e r r i g h t ")

23

24

m a t r i x = np . c o l u m n _ s t a c k (( x , y ) )

25

gm = G a u s s i a n M i x t u r e ( n _ c o m p o n e n t s =2 , r a n d o m _ s t a t e =0) . fit ( m a t r i x )

26

l a b e l = gm . p r e d i c t ( m a t r i x )

27

m e d e l = gm . m e a n s _

28

k o r r e k t = m o d e ( l a b e l )

29

30

plt . p l o t ( m e d e l [ korrekt ,0] , m e d e l [ korrekt ,1] , ’ o ’, m a r k e r s i z e =10 , a l p h a = 0 . 5 ) # p l o t t a r d o m i n a n t c e n t r o i d

31

plt . p l o t ( x , y , ’ o ’, m a r k e r s i z e =3) # p l o t t a r f o r m a n t e r

32

33

plt . l e g e n d ([" G a u s s i a n M i x t u r e M o d e l C e n t r o i d ", " F o r m a n t e r "])

34

plt . x l a b e l (’ F2 ’)

35

plt . y l a b e l (’ F1 ’)

36

plt . x l i m ( [ 5 0 0 0 , 0 ] )

37

plt . y l i m ( [ 5 0 0 0 , 0 ] )

38

plt . s h o w ()

(28)

A.2 Realtime

Denna kod extraherar formanter, beräknar den sötsta delpopulationens centrumpunkt och plottar den i realtid via en html-länk.

1

R A T E = 4 4 1 0 0

2

C H U N K = int ( R A T E / 2 0 ) # R A T E / n u m b e r of u p d a t e s per s e c o n d

3

4

def s o u n d p l o t ( s t r e a m ) :

5

d a t a = np . f r o m b u f f e r ( s t r e a m . r e a d ( C H U N K ) , d t y p e = np . i n t 1 6 )

6

snd = p a r s e l m o u t h . S o u n d ( d a t a )

7

F o r m a n t e r = snd . t o _ f o r m a n t _ b u r g ( t i m e _ s t e p = 0 . 0 0 2 5 , m a x _ n u m b e r _ o f _ f o r m a n t s =4 , m a x i m u m _ f o r m a n t = 5 5 0 0 . 0 , w i n d o w _ l e n g t h = 0.0025 , p r e _ e m p h a s i s _ f r o m = 5 0 . 0 )

8

x =[]

9

y =[]

10

for j in r a n g e (1 ,19) :

11

f1 = F o r m a n t e r . g e t _ v a l u e _ a t _ t i m e (1 , j * 0 . 0 0 2 4 )

12

f2 = F o r m a n t e r . g e t _ v a l u e _ a t _ t i m e (2 , j * 0 . 0 0 2 4 )

13

x . a p p e n d ( f2 )

14

y . a p p e n d ( f1 )

15

16

m a t r i x = np . c o l u m n _ s t a c k (( x , y ) )

17

gm = G a u s s i a n M i x t u r e ( n _ c o m p o n e n t s =2 , r a n d o m _ s t a t e =0) . fit ( m a t r i x )

18

l a b e l = gm . p r e d i c t ( m a t r i x )

19

m e d e l = gm . m e a n s _

20

k o r r e k t = m o d e ( l a b e l )

21

plt . p l o t ( m e d e l [ korrekt ,0] , m e d e l [ korrekt ,1] , ’ o ’, m a r k e r s i z e = 2 0 ) # m o v i n g b a l l

22

plt . p l o t ( 2 9 8 1 . 9 6 9 9 1 2 5 9 , 4 1 7 . 9 2 3 3 8 3 5 , ’ go ’ , m a r k e r s i z e =70 , a l p h a = 0 . 5 ) # u s e r s pre r e c o r d e d v a l u e s of / i / as in me

23

plt . p l o t ( 1 7 0 1 . 4 7 0 2 5 3 2 6 , 4 9 1 . 7 3 1 2 3 6 5 6 , ’ ro ’ , m a r k e r s i z e =70 , a l p h a = 0 . 5 ) # pre rec . / u /

24

plt . p l o t ( 1 3 0 5 . 5 6 6 6 5 7 7 8 , 9 1 2 . 8 8 7 0 3 3 5 9 , ’ yo ’ , m a r k e r s i z e =70 , a l p h a = 0 . 5 ) # pre rec . / a /

25

plt . t e x t ( 2 9 8 1 . 9 6 9 9 1 2 5 9 , 4 1 7 . 9 2 3 3 8 3 5 , ’ i : ’, f o n t s i z e = 2 0 )

26

plt . t e x t ( 1 7 0 1 . 4 7 0 2 5 3 2 6 , 4 9 1 . 7 3 1 2 3 6 5 6 , ’ u : ’ , f o n t s i z e = 2 0 )

27

plt . t e x t ( 1 3 0 5 . 5 6 6 6 5 7 7 8 , 9 1 2 . 8 8 7 0 3 3 5 9 , ’ a : ’ , f o n t s i z e = 2 0 )

28

p y l a b . t i t l e (’ V o c a l i z e the v o w e l s ’)

29

p y l a b . g r i d ()

30

p y l a b . a x i s ( [ 4 0 0 0 , 0 , 2 5 0 0 , 0 ] )

31

p y l a b . s a v e f i g (" 03. png " , dpi = 5 0 )

32

p y l a b . c l o s e (’ all ’)

33

34

if _ _ n a m e _ _ ==" _ _ m a i n _ _ ":

35

p r i n t ( ’ den har b r j a t ’)

36

p = p y a u d i o . P y A u d i o ()

37

s t r e a m = p . o p e n ( f o r m a t = p y a u d i o . paInt16 , c h a n n e l s =1 , r a t e = RATE , i n p u t = True ,

38

f r a m e s _ p e r _ b u f f e r = C H U N K )

39

for i in r a n g e ( int ( 1 0 * R A T E / C H U N K ) ) : # do t h i s for 10 s e c o n d s

40

s o u n d p l o t ( s t r e a m )

41

s t r e a m . s t o p _ s t r e a m ()

(29)

A.3 Uppbyggnad av fonemkanvas

Inspelning och medelvärdesbildning av de tre ”kantfonemenen”: /i:/, /u:/ och /a:/.

1

def g e t _ c o r n e r _ f o r m a n t s () :

2

3

fs = 4 4 1 0 0 # S a m p l e r a t e

4

s e c o n d s = 2 # D u r a t i o n of r e c o r d i n g

5

v r d e n f 1 =[]

6

v r d e n f 2 =[]

7

8

for i in r a n g e (1 ,4) :

9

if i == 1 :

10

11

p r i n t ( ’ P e p a r e to say / i / as in me ’)

12

t i m e . s l e e p (2)

13

p r i n t ( ’ s t a r t v o c a l i z i n g ! ’)

14

t i m e . s l e e p (1)

15

e l i f i == 2 :

16

t i m e . s l e e p (3)

17

p r i n t ( ’ P e p a r e to say / u / as in you ’)

18

t i m e . s l e e p (2)

19

p r i n t ( ’ s t a r t v o c a l i z i n g ! ’)

20

t i m e . s l e e p (1)

21

e l s e :

22

t i m e . s l e e p (3)

23

p r i n t ( ’ P e p a r e to say / a / as in bad ’)

24

t i m e . s l e e p (2)

25

p r i n t ( ’ s t a r t v o c a l i z i n g ! ’)

26

t i m e . s l e e p (1)

27

28

for t in r a n g e (1 ,4) :

29

m y r e c o r d i n g = sd . rec ( int ( s e c o n d s * fs ) , s a m p l e r a t e = fs , c h a n n e l s =2)

30

sd . w a i t () # W a i t u n t i l r e c o r d i n g is f i n i s h e d

31

p r i n t ( ’ G o o d ! R e c o r d n i g is d o n e ’)

32

w r i t e ( ’ o u t p u t . wav ’, fs , m y r e c o r d i n g )

33

snd = p a r s e l m o u t h . S o u n d ( " o u t p u t . wav ")

34

F o r m a n t e r = snd . t o _ f o r m a n t _ b u r g ( m a x _ n u m b e r _ o f _ f o r m a n t s =4)

35

x =[]

36

y =[]

37

k o r r e k t =[]

38

for i in r a n g e (1 ,20) :

39

f1 = F o r m a n t e r . g e t _ v a l u e _ a t _ t i m e (1 , i * 0 . 1 )

40

f2 = F o r m a n t e r . g e t _ v a l u e _ a t _ t i m e (2 , i * 0 . 1 )

41

42

x . a p p e n d ( f2 )

43

y . a p p e n d ( f1 )

44

m a t r i x = np . c o l u m n _ s t a c k (( x , y ) )

45

gm = G a u s s i a n M i x t u r e ( n _ c o m p o n e n t s =2 , r a n d o m _ s t a t e =0) . fit ( m a t r i x )

46

l a b e l = gm . p r e d i c t ( m a t r i x )

(30)

47

m e d e l = gm . m e a n s _

48

k o r r e k t = m o d e ( l a b e l )

49

v r d e n f 1 . a p p e n d (( m e d e l [ korrekt , 0 ] ) )

50

v r d e n f 2 . a p p e n d (( m e d e l [ korrekt , 1 ] ) )

51

p r i n t (" P r e p a r e to v o c a l i z e it a g a i n " )

52

t i m e . s l e e p (2)

53

p r i n t (" S t a r t v o c a l i z i n g " )

54

t i m e . s l e e p (1)

55

f1i = sum ( v r d e n f 1 [ 0 : 2 ] ) /3

56

f1u = sum ( v r d e n f 1 [ 3 : 5 ] ) /3

57

f1a = sum ( v r d e n f 1 [ 5 : 8 ] ) /3

58

f2i = sum ( v r d e n f 2 [ 0 : 2 ] ) /3

59

f2u = sum ( v r d e n f 2 [ 3 : 5 ] ) /3

60

f2a = sum ( v r d e n f 2 [ 5 : 8 ] ) /3

61

62

r e t u r n ( f2i , f1i , f2u , f1u , f2a , f1a )

A.4 HTML-kod

Kod som gör det möjligt att använda en browser för real time plot.

1

< html >

2

< s c r i p t l a n g u a g e = " j a v a s c r i p t ">

3

f u n c t i o n R e f r e s h I m a g e () {

4

d o c u m e n t . p i c 0 . src =" 03. png ? a = " + S t r i n g ( M a t h . r a n d o m () * 9 9 9 9 9 9 9 9 ) ;

5

s e t T i m e o u t (’ R e f r e s h I m a g e () ’ ,100) ;

6

}

7

</ script >

8

< b o d y o n l o a d =" R e f r e s h I m a g e () ">

9

< img n a m e =" p i c 0 " src =" 03. png ">

10

</ body >

11

</ html >

(31)

References

Related documents

Läraren förklarar att läsförståelse för hen är när man obehindrat kan ta till sig texter av olika slag, både sakprosatexter och skönlitterära och att man med hjälp

Respondent 2* stated clearly that the lack of knowledge regarding sustainability questions prevent the financial auditors to dare to discuss these questions with the clients and

As the tunnel is built, the barrier effect in the form of rail tracks in central Varberg will disappear.. This will create opportunities for better contact between the city and

 As a response, The National Institute for Japanese Language and Linguistics (hereafter referred to as NINJAL) has as of December 2019 released four lists with guidelines

Color, brand awareness and price were crucial in choosing where the informants attributed themselves the cans symbolic values to their identity. It could be inferred high and

The over-night cultures were used in the minimum inhibition concentration experiments, fractional inhibition concentration test experiments and the time-kill curve

It constitutes of a case study of two of the largest and most well- known microfinance institutions in the world, Grameen America and Acción USA, as well as one of the earliest

The project resulted, in a new concept called “fixed with hooks” which was evaluated against other developed concepts and the original model before being evaluated in terms of