我有一个浏览器应用程序,它通过麦克风记录用户的声音并使用 recorder.js 导出到 WAV 文件。我认为将其转换为数据 url 并将其发布到节点。然后我尝试将音频发送到 Microsoft Azure Speaker Recognition API,但我总是得到“无效的音频格式:不是 WAVE 文件 - 没有 RIFF 标头”。有没有办法添加 RIFF 标头,或者是否有关于 recorder.js 或转换到 base64 和从删除这些标头的 base64 的内容?有没有办法重新添加它们?代码:INDEX.HTMLrec.exportWAV(function (blob) { var reader = new window.FileReader(); reader.readAsDataURL(blob); reader.onloadend = function () { base64 = reader.result; console.log(base64) $.ajax({ type: "POST", url: '/addVoiceToProfile', data: { userId: '', voiceId: "XXX-XXX", voice: base64, sampleRate: audioContext.sampleRate / 1000 }, success: function (results) { console.log(results) } }) }})节点路线:app.post('/addVoiceToProfile', function(req, res){ var voicedata = req.body.voice; var base64Data = voicedata.replace(/^data:([A-Za-z-+/]+);base64,/, ''); addVoicesToProfile(base64Data, req.body.voiceId).then(function(results){ res.send(results) })})addVoicesToProfile:function addVoicesToProfile(voice, id, user){ return new Promise(function (resolve, reject) { var url = AzureParameters.endPoint+"/spid/v1.0/verificationProfiles/"+id+"/enroll"; request({ url:url, headers:{'Content-Type':'audio/wave', 'Ocp-Apim-Subscription-Key':AzureParameters.key}, body: Buffer.from(voice, 'base64').toString('binary'), method: "POST", json: true }, function(err, response, body){ if(err) return reject(err); return resolve(body) }) })}
1 回答
qq_花开花谢_0
TA贡献1835条经验 获得超7个赞
似乎问题实际上是发送文件的方式。我不知道如果它在帖子正文中作为 wav 发送,而不是作为帖子中的数据发送,它为什么会起作用,但如果它对将来的任何人有帮助,这是我的工作代码:
html:
我将此答案用于html。它包括 wav 的编码。正如答案所示,我所做的唯一更改是发布到我的服务器,而不是直接发布到 MS Azure 服务。
节点路由:
这花了我一段时间,因为我无法让节点看到我正在发送的文件。此外,我正在使用 bodyParser,因此在我看到它之前,原始请求的原始正文被摆弄了。这是我发布请求的路线:
app.post('/uploadAudio', function (req, res, next) {
var data = new Buffer('');
req.on('data', function (chunk) {
data = Buffer.concat([data, chunk]);
});
req.on('end', function () {
req.rawBody = data;
next();
});
}, function (req, res) {
addVoicesToProfile(req.rawBody)
})
我希望这对某人有所帮助,因为这两个部分都花了我太长时间才能解决!
添加回答
举报
0/150
提交
取消
