2016-12-16 3 views
1

npm start 명령을 사용하여 명령 프롬프트에서 응용 프로그램을 실행할 때 제대로 작동합니다. 스피치 API의 결과를 반환합니다.google cloud speech가 전자 패키지에서 작동하지 않습니다.

binaryServer 및 binaryclient를 사용하여 오디오를 Google 클라우드 API로 스트리밍합니다.

전자 응용 프로그램 용 패키지를 만들면 모든 것이 작동하지만 음성 API에서 결과를 반환하지 않습니다. 여기

내 코드 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" 
    } 
} 

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

감사합니다

답변

0

어둠 속에서 (실제로는 문제가 될 수있는 binaryServer에 익숙하지 않은 채로) 어둠 속에서 한 발을 쏘아보십시오. 오디오 스트림이 실제로 어디에서 오는 지에 대해서도 조금 분명하지 않습니다.

전자 패키지 자체 버전의 V8. npm install을 실행하면 컴퓨터에 설치된 V8 버전의 로컬 바이너리 (로컬 버전)를 설치 (또는 컴파일하면서 컴파일)합니다. 하위 프로세스를 생성 할 때 동일한 로컬 버전을 사용합니다.

그러나 전자 앱을 패키징 할 때 전자 버전의 V8을 사용하여 프로세스를 생성하려고 시도 할 것이므로 이진 비 호환성이 발생합니다. 넣어

단순히 잠재적 인 솔루션

  • Sonus에에 [V8 버전]! = [V8의 전자 버전]

    는 전자 제공과 호환되는 당신

  • 다시 -compile dependencies with electron-recompile