首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >recorder.js到节点到azure说话人识别

recorder.js到节点到azure说话人识别
EN

Stack Overflow用户
提问于 2020-03-16 23:05:18
回答 1查看 180关注 0票数 1

我有一个浏览器应用程序,通过他们的麦克风记录用户的声音,并使用recorder.js导出到WAV文件。我认为将其转换为数据url并将其发布到node。然后我尝试将音频发送到Microsoft Azure Speaker Recognition API,但总是收到"Invalid audio Format: Not a WAVE file - no RIFF header“的回复。

有没有办法添加一个RIFF头,或者有没有什么关于recorder.js或者在base64之间来回转换的东西来删除这些头呢?有没有办法把它们加回去?

代码: INDEX.HTML

代码语言:javascript
复制
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)
            }
        })
    }
})

节点路由:

代码语言:javascript
复制
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:

代码语言:javascript
复制
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)
        })
    })
}
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2020-04-18 03:47:31

似乎问题实际上出在文件的发送方式上。我不知道为什么它在文章正文中以wav的形式发送,而不是在帖子中作为数据发送,但这是我的工作代码,如果它对任何人有帮助的话:

html:

我使用this answer作为html。它包括wav的编码。正如答案所示,我所做的唯一更改是发布到我的服务器,而不是直接发布到MS Azure服务。

节点路由:

这花了我一段时间,因为我无法让node看到我正在发送的文件。另外,我使用的是bodyParser,所以post请求的原始正文在我看到它之前已经被摆弄过了。这是我的post请求的路由:

代码语言:javascript
复制
  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
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/60708380

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档