Use Case: Field researcher in Australia records audio data, wants to analyse spectral weight of different sibilant classes. Normally this would require a manual segmentation.

What we have: Automated speech recordings using SpeechRecorder (*.wav) and a table of text prompts presented to each speaker

What we want: Spectral weight analysis of sibilants /s/ and /S/ using emuR

Solution: command line script + Web Interface Multiple MAUS + R package emuR


* go to recordingsToAnalysis

* execute mk_txt.csh to create the txt files necessary (will be put to the 'corpus' sub-folder)

* go to http://clarin.phonetik.uni-muenchen.de/BASWebServices

* go to service Pipeline and upload the signal and txt file pairs (drag&drop them to the upload area and click on 'Upload')

* set the following options (all other default):

    Pipeline name = G2P_MAUS
    Language = English (AU)
    Output format = emuDB
    Pre segmentation = true

* check the box to confirm the terms of usage and the hint about citing

* run segmentation by clicking on 'Run Web Service': ~1 minute

* download and unzip the results in local dir  recordingsToAnalysis (creates dir MAUSOUTPUT_emuDB)

* Start R 

* install necessary packages (if not already installed) and load emuR

install.packages("wrassp")
install.packages("emuR")
library(emuR)

* adapt the following commands to match your pathes and execute the list of commands below

# load emu database: 3sec
aus.emu = load_emuDB("MAUSOUTPUT_emuDB") 

# summary to see structure
summary(aus.emu)

# view EMU DB in your local web browser
serve(aus.emu)

# query seg list with all sibilants, legacy EQL : 1sec
seglist = query(aus.emu, query="MAU=s|S", resultType = "emusegs")

# ... or the same with new regex notation:
seglist = query(aus.emu, query="MAU=~'^[sS]$'", resultType = "emusegs")

# track object with DFT spectra on-the-fly : 5sec
sib.tr = get_trackdata(emuDBhandle=aus.emu,seglist=seglist,ssffTrackName="dft",onTheFlyFunctionName='dftSpectrum')


# reduce full spectrum (0-11025Hz) to sensible area 1000-10000Hz
sib2.tr = sib.tr[,1000:10000]

# calculate moments from reduced spectra : 4sec
mom.tr = fapply(sib2.tr,moments,minval=T)

# ensemble plot contours of 1. moment (center of gravity) for s and ʃ
dplot(mom.tr[,1],seglist$labels,normalise=T,xlab="Normalized Time [%]",ylab="1st spectral moment [Hz]")

# ... the same but only plot average contours (faster)
dplot(mom.tr[,1],seglist$labels,average=T,normalise=T,xlab="Normalized Time [%]",ylab="1st spectral moment [Hz]")




