【发布时间】:2020-01-06 09:38:20
【问题描述】:
我正在尝试构建一个 Web 应用程序,该应用程序将记录来自浏览器的音频,并在每 3 秒后将记录的音频发送到 django API 进行分析(来自语音的情感识别)。我正在使用MediaRecorder 录制音频。 但只有噪声保存在波形文件中。
我正在尝试将录制的音频(作为 blob)发送到 django api。然后在后端收到它时,我将它保存为 wav 文件。
我正在发送这样录制的音频:
navigator.mediaDevices.getUserMedia({audio:true}).then(stream => {audio_handler(stream)});
var audio_chunks = [];
audio_handler = function(stream){
rec = new MediaRecorder(stream, {mimeType : 'audio/webm', codecs : "opus"});
rec.ondataavailable = function(e){
audio_chunks.push(e.data);
}
}
//on rec.stop()
var blob = new Blob(audio_chunks, {'type':'audio/wav; codecs=opus'});
console.log(blob);
var xhttp = new XMLHttpRequest();
xhttp.open("POST", "http://localhost:8000/er/", true);
var data = new FormData();
data.append('data', blob, 'audio_blob');
xhttp.send(data);
xhttp.onreadystatechange = function() {
if (this.readyState == 4 && this.status == 200) {
console.log(this.responseText);
}
};
在 django 后端保存为:
from django.http import JsonResponse
import wave
def get_emotion(request):
print(request.FILES.get('data'))
audio_data = request.FILES.get('data')
print(type(audio_data))
print(audio_data.size)
audio = wave.open('test.wav', 'wb')
audio.setnchannels(1)
audio.setnframes(1)
audio.setsampwidth(1)
audio.setframerate(16000)
blob = audio_data.read()
audio.writeframes(blob) #on playing 'test.wav' only noise can be heard
return JsonResponse({})
目前保存的音频文件中只有一些噪音,而我希望保存的波形音频文件与录制时所说的音频具有相同的内容。
如果有任何其他方法可以做同样的事情,请建议(从浏览器录制音频并将其发送到 django api,将其保存为音频文件)。
如果需要更多信息,请随时询问。谢谢!
【问题讨论】:
-
那么问题是什么?你得到一个错误?还有什么?如果你只解释你想要什么而不解释发生了什么,那么我们只能猜测是什么问题。
-
@dirkgroten 不,没有错误。文件被保存了,但问题是波形文件只包含噪音,而不是录制时所说的音频。
-
所以也许将其添加到您的问题中。你没这么说。
标签: javascript python django audio