我想使用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接受它
目前没有回答
相关问题 更多 >
编程相关推荐