2

私は、IBM WatsonでWebソケット経由でマイクでオーディオをストリーミングしようとしています。私は次のエラーを取得:WebSocket経由でオーディオをストリーミングするIBMが動作しない

TypeError: The system cannot find the file specified

私はサブプロセスに問題があると思いますが、私はこれを修正する助けてくださいを/それは働いてもらいます。ここで

from ws4py.client.threadedclient import WebSocketClient 
import base64, json, ssl, subprocess, threading, time 

class SpeechToTextClient(WebSocketClient): 
    def __init__(self): 
     ws_url = "wss://stream.watsonplatform.net/speech-to-text/api/v1/recognize" 

     username = "81bffb34-906b-4057-becf-72752e14e756" 
     password= "jPwZAMMB5Fwp" 
     auth_string = "%s:%s" % (username, password) 
     base64string= base64.encodestring(auth_string).replace("\n", "") 

     self.listening = False 

     try: 
      WebSocketClient.__init__(self, ws_url, headers=[("Authorization", "Basic %s" % base64string)]) 
      self.connect() 
     except: print("Failed to open WebSocket.") 

    def opened(self): 
     self.send('{"action": "start", "content-type": "audio/l16;rate=16000"}') 
     self.stream_audio_thread = threading.Thread(target=self.stream_audio) 
     self.stream_audio_thread.start() 

    def received_message(self, message): 
     message = json.loads(str(message)) 
     if "state" in message: 
      if message["state"] == "listening": 
       self.listening = True 
     print("Message received: " + str(message)) 

    def stream_audio(self): 
     while not self.listening: 
      time.sleep(0.1) 

     reccmd = ["arecord", "-f", "S16_LE", "-r", "16000", "-t", "raw"] 
     p = subprocess.Popen(reccmd, stdout=subprocess.PIPE) 

     while self.listening: 
      data = p.stdout.read(1024) 

      try: 
       self.send(bytearray(data), binary=True) 
      except ssl.SSLError: 
       pass 

     p.kill() 

    def close_connection(self): 
     self.listening = False 
     self.stream_audio_thread.join() 
     WebSocketClient.close(self) 





if __name__ == "__main__": 

    SpeechToTextClient() 

フルエラー出力されます。

C:\Python27\python.exe C:/Users/vetle/Desktop/testing_ibm.py 

Message received: {u'state': u'listening'} 
Exception in thread Thread-2: 
Traceback (most recent call last): 
File "C:\Python27\lib\threading.py", line 801, in __bootstrap_inner 
    self.run() 
File "C:\Python27\lib\threading.py", line 754, in run 
self.__target(*self.__args, **self.__kwargs) 
File "C:/Users/vetle/Desktop/testing_ibm.py", line 38, in stream_audio 
p = subprocess.Popen(reccmd, stdout=subprocess.PIPE) 
File "C:\Python27\lib\subprocess.py", line 390, in __init__ 
errread, errwrite) 
File "C:\Python27\lib\subprocess.py", line 640, in _execute_child 
startupinfo) 
WindowsError: [Error 2] The system cannot find the file specified 

答えて

3

ArecordはのAlsaの枠組みの中で音声を録音するには、Linuxのツールである、Linux上で動作するつもりはありません。あなたは代わりにサウンドを録音するためにpyaudioのようなものを使う必要があります。

def stream_audio(self): 
     while not self.listening: 
      time.sleep(0.1) 

     p = pyaudio.PyAudio() 

     stream = p.open(format=pyaudio.paInt16, 
       channels=1, 
       rate=16000, 
       input=True, 
       frames_per_buffer=1024) 

     while self.listening: 
      data = stream.read(2048) 

      try: 
       self.send(bytearray(data), binary=True) 
      except ssl.SSLError: 
       pass 
+0

ありがとう、これは全部解決しました!あなたは素晴らしいです。 –

関連する問題