1. --!movie
  2. --!encoding=utf-8 äöü
  3.  
  4. --**************************************
  5. -- @file      Watson Speech-To-Text Demo
  6. -- @author    Valentin Schmidt
  7. -- @version   0.2
  8. --**************************************
  9.  
  10. global $
  11.  
  12. global gApiUrl
  13. global gRec
  14. global gCh
  15.  
  16. ----------------------------------------
  17. --
  18. ----------------------------------------
  19. on startMovie
  20.     _player.debugPlaybackEnabled = TRUE
  21.  
  22.     ----------------------------------------
  23.     -- CONFIG
  24.     ----------------------------------------
  25.     API_KEY = "2XpuvuOSTkqFS2rnqJPde0WW2CYcbYx2EeXoelic3PXU"
  26.  
  27.     ----------------------------------------
  28.     -- Select your closest server!
  29.     ----------------------------------------
  30.     --    us-south for Dallas
  31.     --    us-east for Washington, DC
  32.     --    eu-de for Frankfurt
  33.     --    au-syd for Sydney
  34.     --    jp-tok for Tokyo
  35.     --    eu-gb for London
  36.     --    kr-seo for Seoul
  37.     API_LOCATION = "eu-de"
  38.  
  39.     ----------------------------------------
  40.     -- Select your language!
  41.     ----------------------------------------
  42.     --  Arabic (Modern Standard)    ar-AR
  43.     --  Brazilian Portuguese        pt-BR
  44.     --  Chinese (Mandarin)          zh-CN
  45.     --  Dutch (Beta)                nl-NL
  46.     --  English (United Kingdon)    en-GB
  47.     --  English (United States)     en-US
  48.     --  French                      fr-FR
  49.     --  German                      de-DE
  50.     --  Italian (Beta)              it-IT
  51.     --  Japanese                    ja-JP
  52.     --  Korean                      ko-KR
  53.     --  Spanish (Argentinian, Beta) es-AR
  54.     --  Spanish (Castilian)         es-ES
  55.     --  Spanish (Chilean, Beta)     es-CL
  56.     --  Spanish (Colombian, Beta)   es-CO
  57.     --  Spanish (Mexican, Beta)     es-MX
  58.     --  Spanish (Peruvian, Beta)    es-PE
  59.     API_LANG = "en-US"
  60.     ----------------------------------------
  61.  
  62.     gApiUrl = "https://apikey:"&API_KEY&"@api."&API_LOCATION&".speech-to-text.watson.cloud.ibm.com/instances/c86aa3fb-981d-4b76-a42f-2fca280d8a16/v1/recognize"
  63.     put "?model="&API_LANG&"_BroadbandModel" after gApiUrl
  64.  
  65.     -- libs
  66.     $.import("curl")
  67.     $.import("json")
  68.     $.import("ui")
  69.  
  70.     -- window settings
  71.     _movie.stage.title = "Watson Speech-To-Text Demo"
  72.     _movie.stage.titlebarOptions.visible = TRUE
  73.     _movie.stage.rect = rect(0, 0, 370, 240)
  74.     _movie.centerStage = TRUE
  75.     _movie.puppetTempo(15)
  76.  
  77.     -- create ui
  78.     $.ui.buttonCreate("Start Recording", #slotStartRecording)
  79.     $.ui.buttonCreate("Stop Recording", #slotStopRecording)
  80.     $.ui.buttonCreate("Speech-to-Text", #slotSpeechToText)
  81.     m = new(#field)
  82.     m.name = "result"
  83.     m.boxType = #fixed
  84.     m.rect = rect(0, 0, 350, 190)
  85.     m.alignment = "center"
  86.     m.fontsize = 18
  87.     m.fontstyle = "bold"
  88.     m.border = 1
  89.     s = $.ui.make(m, [#loc: point(10, 40)])
  90.  
  91.     -- show window
  92.     _movie.updateStage()
  93.     _movie.stage.visible = TRUE
  94.  
  95.     -- init RecSndXtra
  96.     gRec = xtra("RecSndXtra").new()
  97.     res = gRec.OpenAudio("")
  98.     if res<>"ok" then put "[ERROR] OpenAudio failed"
  99.     res = gRec.SetSampleRate(22.05)
  100.     if res<>"ok" then put "[ERROR] SetSampleRate failed"
  101. end
  102.  
  103. ----------------------------------------
  104. --
  105. ----------------------------------------
  106. on stopMovie
  107.     if not voidP(gRec) then
  108.         gRec.CloseAudio()
  109.         gRec = VOID
  110.     end if
  111. end
  112.  
  113. ----------------------------------------
  114. -- @callback
  115. ----------------------------------------
  116. on slotStartRecording
  117.     member("result").text = ""
  118.     res = gRec.StartRecording(60000)
  119.     if res<>"ok" then put "[ERROR] StartRecording failed"
  120. end
  121.  
  122. ----------------------------------------
  123. -- @callback
  124. ----------------------------------------
  125. on slotStopRecording
  126.     gRec.StopRecording()
  127.     res = gRec.SaveAsFile($.PATH&"recording.wav")
  128.     if res<>"ok" then put "[ERROR] SaveAsFile failed"
  129. end
  130.  
  131. ----------------------------------------
  132. -- @callback
  133. ----------------------------------------
  134. on slotSpeechToText
  135.     gCh = $.curl.init()
  136.     gCh.setOption($.curl.CURLOPT.URL, gApiUrl)
  137.     gCh.setOption($.curl.CURLOPT.SSL_VERIFYPEER, FALSE)
  138.     gCh.setOption($.curl.CURLOPT.HTTPHEADER, ["Content-Type: audio/wav"])
  139.     gCh.setSourceFile($.PATH & "recording.wav")
  140.     gCh.setOption($.curl.CURLOPT.POST, TRUE)
  141.     res = gCh.execAsync(#slotResult, _movie, 1)
  142. end
  143.  
  144. ----------------------------------------
  145. -- @callback
  146. ----------------------------------------
  147. on slotResult (res)
  148.     if integerP(res) then
  149.         put "[ERROR]" && curl_error(res)
  150.     else
  151.         json = res.readRawString(res.length)
  152.         data = $.json.decode(json, TRUE)
  153.         -- [#results: [[#alternatives: [[#confidence: 0.9700, #transcript: "I love cookies "]], #final: 1]], #result_index: 0]
  154.         results = value("data[#results]")
  155.         if listP(results) then
  156.             repeat with r in results
  157.                 txt = r[#alternatives][1][#transcript]
  158.                 put txt & RETURN after member("result")
  159.             end repeat
  160.             _movie.updateStage()
  161.         end if
  162.         put "[RESULT]" && json
  163.     end if
  164. end
  165.  
[raw code]