【问题标题】:How to handle encoded base64 audio and resend to google?如何处理编码的 base64 音频并重新发送到谷歌?
【发布时间】:2018-07-31 23:09:08
【问题描述】:

我使用麦克风从浏览器录制音频,编码 base64,然后发送到我的 node.js 应用程序,该应用程序假设将 base64 数据发送到谷歌语音到文本 api,然后向我发送转录。我对如何处理来自发布响应的数据然后将其发送给谷歌感到困惑。

这是我到目前为止的客户端 ajax 帖子:

var reader = new window.FileReader();
      reader.readAsDataURL(blob);
      reader.onloadend = function() {

        var fd = new FormData();
        base64data = reader.result;
        fd.append('rawaudio', base64data);
        console.log(base64data)
        $.ajax({
          type: 'POST',
          url: 'http://localhost:3000/send',
          data: fd,
          cache: false,
          processData: false,
          contentType: false,
          enctype: 'multipart/form-data'
        }).done(function(err,data) {
          console.log(data)
          console.log(err)
        })
      }

表达 node.js

app.post('/send',(req,res)=>{
console.log(req.body.rawaudio)
 })

我得到未定义的

console.log(req.body.rawaudio)

但我知道数据被发送是因为

console.log(base64data)

已定义

【问题讨论】:

  • b64 字符串采用 PCM 音频作为一种发布方式,与在客户端进行编码、发布二进制文件、然后将 b64 字符串发布到谷歌相比效率低下云...意识到这不是问题...
  • ans 可以帮助您从 post.body 中取出非常大的字符串。 stackoverflow.com/questions/35418921/… 。我刚刚为云语音实现了节点包装器,但使用了差异方法.. 从麦克风,我使用“record.js”作品包编码为 16K 作品。我获取 POST 的那个 blob 来表达中间件 rawbodyParser 以从 POST 中获取二进制正文。然后将其转换为服务器上的 b64 字符串,将 POST 包装到 google api 并将其响应返回给我的客户端。

标签: javascript node.js express base64


【解决方案1】:

将 wav 导出到 blob,然后将其发送到 NodeJS 并将其保存到 DB 以供进一步使用。 (在我的例子中是 Mongo)

function sendToBackEnd(blob){
var blob = blob;
var reader = new FileReader();
reader.readAsDataURL(blob);

reader.onloadend = function() {
blob = reader.result.toString();
console.log(blob)

var fd = new FormData();
fd.append('fname', 'test.wav');
fd.append('data', blob);
// fd.append('data', blob);
$.ajax({
    url: '/recordings',
    type: 'POST',
    data: fd,
    processData: false,
    contentType: false
})
}

}

然后在您的 NodeJ 方面:

app.post('/recordings',function(req,res){
var form = new multiparty.Form();
form.parse(req, function(err, file) {
    if (err){
        console.log(err)
    }
    var data=file.data;
    newRecording={content:data}
    Recording.create(newRecording,function(err,Recording){
        if (err){
            console.log(err)
        }else{
            console.log(Recording)
        }
    });

});

});

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 2019-12-23
    • 1970-01-01
    • 2018-07-26
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-03-16
    相关资源
    最近更新 更多