Skip to content

Commit d8b1666

Browse files
docs: Add speech-to-text-to-redis example (#871)
Add speech-to-text-to-redis example
2 parents 71a0714 + 238cec3 commit d8b1666

File tree

2 files changed

+89
-1
lines changed

2 files changed

+89
-1
lines changed

examples/speech_to_text_microphone_input/package.json

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,9 +12,10 @@
1212
"license": "Apache-2.0",
1313
"dependencies": {
1414
"dotenv": "^4.0.0",
15+
"ibm-watson": "latest",
16+
"ioredis": "latest",
1517
"line-in": "^0.1.2",
1618
"mic": "^2.1.1",
17-
"ibm-watson": "latest",
1819
"wav": "^1.0.1"
1920
}
2021
}
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
// Adapted from other examples
2+
// Copyright (c) 2019 IBM
3+
//
4+
// This creates a redis list with the latest words picked up by watson speech to text
5+
// This is a great starting out point for microservices reacting to live speech data
6+
// Note: This deletes and populates the redis list multiple times a second, you may wish
7+
// to optimize that out depending on your use case.
8+
//
9+
// IBM Cloud Redis: https://www.ibm.com/cloud/databases-for-redis
10+
//
11+
// set environment variables: SPEECH_TO_TEXT_IAM_APIKEY and REDIS_CONN_URL
12+
13+
'use strict';
14+
var BUFFER_LENGTH = 100;
15+
16+
var REDIS_CONN_URL = process.env.REDIS_CONN_URL;
17+
var Redis = require('ioredis');
18+
19+
require('dotenv').config({ silent: true }); // optional, handy for local development
20+
var SpeechToText = require('ibm-watson/speech-to-text/v1');
21+
// var LineIn = require('line-in'); // the `mic` package also works - it's more flexible but requires a bit more setup
22+
var mic = require('mic');
23+
var wav = require('wav');
24+
25+
var speechToText = new SpeechToText({
26+
// pick up SPEECH_TO_TEXT_IAM_APIKEY env variable here
27+
});
28+
29+
// connect to "DB"
30+
var redis = new Redis(REDIS_CONN_URL);
31+
32+
// init buffer
33+
redis.del('speech-to-text-buffer');
34+
for (var i = 0; i < BUFFER_LENGTH; i++) {
35+
redis.lpush('speech-to-text-buffer', 'init');
36+
}
37+
38+
// var lineIn = new LineIn(); // 2-channel 16-bit little-endian signed integer pcm encoded audio @ 44100 Hz
39+
var micInstance = mic({
40+
rate: '48000',
41+
channels: '1',
42+
debug: false,
43+
});
44+
45+
var micInputStream = micInstance.getAudioStream();
46+
47+
var wavStream = new wav.Writer({
48+
sampleRate: 44100,
49+
channels: 2,
50+
});
51+
52+
var recognizeStream = speechToText.recognizeUsingWebSocket({
53+
content_type: 'audio/wav',
54+
interim_results: true,
55+
inactivity_timeout: -1,
56+
objectMode: true,
57+
max_alternatives: 1,
58+
word_alternatives_threshold: 0.9,
59+
speaker_labels: true,
60+
});
61+
62+
// lineIn.pipe(wavStream);
63+
micInputStream.pipe(wavStream);
64+
65+
wavStream.pipe(recognizeStream);
66+
67+
// recognizeStream.pipe(process.stdout);
68+
recognizeStream.on('data', function(message) {
69+
console.log(message);
70+
71+
try {
72+
var transcript = message.results[0].alternatives[0].transcript;
73+
console.log(transcript);
74+
redis.del('speech-to-text-buffer');
75+
transcript.split(' ').forEach(function(word) {
76+
// console.log(word);
77+
// redis.rpop('speech-to-text-buffer');
78+
redis.rpush('speech-to-text-buffer', word);
79+
});
80+
} catch (error) {
81+
console.log(error);
82+
}
83+
});
84+
85+
console.log('Recording, press any key to exit');
86+
87+
micInstance.start();

0 commit comments

Comments
 (0)