从blob audio django创建一个wav文件

时间:2017-02-17 02:57:49

标签: python django audio blob wav

在客户端,我发送一个blob音频(wav)文件。在服务器端,我试图将blob文件转换为音频wav文件。我做了以下事情:

blob = request.FILES['file']
name = "TEST.wav"
audio = wave.open(name, 'wb')
audio.setnchannels(1)
audio.writeframes(blob.read())

我认为转换blob类似于将blob图像转换为jpeg文件,但在该假设中非常不正确。那不起作用;我收到错误 - "错误:未指定样本宽度。"然后我使用setsampwidth()并在1到4之间的任意数字中抛出(在查看wave.py源文件之后......我不知道为什么字节必须在1到4之间)。之后会抛出另一个错误 - "错误:未指定采样率。"如何指定采样率?

setnchannels(),setsampwidth()方法有什么作用?有没有"容易"我从blob生成wav文件的方法吗?

2 个答案:

答案 0 :(得分:1)

以前,我从来没有这样做过..但是,在我的测试中,下面这个脚本对我来说效果很好.. (但音频输出与原始文件不同)

>>> nchannels = 2
>>> sampwidth = 2
>>> framerate = 8000
>>> nframes = 100
>>> 
>>> import wave
>>> 
>>> name = 'output.wav'
>>> audio = wave.open(name, 'wb')
>>> audio.setnchannels(nchannels)
>>> audio.setsampwidth(sampwidth)
>>> audio.setframerate(framerate)
>>> audio.setnframes(nframes)
>>> 
>>> blob = open("original.wav").read() # such as `blob.read()`
>>> audio.writeframes(blob)
>>> 

我在https://stackoverflow.com/a/3637480/6396981

找到了这个方法

最后,将nchannelssampwidth的值更改为1。我得到了与原始文件相同的音频。

nchannels = 1
sampwidth = 1
framerate = 8000
nframes = 1
  

Python2 下测试,并在 Python3 上收到错误UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 4: invalid start byte

答案 1 :(得分:0)

我也遇到了同样的问题。我的问题是与原始输出相比,音调输出较低。我设法使用 getnframes() 对原始音频进行逆向工程以获得 nframes采样率采样宽度getframerate()getsampwidth() 分别。最后,我设法调整了采样频率/帧速率,以某种方式带来完美的音调。

在某个偏移频率比原始调整变得完美。我的在原始采样率的十六分之一的偏移总和下工作得很好。

OffsetFrequency = OriginalFrequency/16

Frequency = OriginalFrequency + OffsetFrequency