为了账号安全,请及时绑定邮箱和手机立即绑定

recorder.js 到节点以进行 azure 说话人识别

recorder.js 到节点以进行 azure 说话人识别

白衣非少年 2022-05-22 16:06:30
我有一个浏览器应用程序,它通过麦克风记录用户的声音并使用 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)

  })

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


查看完整回答
反对 回复 2022-05-22
  • 1 回答
  • 0 关注
  • 185 浏览
慕课专栏
更多

添加回答

举报

0/150
提交
取消
微信客服

购课补贴
联系客服咨询优惠详情

帮助反馈 APP下载

慕课网APP
您的移动学习伙伴

公众号

扫描二维码
关注慕课网微信公众号