【问题标题】:NodeJs Google Speech API StreamingNodeJs 谷歌语音 API 流
【发布时间】:2017-02-06 12:14:40
【问题描述】:

我一直在尝试设置用于将实时音频流式传输到 Google Speech API 的节点服务,但我遇到了一个我认为可能与身份验证相关的问题。

该服务是使用 Express 和 BinaryServer 在节点中编写的,我接收数据没有任何问题(并且已经能够将其保存到本地磁盘,但该部分代码不在下面的示例中),但是当我尝试提交到 Google API 时,我没有收到任何回复(尽管如果我从请求中删除 keyFileName,那么我会收到“错误:无法加载默认凭据”,这很公平,因为我在外部运行GCE)

var express = require("express");
var app = express();
var port = 54180;
var BinaryServer = require('binaryjs').BinaryServer;

var server = BinaryServer({
    port: port
});

app.listen(port, function () {
    console.log('server open on port ' + port);
});

binaryServer = BinaryServer({
    port: 9001
});

binaryServer.on('connection', function (client) {
    console.log('Binary Server connection started');

    client.on('stream', function (stream, meta) {
        console.log('>>>Incoming audio stream');

        var speech = require('@google-cloud/speech')({
            projectId: 'MYPROJECT-1234'
                //keyFilename: '/config/KeyFile.json'
        });

        const request = {
            config: {
                encoding: 'LINEAR16',
                sampleRate: 16000
            },
            singleUtterance: false,
            interimResults: true
        };

        // Create a recognize stream
        const recognizeStream = speech.createRecognizeStream(request)
            .on('error', function (error) {
                console.log('Error');
                console.log(error)
            })
            .on('data', function (data) {
                console.log('Data');
                console.log(data);
            });

        // Send the microphone input to the Speech API
        stream.pipe(recognizeStream);

        stream.on('end', function () {
            fileWriter.end();
            recognizeStream.end();
            console.log('||| Audio stream ended');
        });
    });
});

我也承认这是我第一次尝试重新连接到另一个 API,所以可能是我把那部分搞砸了,但默认凭据消息让我认为它是正常的,并且它只是拒绝我的请求而不返回理由。

谁能看出我哪里错了?

干杯。

【问题讨论】:

标签: node.js google-speech-api


【解决方案1】:

有关此问题的答案,请参阅 Shiv 的问题

NodeJS Convert Int16Array binary Buffer to LINEAR16 encoded raw stream for Google Speech API

他给出的代码答案是

我们可以将缓冲区直接写入从创建的识别器流中 谷歌语音如下:

const recognizer = getGoogleSpeechStreamRecognizer();

recognizer.write(int16ArrayBuffer)

【讨论】:

    猜你喜欢
    • 2017-03-08
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2014-12-16
    • 1970-01-01
    • 1970-01-01
    • 2023-04-09
    • 1970-01-01
    相关资源
    最近更新 更多