--!movie
--!encoding=utf-8 äöü
--**************************************
-- @file Watson Speech-To-Text Demo
-- @author Valentin Schmidt
-- @version 0.2
--**************************************
global $
global gApiUrl
global gRec
global gCh
----------------------------------------
--
----------------------------------------
on startMovie
_player.debugPlaybackEnabled = TRUE
----------------------------------------
-- CONFIG
----------------------------------------
API_KEY = "2XpuvuOSTkqFS2rnqJPde0WW2CYcbYx2EeXoelic3PXU"
----------------------------------------
-- Select your closest server!
----------------------------------------
-- us-south for Dallas
-- us-east for Washington, DC
-- eu-de for Frankfurt
-- au-syd for Sydney
-- jp-tok for Tokyo
-- eu-gb for London
-- kr-seo for Seoul
API_LOCATION = "eu-de"
----------------------------------------
-- Select your language!
----------------------------------------
-- Arabic (Modern Standard) ar-AR
-- Brazilian Portuguese pt-BR
-- Chinese (Mandarin) zh-CN
-- Dutch (Beta) nl-NL
-- English (United Kingdon) en-GB
-- English (United States) en-US
-- French fr-FR
-- German de-DE
-- Italian (Beta) it-IT
-- Japanese ja-JP
-- Korean ko-KR
-- Spanish (Argentinian, Beta) es-AR
-- Spanish (Castilian) es-ES
-- Spanish (Chilean, Beta) es-CL
-- Spanish (Colombian, Beta) es-CO
-- Spanish (Mexican, Beta) es-MX
-- Spanish (Peruvian, Beta) es-PE
API_LANG = "en-US"
----------------------------------------
gApiUrl = "https://apikey:"&API_KEY&"@api."&API_LOCATION&".speech-to-text.watson.cloud.ibm.com/instances/c86aa3fb-981d-4b76-a42f-2fca280d8a16/v1/recognize"
put "?model="&API_LANG&"_BroadbandModel" after gApiUrl
-- libs
$.import("curl")
$.import("json")
$.import("ui")
-- window settings
_movie.stage.title = "Watson Speech-To-Text Demo"
_movie.stage.titlebarOptions.visible = TRUE
_movie.stage.rect = rect(0, 0, 370, 240)
_movie.centerStage = TRUE
_movie.puppetTempo(15)
-- create ui
$.ui.buttonCreate("Start Recording", #slotStartRecording)
$.ui.buttonCreate("Stop Recording", #slotStopRecording)
$.ui.buttonCreate("Speech-to-Text", #slotSpeechToText)
m = new(#field)
m.name = "result"
m.boxType = #fixed
m.rect = rect(0, 0, 350, 190)
m.alignment = "center"
m.fontsize = 18
m.fontstyle = "bold"
m.border = 1
s = $.ui.make(m, [#loc: point(10, 40)])
-- show window
_movie.updateStage()
_movie.stage.visible = TRUE
-- init RecSndXtra
gRec = xtra("RecSndXtra").new()
res = gRec.OpenAudio("")
if res<>"ok" then put "[ERROR] OpenAudio failed"
res = gRec.SetSampleRate(22.05)
if res<>"ok" then put "[ERROR] SetSampleRate failed"
end
----------------------------------------
--
----------------------------------------
on stopMovie
if not voidP(gRec) then
gRec.CloseAudio()
gRec = VOID
end if
end
----------------------------------------
-- @callback
----------------------------------------
on slotStartRecording
member("result").text = ""
res = gRec.StartRecording(60000)
if res<>"ok" then put "[ERROR] StartRecording failed"
end
----------------------------------------
-- @callback
----------------------------------------
on slotStopRecording
gRec.StopRecording()
res = gRec.SaveAsFile($.PATH&"recording.wav")
if res<>"ok" then put "[ERROR] SaveAsFile failed"
end
----------------------------------------
-- @callback
----------------------------------------
on slotSpeechToText
gCh = $.curl.init()
gCh.setOption($.curl.CURLOPT.URL, gApiUrl)
gCh.setOption($.curl.CURLOPT.SSL_VERIFYPEER, FALSE)
gCh.setOption($.curl.CURLOPT.HTTPHEADER, ["Content-Type: audio/wav"])
gCh.setSourceFile($.PATH & "recording.wav")
gCh.setOption($.curl.CURLOPT.POST, TRUE)
res = gCh.execAsync(#slotResult, _movie, 1)
end
----------------------------------------
-- @callback
----------------------------------------
on slotResult (res)
if integerP(res) then
put "[ERROR]" && curl_error(res)
else
json = res.readRawString(res.length)
data = $.json.decode(json, TRUE)
-- [#results: [[#alternatives: [[#confidence: 0.9700, #transcript: "I love cookies "]], #final: 1]], #result_index: 0]
results = value("data[#results]")
if listP(results) then
repeat with r in results
txt = r[#alternatives][1][#transcript]
put txt & RETURN after member("result")
end repeat
_movie.updateStage()
end if
put "[RESULT]" && json
end if
end