Python 如何将numpy数组转换为bytes对象而不将音频文件保存在磁盘上?
我现在正在学习建立一个基于Tacotron-2的TTS项目 ,在Python 如何将numpy数组转换为bytes对象而不将音频文件保存在磁盘上?,python,arrays,audio,mp3,wav,Python,Arrays,Audio,Mp3,Wav,我现在正在学习建立一个基于Tacotron-2的TTS项目 ,在save_wav(wav,path,sr)函数中的原始代码有一个步骤,使用 wav *= 32767 / max(0.01, np.max(np.abs(wav))) scipy.io.wavfile.write(path, hparams.sample_rate, wav.astype(np.int16)) 但是,在使用wav*=32767/max(0.01,np.max(np.abs(wav)))获得numpy数组后,我想将其
save_wav(wav,path,sr)
函数中的原始代码有一个步骤,使用
wav *= 32767 / max(0.01, np.max(np.abs(wav)))
scipy.io.wavfile.write(path, hparams.sample_rate, wav.astype(np.int16))
但是,在使用wav*=32767/max(0.01,np.max(np.abs(wav)))
获得numpy数组后,我想将其转换为.mp3文件,以便更容易将其作为流式响应发送回去
现在,我可以将.wav字节对象转换为.mp3文件,但问题是我不知道如何将numpy数组转换为.wav字节对象
我搜索了一下,发现似乎我需要为numpy数组设置一个标题,但在我查看的几乎所有帖子中都使用了scipy.io.wave
和audioop
等模块,这些模块将首先将numpy数组保存到一个.wav文件中,然后使用open('filename.wav',rb')
(这是用于scipy.io.wavfile.write模块的,其中文件名
参数应为字符串或打开文件句柄,据我所知,生成的.wav文件将保存在磁盘上。)
有人能就如何实现这一目标提出建议吗 我最终解决了这个问题,基于的scipy.io.wavfile.write和audio_segment.py修改和创建了新的模块 此外,当您想对wave/mp3字节执行操作而不将其保存为.wav/.mp3文件时(通常通过使用一些API或python包模块),您应该手动为其添加头。如果您研究这些优秀的包源代码,这将不是一项太艰巨的任务 使用
io.BytesIO
有一个更简单、更方便的解决方案,它使用了一些创建字节i/o接口的技巧。我们可以像文件一样使用它来进行写入
和读取
:
导入io
从scipy.io.wavfile导入写入
字节\u wav=字节()
字节io=io.BytesIO(字节波形)
为wav文件编写如何执行values array->bytes->values array
的(byte_io)。您能提供您提到的解决方案吗?例如,一些wav文件可能有一个非标准的头,这使得这一点更加困难。