2017-02-17 91 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.

相關問題