2016-12-16 3 views
1

Wenn ich die Anwendung von der Eingabeaufforderung mit npm Startbefehl ausführen, funktioniert es gut. Es gibt das Ergebnis aus der Sprach-API zurück.google cloud rede funktioniert nicht in elektron Paket

Ich benutze BinaryServer und Binaryclient, um Audio zu Google Cloud API zu streamen.

Wenn ich Paket für die Elektron-Anwendung erstellen, funktioniert alles, aber es gibt das Ergebnis von der Sprach-API nicht zurück.

Hier sind meine Code Snippe: 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" 
    } 
} 

Hier ist meine 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); 
    } 

} 

hier ist mein binären Server

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"); 
    }); 
}); 

Vielen Dank für Ihre Hilfe

Antwort

0

Hier eine Aufnahme im Dunkeln machen (ohne viel Vertrautheit mit binaryServer, was realistischerweise das Problem sein könnte). Ich bin auch ein wenig unklar, woher der Audio-Stream tatsächlich stammt:

Electron Packages seine eigene Version von V8. Wenn Sie npm install ausführen, werden die nativen Binärdateien für die Version von V8, die auf Ihrem Computer installiert sind (lokale Version), installiert (oder kompiliert). Wenn Sie den Kindprozess spawnen, verwendet er dieselbe lokale Version.

Wenn Sie jedoch Ihre Elektronen-App packen, wird es versuchen, den Prozess mit der Version von V8 von Electron zu erzeugen, und es wird binäre Inkompatibilitäten geben.

Einfach gesagt [Ihre Version von V8]! = [Electron Version von V8]

Auf potenzielle Lösungen

Verwandte Themen