Creé un objeto blob de tipo .wav usando la grabadora de medios. Estoy tratando de enviar los datos como. Soy nuevo en blob, así que mi pregunta podría ser estúpida.
Aquí está el código:
function makeLink(){ let blob = new Blob(chunks, {type: media.type }) , Url = URL.createObjectURL(blob) , li = document.createElement('li') , mt = document.createElement(media.tag) , hf = document.createElement('a'); mt.controls = true; mt.src = Url; hf.href = Url; hf.download = `${counter++}${media.ext}`; hf.innerHTML = `donwload ${hf.download}`; //processing data jQuery(document).ready(function(){ let x='test' $.ajax({ type:'GET', url:'/answer/voice', data:{ audio: window.btoa(blob) }, success:function(result) { $("#chatbox").append('<p class ="userText"><audio style="background-color:white;" controls> <source src="' + Url+ '" type="audio/wav"></audio></p>'); $("#chatbox").append('<p class ="botText"><span>' + result.emotion+ '</span></p>'); $("#textInput").val("") }, error:function(result){ alert('sorry an error occured'); } })}); }
y la parte del matraz:
@app.route('/answer/voice', methods=['GET']) def answer_voice(): blob=request.args.get("audio") print(blob) blob =base64.b64decode(blob) print(" decoded : ") print(blob) result=get_audio_sentiments(blob) return jsonify({'emotion':result })La función de obtención de opinión de audio es una función que acepta el tipo de archivo wav, por lo que necesito convertir ese blob en un archivo wav real. Intenté decodificarlo nuevamente enviando los datos antes de ponerlos en blob enviándolos usando formdata pero no tengo experiencia allí.
function makeLink(){ let blob = new Blob(chunks, {type: media.type }) , Url = URL.createObjectURL(blob) , li = document.createElement('li') , mt = document.createElement(media.tag) , hf = document.createElement('a'); mt.controls = true; mt.src = Url; hf.href = Url; hf.download = `${counter++}${media.ext}`; hf.innerHTML = `donwload ${hf.download}`; let formData = new FormData(); formData.append(audio, blob, 'audio.wav'); let x='test' $.ajax({ type:'GET', url:'/answer/voice', data: formData, contentType: false, processData: false, success:function(result) { $("#chatbox").append('<p class ="userText"><audio style="background-color:white;" controls> <source src="' + Url+ '" type="audio/wav"></audio></p>'); $("#chatbox").append('<p class ="botText"><span>' + result.emotion+ '</span></p>'); $("#textInput").val("") }, error:function(result){ alert('sorry an error occured'); } }); } @app.route('/answer/voice', methods=['POST']) def answer_voice(): blob=request.files["audio"] print(blob) with open(blob, 'r') as f: result=get_audio_sentiments(f.read()) return jsonify({'emotion':result })La respuesta de @Musa es correcta. También descubrí esta solución:
var xhr=new XMLHttpRequest(); var fd=new FormData(); fd.append("audio_data",blob, "output.wav"); xhr.open("POST","/answer/voice",true); xhr.send(fd); //processing data // jQuery(document).ready(function(){ xhr.onreadystatechange = function() { if (xhr.readyState === 4) { resultats = this.responseText var results=JSON.parse(resultats); console.log(typeof results); $("#chatbox").append('<p class ="userText"><audio style="background-color:white;" controls> <source src="' + Url+ '" type="audio/wav"></audio></p>'); let userHtml = '<p class="userText"><span>' +results.question + '</span></p>'; $("#chatbox").append(userHtml); $("#chatbox").append('<p class ="botText"><span>' +results.answerered+ ' '+ results.emotion+ '</span></p>'); $("#textInput").val("") } } XMLHttpRequest y resolvió mi problema