2

当我使用 npm start 命令从命令提示符运行应用程序时,它运行良好。它从语音 api 返回结果。

我正在使用 binaryServer 和 binaryclient 将音频流式传输到谷歌云 API。

当我为电子应用程序创建包时,一切正常,但它没有从语音 api 返回结果。

这是我的代码片段:Package.json

{
  "name": "test",
  "version": "1.0.0",
  "description": "test Web Server",
  "main": "main.js",
  "scripts": {  
    "start": "electron main.js"
  }, 
   "devDependencies": {   
    "electron": "^1.4.12"   
  },
  "dependencies": {    
    "binaryjs": "^0.2.1",
    "connect": "^3.3.4",
    "biased-opener": "^0.2.8",
    "serve-static": "^1.9.1",
    "uaparser": "^0.0.2", 
    "@google-cloud/speech" : "^0.5.0"
  }
}

这是我的 main.js

app.on('ready', function () { 
    load_app();

});

 var workerProcess = child_process.spawn('node', __dirname + '/binaryServer.js');

    workerProcess.stdout.on('data', function (data) {
        console.log('stdout: ' + data);
    });

    workerProcess.stderr.on('data', function (data) {   
        console.log('stderr: ' + data);
    });

    workerProcess.on('close', function (code) {

        console.log('child process exited with code ' + code);
    });

    processes.push(workerProcess);

function load_app () { 
    // Launches the browser window
    mainWindow = new BrowserWindow({ width: 1080, height: 1920 });
    // Load just launched server in browser window


    mainWindow.loadURL("http://localhost:" + config.port);

    if (config.devMode) {
        mainWindow.webContents.openDevTools();
    }
    else {
        mainWindow.setFullScreen(true);
    }

}

这是我的二进制服务器

var binaryServer = require('binaryjs').BinaryServer,
    https = require('http'),
    connect = require('connect'),
    serveStatic = require('serve-static');
var config = require('./config');

var server = connect()
     .use(serveStatic(__dirname));

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

httpServer = https.createServer(server);
httpServer.timeout = 0;
httpServer.listen(config.port);

var binarySer = binaryServer({ server: httpServer });

console.log("server pid" + process.pid);

binarySer.on('connection', function (client) {
    console.log("new connection...");



    client.on('stream', function (stream, meta) {

        var options = {
            config: {
                encoding: 'LINEAR16',
                sampleRate: meta.sampleRate,
                languageCode: "en-IN"

            },
            singleUtterance: false,
            interimResults: true,
            verbose: true

        };
        // Create a recognize stream
        const recognizeStream = speech.createRecognizeStream(options)
           .on('error', console.error)
          .on('data', function (data) { if (stream.writable && !stream.destroyed) stream.write(data) }); // send data to client

        if (recognizeStream.writable && !recognizeStream.destroyed && stream.readable && !stream.destroyed)
            stream.pipe(recognizeStream);  // pipe audio to cloud speech

    });

    client.on('close', function () {
        console.log("Connection Closed");
    });
});

谢谢你的帮助

4

1 回答 1

0

在这里在黑暗中拍摄(对 binaryServer 不太熟悉,这实际上可能是问题所在)。我也有点不清楚音频流的实际来源:

Electron 打包了自己的 V8 版本。当您运行npm install它时,它将安装(或即时编译)针对安装在您的机器(本地版本)上的 V8 版本的本机二进制文件。当您生成子进程时,它使用相同的本地版本。

然而,当你打包你的电子应用程序时,它会尝试使用 Electron 的 V8 版本生成进程,并且会出现二进制不兼容问题。

简单地说 [您的 V8 版本] != [Electron 的 V8 版本]

寻找潜在的解决方案

于 2016-12-31T05:12:53.203 回答