package Ġorg . tensorflow . lite . examples . classification Ċ Ċ import Ġandroid . Manifest Ċ import Ġandroid . content . Intent Ċ import Ġandroid . os . Bundle Ċ import Ġandroid . util . Log Ċ import Ġandroid . widget . TextView Ċ import Ġandroidx . appcompat . app . AppCompatActivity Ċ import Ġkotlinx . coroutines . Experimental Cor outines Api Ċ import Ġorg . tensorflow . lite . examples . classification . Global Store Variables . Companion . incorrect speech words Ċ import Ġorg . tensorflow . lite . task . audio . classifier . Audio Classifier Ċ import Ġjava . util .* Ċ import Ġkotlin . concurrent . schedule At Fixed Rate Ċ import Ġjava . io .* Ċ Ċ @ Experimental Cor outines Api Ċ class ĠSound Classification Activity Ġ: ĠAppCompatActivity () Ġ{ ĊĠĠĠ Ġvar ĠTAG Ġ= Ġ" Sound Classification Activity " ĊĊĠĠĠ Ġvar Ġmodel Path Ġ= Ġ" browser fft - speech . t flite " ĊĊĠĠĠ Ġvar Ġprobability Threshold : ĠFloat Ġ= Ġ 0 . 8 f ĊĊĠĠĠ Ġlateinit Ġvar ĠtextView : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġscore txt : ĠTextView ĊĠĠĠ Ġlateinit Ġvar Ġrandom word : ĠTextView ĊĠĠĠ Ġprivate Ġlateinit Ġvar Ġchange screen : ĠIntent ĊĠĠĠ Ġvar Ġtimer Ġ: ĠTimer Ġ= ĠTimer () ĊĠĠĠ Ġprivate Ġfun Ġkill Activity () Ġ{ ĊĠĠĠĠĠĠĠ Ġfinish () ĊĠĠĠ Ġ} ĊĊĠĠĠ Ġoverride Ġfun ĠonCreate ( savedInstanceState : ĠBundle ?) Ġ{ ĊĠĠĠĠĠĠĠ Ġsuper . onCreate ( savedInstanceState ) ĊĠĠĠĠĠĠĠ ĠsetContentView ( R . layout . sound _ classification ) ĊĊĊĠĠĠĠĠĠĠ Ġval ĠREQUEST _ RECORD _ AUDIO Ġ= Ġ 1 3 3 7 ĊĠĠĠĠĠĠĠ Ġrequest Permissions ( array Of ( Manifest . permission . RECORD _ AUDIO ), ĠREQUEST _ RECORD _ AUDIO ) ĊĊĠĠĠĠĠĠĠ ĠtextView Ġ= ĠfindViewById < TextView >( R . id . output ) ĊĠĠĠĠĠĠĠ Ġscore txt Ġ= ĠfindViewById < TextView >( R . id . score txt ) ĊĠĠĠĠĠĠĠ Ġrandom word Ġ= ĠfindViewById < TextView >( R . id . random word ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġrecorder Specs TextView Ġ= ĠfindViewById < TextView >( R . id . textView Audio Recorder Specs ) ĊĊĠĠĠĠĠĠĠ Ġval Ġclassifier Ġ= ĠAudio Classifier . create FromFile ( this , Ġmodel Path ) ĊĊĠĠĠĠĠĠĠ Ġval Ġtensor Ġ= Ġclassifier . create Input Tensor Audio () ĊĊĠĠĠĠĠĠĠ Ġval Ġformat Ġ= Ġclassifier . required Tensor Audio Format ĊĠĠĠĠĠĠĠ Ġval Ġrecorder Specs Ġ= Ġ" Number ĠOf ĠChannels : Ġ${ format . channels }\ n " Ġ+ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ" Sample ĠRate : Ġ${ format . sample Rate }" ĊĠĠĠĠĠĠĠ Ġrecorder Specs TextView . text Ġ= Ġrecorder Specs ĊĊĠĠĠĠĠĠĠ Ġ// Cho osing Ġa ĠRandom ĠWord ĊĠĠĠĠĠĠĠ Ġval Ġarray of words str Ġ= Ġclassifier . classify ( tensor )[ 0 ]. categories . join ToString Ġ{ Ġit . label Ġ} ĊĠĠĠĠĠĠĠ Ġvar Ġarray of words Ġ= Ġarray of words str . split (", Ġ") ĊĠĠĠĠĠĠĠ Ġarray of words Ġ= Ġarray of words . minus (" background "). minus (" off ") ĊĠĠĠĠĠĠĠ Ġvar Ġrandom Word Ġ= Ġarray of words [ Random (). nextInt ( array of words . size )] ĊĊĠĠĠĠĠĠĠ Ġprintln (" ************************ ******* Ġ" Ġ+ Ġrandom Word Ġ+ Ġ" Ġ" Ġ+ Ġarray of words ) ĊĠĠĠĠĠĠĠ Ġrandom word . text Ġ= Ġ" Current Ġword : Ġ" Ġ+ Ġrandom Word ĊĊĠĠĠĠĠĠĠ Ġ// score Ġto Ġkeep Ġtrack Ġof Ġhow Ġmany Ġaudio Ġwords Ġwere Ġgues sed Ġcorrectly ĊĠĠĠĠĠĠĠ Ġvar Ġscore Ġ= Ġ 0 ĊĠĠĠĠĠĠĠ Ġvar Ġadded Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġval Ġrecord Ġ= Ġclassifier . create Audio Record () ĊĠĠĠĠĠĠĠ Ġrecord . start Recording () ĊĠĠĠĠĠĠĠ Ġvar Ġindex Ġ= Ġ 0 ĊĊĠĠĠĠĠĠĠ Ġtimer . schedule At Fixed Rate ( 1 , Ġ 1 0 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġindex ++ ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ% Ġ 3 0 Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( added Ġ== Ġ 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġincorrect speech words . add ( random Word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Ġ= Ġ 0 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( index Ġ>= Ġ 1 5 0 ){ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange screen Ġ= ĠIntent ( this @ Sound Classification Activity , ĠScreen After Sound Activity :: class . java ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġchange screen . putExtra (" message ", Ġ" Final ĠScore : Ġ" Ġ+ Ġscore ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠstartActivity ( change screen ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġtimer . cancel () ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġarray of words Ġ= Ġarray of words . minus ( random Word ) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom Word Ġ= Ġarray of words [ Random (). nextInt ( array of words . size )] ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrandom word . text Ġ= Ġ" Current Ġword : Ġ" Ġ+ Ġrandom Word ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġtensor . load ( record ) ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Ġ= Ġclassifier . classify ( tensor ) ĊĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġfiltered Model Output Ġ= Ġoutput [ 0 ]. categories . filter Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġit . score Ġ> Ġprobability Threshold ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Model Output . map Ġ{ Ġit . displayName Ġ}. to Typed Array () ĊĠĠĠĠĠĠĠĠĠĠĠ Ġval Ġoutput Str Ġ= ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġfiltered Model Output . sorted By Ġ{ Ġ- it . score Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ. join ToString ( separator Ġ= Ġ"\ n ") Ġ{ Ġ"${ it . label } Ġ-> Ġ${ it . score } Ġ" Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Str . isNotEmpty ()) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġprintln (" output Str Ġ= Ġ" Ġ+ Ġoutput Str . split (" Ġ" )[ 0 ]) ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġif Ġ( output Str . split (" Ġ" )[ 0 ] Ġ== Ġrandom Word Ġ&& Ġadded Ġ== Ġ 0 ) Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġadded Ġ= Ġ 1 ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore ++ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġscore txt . text Ġ= Ġ" Score : Ġ" Ġ+ Ġscore ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġrun On Ui Thread Ġ{ ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ ĠtextView . text Ġ= Ġoutput Str ĊĠĠĠĠĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠĠĠĠĠ Ġ} ĊĠĠĠĠĠĠĠ Ġ} ĊĠĠĠ Ġ} Ċ }