gpt4 book ai didi

javascript - recorder.js 到节点到 azure 说话者识别

转载 作者:行者123 更新时间:2023-12-03 04:04:25 24 4
gpt4 key购买 nike

我有一个浏览器应用程序,它通过麦克风记录用户的声音并使用 recorder.js 导出到 WAV 文件。我认为将其转换为数据 url 并将其发布到节点。然后,我尝试将音频发送到 Microsoft Azure 扬声器识别 API,但总是收到“无效的音频格式:不是 WAVE 文件 - 没有 RIFF header ”。

有没有办法添加 RIFF header ,或者是否有有关 recorder.js 的内容或与 Base64 之间的转换来删除这些 header ?有没有办法将它们添加回来?

代码:索引.HTML

rec.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)
})
})

添加声音到配置文件:

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)
})
})
}

最佳答案

看来问题实际上是文件发送方式的问题。我不知道为什么如果它在帖子正文中作为 wav 发送,而不是作为帖子中的数据发送,那么它会起作用,但这是我的工作代码,如果它对将来的任何人有帮助的话:

html:

我用了this answer对于 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)
})

我希望这对某人有帮助,因为这两个部分我花了太长时间才解决!

关于javascript - recorder.js 到节点到 azure 说话者识别,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/60708380/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com