如何将javascript发送到Django服务器的blob数据转换为语音识别模块

2024-09-27 21:30:20 发布

您现在位置:Python中文网/ 问答频道 /正文

我想使用Javascript在客户端录制一些音频,并将其发送到Django服务器 下面是我的js代码,用于记录数据并将其发送到服务器


function start_recording(){
                    navigator.mediaDevices.getUserMedia({ audio: true })
                .then(stream => {
                    const mediaRecorder = new MediaRecorder(stream);
                    console.log(mediaRecorder)
                    mediaRecorder.start();


                    const audioChunks = [];
                    mediaRecorder.addEventListener("dataavailable", event => {
                    audioChunks.push(event.data);
                    });

                    mediaRecorder.addEventListener("stop", () => {
                    console.log("stop is called")
                    const audioBlob = new Blob(audioChunks);

                    });

                    //
                    
                    var stop_button =document.getElementById('stop_button');
                    stop_button.addEventListener('click',function(){
                        console.log(mediaRecorder,'stopped')
                        mediaRecorder.stop()


                    })
                });

            }
function GetAudio(audioBlob){
                console.log('>>>>>>>>get audioblob',audioBlob)
                const audioUrl = URL.createObjectURL(audioBlob);

                var form = new FormData();
                form.append('audio', audioBlob);
                //console.log(wavfromblob)
                let csrftoken = getCookie('csrftoken');
                // var audio_base64;

                $.ajax({
                            url:"/get_sound/",
                            headers: {'X-CSRFToken':csrftoken},
                            type:'POST',
                            processData:false,
                            contentType:false,
                            //contentType:'application/json; charset=UTF-8',
                            data:form,
                            //data:JSON.stringify({'hello':'hi','audio_base_64':audio_base64}),
                            error: function (request, status, error) {
                                alert(error);
                            }
                        }).done(function(response){
                            if(response=="true"){
                                console.log("true");
                                alert("data sent")
                            }else{
                                console.log("false");
                                alert("data was not recieved")
                                
             
                

                        
            }


这是我在views.py中的函数代码

def get_sound(request):
    print("get sound was called")
    if request.method == 'POST':

        print(request.FILES)
        audio_blob= request.FILES['audio']
        file_obj=io.BytesIO()
        file_obj.write(audio_blob.read())
        file_obj.seek(0)
        print(file_obj)
        recognizer = sr.Recognizer()

        with sr.AudioFile(file_obj) as source:
            print("loading")
            recognizer.adjust_for_ambient_noise(source)
            audio = recognizer.listen(source)
            #print("Recording for 4 seconds")
            #recorded_audio = recognizer.listen(source, timeout=4)
            print("Done recording")

        # ''' Recorgnizing the Audio '''
        try:
            print("Recognizing the text")
            text = recognizer.recognize_google(
                    audio, 
                    language="en-US"
                )
            print("Decoded Text : {}".format(text))

        except Exception as ex:
            print(ex)

    return render(request,'get_sound.html')

它返回以下错误: ValueError:音频文件无法读取为PCM WAV、AIFF/AIFF-C或本机FLAC;检查文件是否损坏或采用其他格式

我已经搜索到wave模块由AudioFile使用,它只支持上述类型(PCM WAV、AIFF/AIFF-C或本机FLAC)

如何将此wav数据转换为pcm wav。或者是否有其他方法将数据从客户端发送到服务器

编辑:我将数据编码到base64中,然后发送,但该方法不起作用。因此,我以javaascript Formdata发送音频blob,并在服务器上使用request.FILES接受它


Tags: 服务器logobjdatagetrequestfunctionaudio

热门问题