Javascript 将录制的音频从浏览器发送到django服务器并另存为.wav

Javascript 将录制的音频从浏览器发送到django服务器并另存为.wav,javascript,python,django,audio,Javascript,Python,Django,Audio,我正在尝试构建一个web应用程序,它将从浏览器中录制音频,并在每3秒后将录制的音频发送到django API进行分析(语音情感识别)。我用它来录音但只有噪波保存在wave文件中。 我正在尝试将录制的音频(作为blob)发送到django api。然后在后端接收到它时,我将其保存为wav文件 我正在发送录制的音频,如下所示: navigator.mediaDevices.getUserMedia({audio:true}).then(stream => {audio_handler(

我正在尝试构建一个web应用程序,它将从浏览器中录制音频,并在每3秒后将录制的音频发送到django API进行分析(语音情感识别)。我用它来录音但只有噪波保存在wave文件中。

我正在尝试将录制的音频(作为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后端上另存为:

从django.http导入JsonResponse
输入波
def get_情绪(请求):
打印(request.FILES.get('data'))
audio_data=request.FILES.get('data'))
打印(类型(音频数据))
打印(音频数据大小)
音频=wave.open('test.wav','wb')
音频设置通道(1)
音频设置帧(1)
音频设置采样宽度(1)
音频设置帧率(16000)
blob=音频数据读取()
audio.writeframes(blob)#播放“test.wav”时只能听到噪音
返回JsonResponse({})
目前保存的音频文件中只有一些噪声,而我希望保存的wave audio文件的内容与录制时所说的音频内容相同

如果有其他方法可以做同样的事情,请提出建议(从浏览器录制音频并发送到django api,将其保存为音频文件)。


如果需要更多信息,请随时询问。谢谢大家!

Wav文件格式不支持Opus编解码器

对于Opus编解码器,您需要使用webm文件格式

所以你需要改变这个

新Blob(音频块,{'type':'audio/wav;codecs=opus'})

新Blob(音频块,{'type':'audio/webm;codecs=opus'})

新Blob(块,{'type':'audio/wav;codecs=MS_PCM'})//如果支持的话


确保要保存blob的文件与send的文件格式相同。

我遇到了同样的问题。我建议您在保存时将原始参数设置为音频,而不是硬编码随机数字:

        obj = wave.open(audio_data, 'r')
        audio = wave.open('/../test.wav', 'wb')
        audio.setnchannels(obj.getnchannels())
        audio.setnframes(obj.getnframes())
        audio.setsampwidth(obj.getsampwidth())
        audio.setframerate(obj.getframerate())
        blob = audio_data.read()
        audio.writeframes(blob)

这将设置您正在编写的音频的实际通道、帧、宽度等,而不会在.wav文件中引入任何噪声。确保您至少使用了
Django==1.8.19
那么问题出在哪里?你有错误吗?还有别的吗?如果你只解释你想要什么,而不解释发生了什么,那么我们只能猜测问题出在哪里。@dirkgroten不,没有错误。该文件被保存,但问题是wave文件只包含噪音,而不包含录音时所说的音频。因此,也许可以将其添加到您的问题中。你没这么说。尝试了wav(使用ms_pcm编解码器)和webm格式。但问题仍然是一样的。它仍然只是噪音。请让我知道您是否能够在本地录制该文件(运行mediarecorder并播放它的同一台电脑(wav/pcm、webm/opus)