2015-08-08 6 views
0

У меня есть код, указанный ниже. Он работает отлично. Теперь я хочу сохранить вывод микрофона в текстовом файле.Python Использование PyAudio как записать вывод микрофона в текстовый файл и прочитать на стороне приемника для создания волнового файла

p = pyaudio.PyAudio() 

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

for i in range(0, 1000): 
data = stream.read(CHUNK) 
frames.append(data) 

stream.stop_stream() 
stream.close() 
p.terminate() 

target = open('target.txt', 'w') 
target.write(repr(frames)) 
target.close() 

Он сохраняет результат в текстовом файле, как указано ниже. (Список, имеющий ул элементы sepereted запятой.

Ex - ['' , '' , '']. 


['\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\xff\xff\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\x00\xc9\x00\xb2\xfe\x82\x02\xf7\ts\xfen\x00i\xff\xeb\xff\xa9\xff\xed\xff\xc5\xff\xd1\xff\xcd\xff\xaf\xff\xde\xff\xb8\xff\xc9\xff\xb0\xff\xca\xff\xd1\xff\xc9\xff\xcb\xff\xdf\xff\xdb\xff\xe2\xff\xe6\xff\xd9\xff\xf8\xff\xe1\xff\xf6\xff\xf1\xff\xd8\xff\xe1\xff\xe4\xff\xd4\xff\xdd\xff\xef\xff\xef\xff\xdc\xff\xd2\xff\xd6\xf ....] 

На стороне приемника я перенести этот файл.

приемник открыть текстовый файл. Преобразование содержимого с помощью функции Eval().

  with open("targetRec.txt",'r') as inf:  
       Rnewdiffdict = eval(inf.read()) 

Inf.Read() возвращает строковый объект. Объект возврата объекта Eval Следующий код записывает список в файл волны.

  wf = wave.open("recaudio.wav", 'wb') 
      wf.setnchannels(int(recmetadata[0])) 
      wf.setsampwidth(int(recmetadata[2])) 
      wf.setframerate(int(recmetadata[3])) 
      wf.writeframes(b''.join(Rnewdiffdict))  
      # Write frames in wave file . 
      wf.close() # Close wave file. 

Теперь, на стороне отправителя, я хочу заменить \ x на '' во время отправки. Он может уменьшить размер текстового файла.

  target.write(repr(frames).replace('\\x',' ')) 

На приемной стороне, я хочу заменить «» на \ х, чтобы воссоздать файл, как это было до операции замены на стороне отправителя.

  Rnewdiffdict = eval(inf.read().replace(' ','\\x')) 

Это дает мне ошибку, а затем программу зависает.

Traceback (most recent call last): 
    File "I:\Users\Administrator\Desktop\read wave.py", line 239, in <module> 
ReceiveAudio() 
    File "I:\Users\Administrator\Desktop\read wave.py", line 101, in ReceiveAudio 
    Rnewdiffdict = eval(inf.read().replace(' ','\\x')) 
    File "<string>", line 1 

ответ

0

Я заменил код на стороне отправителя, как указано ниже.

target = open('target.txt', 'w')  
encoded_string = base64.b64encode(repr(frames)) ## Encode using base64 
target.write(encoded_string) 

На приемной стороне кода написано ниже -

with open("targetRec.txt",'r') as inf: 
     x = inf.read() 
     y = x.decode('base64')    ## Decode using base64 
     z = eval(y) 
+0

Есть ли альтернатива этому. –