使用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()

它将输出保存在如下所示的文本文件中。(包含以逗号分隔的STR元素的列表。

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

['x00x00x00x00xffxffx00x00x00x00x00x00x00x00xffxffx00x00x00x00x00x00x00x00x00x00x00x00x00x00x00x00xc9x00xb2xfex82x02xf7tsxfenx00ixffxebxffxa9xffxedxffxc5xffxd1xffxcdxffxafxffxdexffxb8xffxc9xffxb0xffxcaxffxd1xffxc9xffxcbxffxdfxffxdbxffxe2xffxe6xffxd9xffxf8xffxe1xffxf6xffxf1xffxd8xffxe1xffxe4xffxd4xffxddxffxefxffxefxffxdcxffxd2xffxd6xf  ....]

在接收端,我传输这个文件。

接收器打开文本文件。使用eval()函数转换内容。

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

inf.Read()返回字符串对象。Eval返回列表对象。下面的代码将列表写入wave文件。

            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',' ')) 

在接收端,我想用x替换' '以重新创建文件,就像在发送端替换操作之前一样。

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

它给我错误然后程序挂起。

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

我将发送端代码替换为如下所示。

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)

相关内容

  • 没有找到相关文章

最新更新