2017-02-17 48 views
0

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

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

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

setnchannels(),setsampwidth()方法做什么?有没有一种“简单”的方式,我从blob生成wav文件?

+0

就是Django的它有关? –

+0

是的。我正在使用django 1.9将音频blob转换为wav文件。 – alienboy

回答

0

以前,我从来没有做到这一点。但是,在我的测试下面这个脚本工作的很好我.. (但是音频输出不是同样喜欢原始文件)

>>> 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

最后,通过用1改变nchannelssampwidth值。并且我得到了与原始文件相同的音频。

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

Tested under Python2, and got an error UnicodeDecodeError: 'utf-8' codec can't decode byte 0x95 in position 4: invalid start byte on Python3.

相关问题