Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/arrays/14.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Python 如何将numpy数组转换为bytes对象而不将音频文件保存在磁盘上?_Python_Arrays_Audio_Mp3_Wav - Fatal编程技术网

Python 如何将numpy数组转换为bytes对象而不将音频文件保存在磁盘上?

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数组后,我想将其

我现在正在学习建立一个基于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数组后,我想将其转换为.mp3文件,以便更容易将其作为流式响应发送回去

现在,我可以将.wav字节对象转换为.mp3文件,但问题是我不知道如何将numpy数组转换为.wav字节对象

我搜索了一下,发现似乎我需要为numpy数组设置一个标题,但在我查看的几乎所有帖子中都使用了
scipy.io.wave
audioop
等模块,这些模块将首先将numpy数组保存到一个.wav文件中,然后使用open('filename.wav',rb')

(这是用于scipy.io.wavfile.write模块的,其中
文件名
参数应为字符串或打开文件句柄,据我所知,生成的.wav文件将保存在磁盘上。)


有人能就如何实现这一目标提出建议吗

我最终解决了这个问题,基于scipy.io.wavfile.writeaudio_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文件可能有一个非标准的头,这使得这一点更加困难。