@@ -19,23 +19,23 @@ var path = require('path');
19
19
var grpc = require ( 'grpc' ) ;
20
20
var googleProtoFiles = require ( 'google-proto-files' ) ;
21
21
var googleAuth = require ( 'google-auto-auth' ) ;
22
+ var Transform = require ( 'stream' ) . Transform ;
22
23
23
24
// [START proto]
24
25
var PROTO_ROOT_DIR = googleProtoFiles ( '..' ) ;
25
- var PROTO_FILE_PATH = googleProtoFiles ( 'cloud' , 'speech' , 'v1' , 'cloud_speech.proto' ) ;
26
26
27
27
var protoDescriptor = grpc . load ( {
28
28
root : PROTO_ROOT_DIR ,
29
- file : path . relative ( PROTO_ROOT_DIR , PROTO_FILE_PATH )
29
+ file : path . relative ( PROTO_ROOT_DIR , googleProtoFiles . speech . v1beta1 )
30
30
} , 'proto' , {
31
31
binaryAsBase64 : true ,
32
32
convertFieldsToCamelCase : true
33
33
} ) ;
34
- var speechProto = protoDescriptor . google . cloud . speech . v1 ;
34
+ var speechProto = protoDescriptor . google . cloud . speech . v1beta1 ;
35
35
// [END proto]
36
36
37
37
// [START authenticating]
38
- function getSpeechService ( callback ) {
38
+ function getSpeechService ( host , callback ) {
39
39
var googleAuthClient = googleAuth ( {
40
40
scopes : [
41
41
'https://www.googleapis.com/auth/cloud-platform'
@@ -53,72 +53,60 @@ function getSpeechService (callback) {
53
53
) ;
54
54
55
55
console . log ( 'Loading speech service...' ) ;
56
- var stub = new speechProto . Speech ( 'speech.googleapis.com' , credentials ) ;
56
+ var stub = new speechProto . Speech ( host , credentials ) ;
57
57
return callback ( null , stub ) ;
58
58
} ) ;
59
59
}
60
60
// [END authenticating]
61
61
62
- // [START construct_request]
63
- function getAudioFile ( inputFile , callback ) {
64
- fs . readFile ( inputFile , function ( err , audioFile ) {
65
- if ( err ) {
66
- return callback ( err ) ;
67
- }
68
- console . log ( 'Got audio file!' ) ;
69
- return callback ( null , audioFile ) ;
70
- } ) ;
71
- }
72
- // [END construct_request]
73
-
74
- function main ( inputFile , callback ) {
75
- var audioFile ;
76
-
62
+ function main ( inputFile , host , callback ) {
77
63
async . waterfall ( [
78
64
function ( cb ) {
79
- getAudioFile ( inputFile , cb ) ;
80
- } ,
81
- function ( _audioFile , cb ) {
82
- audioFile = _audioFile ;
83
- getSpeechService ( cb ) ;
65
+ getSpeechService ( host , cb ) ;
84
66
} ,
85
67
// [START send_request]
86
68
function sendRequest ( speechService , cb ) {
87
69
console . log ( 'Analyzing speech...' ) ;
88
70
var responses = [ ] ;
89
- var call = speechService . recognize ( ) ;
71
+ var call = speechService . streamingRecognize ( ) ;
90
72
91
73
// Listen for various responses
92
74
call . on ( 'error' , cb ) ;
93
75
call . on ( 'data' , function ( recognizeResponse ) {
94
76
if ( recognizeResponse ) {
95
77
responses . push ( recognizeResponse ) ;
78
+ if ( recognizeResponse . results && recognizeResponse . results . length ) {
79
+ console . log ( JSON . stringify ( recognizeResponse . results , null , 2 ) ) ;
80
+ }
96
81
}
97
82
} ) ;
98
83
call . on ( 'end' , function ( ) {
99
84
cb ( null , responses ) ;
100
85
} ) ;
101
86
102
87
// Write the initial recognize reqeust
103
- call . write ( new speechProto . RecognizeRequest ( {
104
- initialRequest : new speechProto . InitialRecognizeRequest ( {
105
- encoding : 'LINEAR16' ,
106
- sampleRate : 16000 ,
88
+ call . write ( {
89
+ streamingConfig : {
90
+ config : {
91
+ encoding : 'LINEAR16' ,
92
+ sampleRate : 16000
93
+ } ,
107
94
interimResults : false ,
108
- continuous : false ,
109
- enableEndpointerEvents : false
110
- } )
111
- } ) ) ;
112
-
113
- // Write an audio request
114
- call . write ( new speechProto . RecognizeRequest ( {
115
- audioRequest : new speechProto . AudioRequest ( {
116
- content : audioFile
117
- } )
118
- } ) ) ;
95
+ singleUtterance : false
96
+ }
97
+ } ) ;
119
98
120
- // Signal that we're done writing
121
- call . end ( ) ;
99
+ var toRecognizeRequest = new Transform ( { objectMode : true } ) ;
100
+ toRecognizeRequest . _transform = function ( chunk , encoding , done ) {
101
+ done ( null , {
102
+ audioContent : chunk
103
+ } ) ;
104
+ } ;
105
+
106
+ // Stream the audio to the Speech API
107
+ fs . createReadStream ( inputFile )
108
+ . pipe ( toRecognizeRequest )
109
+ . pipe ( call ) ;
122
110
}
123
111
// [END send_request]
124
112
] , callback ) ;
@@ -127,11 +115,12 @@ function main (inputFile, callback) {
127
115
// [START run_application]
128
116
if ( module === require . main ) {
129
117
if ( process . argv . length < 3 ) {
130
- console . log ( 'Usage: node recognize_streaming <inputFile>' ) ;
118
+ console . log ( 'Usage: node recognize_streaming <inputFile> [speech_api_host] ' ) ;
131
119
process . exit ( ) ;
132
120
}
133
121
var inputFile = process . argv [ 2 ] ;
134
- main ( inputFile , console . log ) ;
122
+ var host = process . argv [ 3 ] ;
123
+ main ( inputFile , host || 'speech.googleapis.com' , console . log ) ;
135
124
}
136
125
// [END run_application]
137
126
0 commit comments