Showing
1 changed file
with
40 additions
and
54 deletions
| 1 | -const recorder = require('node-record-lpcm16'); | 1 | +const express = require('express'); |
| 2 | - | 2 | +const multer = require('multer'); |
| 3 | -// Imports the Google Cloud client library | 3 | +const fs = require('fs'); |
| 4 | -const speech = require('@google-cloud/speech'); | 4 | +const upload = multer(); |
| 5 | - | 5 | +const app = express(); |
| 6 | - | 6 | +const port = 5501; |
| 7 | -// Creates a client | 7 | +app.use(express.static('./')); |
| 8 | -const client = new speech.SpeechClient(); | 8 | +async function testGoogleTextToSpeech(audioBuffer) { |
| 9 | - | 9 | + const speech = require('@google-cloud/speech'); |
| 10 | -/** | 10 | + const client = new speech.SpeechClient(); |
| 11 | - * TODO(developer): Uncomment the following lines before running the sample. | 11 | + const audio = { |
| 12 | - */ | 12 | + content: audioBuffer.toString('base64'), |
| 13 | -const encoding = 'LINEAR16'; | 13 | + }; |
| 14 | -const sampleRateHertz = 16000; | 14 | + const encoding = 'LINEAR16'; |
| 15 | -const languageCode = 'ko-KR'; | 15 | + const sampleRateHertz = 48000; |
| 16 | -const speechContexts = [{ | 16 | + const languageCode = 'ko-KR'; |
| 17 | + const speechContexts = [{ | ||
| 17 | phrases: [ | 18 | phrases: [ |
| 18 | - '$OOV_CLASS_ALPHA_SEQUENCE 는 $OOV_CLASS_ALPHA_SEQUENCE', '$OOV_CLASS_ALPHA_SEQUENCE 는 $OOV_CLASS_DIGIT_SEQUENCE', | 19 | + '$$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE', |
| 19 | - '$OOV_CLASS_ALPHA_SEQUENCE 는 $OOV_CLASS_ALPHA_SEQUENCE 보다 크다', | 20 | + '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 보다 크다', |
| 20 | - '$OOV_CLASS_ALPHA_SEQUENCE 는 $OOV_CLASS_ALPHA_SEQUENCE 보다 작다', | 21 | + '$OOV_CLASS_ALPHANUMERIC_SEQUENCE 는 $OOV_CLASS_ALPHANUMERIC_SEQUENCE 보다 작다', |
| 21 | - '$OOV_CLASS_ALPHA_SEQUENCE 는 $OOV_CLASS_DIGIT_SEQUENCE 보다 크다', | 22 | + 'for OOV_CLASS_ALPHA_SEQUENCE in range $OOV_CLASS_ALPHANUMERIC_SEQUENCE', |
| 22 | - '$OOV_CLASS_ALPHA_SEQUENCE 는 $OOV_CLASS_DIGIT_SEQUENCE 보다 작다', | ||
| 23 | - 'for OOV_CLASS_ALPHA_SEQUENCE in range $OOV_CLASS_DIGIT_SEQUENCE', | ||
| 24 | 'if', | 23 | 'if', |
| 25 | '이프', | 24 | '이프', |
| 26 | 'else if', | 25 | 'else if', |
| ... | @@ -38,9 +37,10 @@ const speechContexts = [{ | ... | @@ -38,9 +37,10 @@ const speechContexts = [{ |
| 38 | '조건문 선언' | 37 | '조건문 선언' |
| 39 | ], | 38 | ], |
| 40 | boost: 20 | 39 | boost: 20 |
| 41 | -}] | 40 | + }] |
| 42 | 41 | ||
| 43 | -const request = { | 42 | + const request = { |
| 43 | + audio: audio, | ||
| 44 | config: { | 44 | config: { |
| 45 | encoding: encoding, | 45 | encoding: encoding, |
| 46 | sampleRateHertz: sampleRateHertz, | 46 | sampleRateHertz: sampleRateHertz, |
| ... | @@ -49,33 +49,19 @@ const request = { | ... | @@ -49,33 +49,19 @@ const request = { |
| 49 | speechContexts: speechContexts | 49 | speechContexts: speechContexts |
| 50 | }, | 50 | }, |
| 51 | interimResults: false, // If you want interim results, set this to true | 51 | interimResults: false, // If you want interim results, set this to true |
| 52 | -}; | 52 | + }; |
| 53 | - | 53 | + const [response] = await client.recognize(request); |
| 54 | -// Create a recognize stream | 54 | + const transcription = response.results |
| 55 | -const recognizeStream = client | 55 | + .map(result => result.alternatives[0].transcript) |
| 56 | - .streamingRecognize(request) | 56 | + .join('\n'); |
| 57 | - .on('error', console.error) | 57 | + return transcription; |
| 58 | - .on('data', data => | 58 | +} |
| 59 | - process.stdout.write( | 59 | +app.post('/upload_sound', upload.any(), async (req, res) => { |
| 60 | - data.results[0] && data.results[0].alternatives[0] | 60 | + console.log("Getting text transcription.."); |
| 61 | - ? `Transcription: ${data.results[0].alternatives[0].transcript}\n` | 61 | + let transcription = await testGoogleTextToSpeech(req.files[0].buffer); |
| 62 | - : '\n\nReached transcription time limit, press Ctrl+C\n' | 62 | + console.log("Text transcription: " + transcription); |
| 63 | - ) | 63 | + res.status(200).send(transcription); |
| 64 | - ); | 64 | +}); |
| 65 | - | 65 | +app.listen(port, () => { |
| 66 | -// Start recording and send the microphone input to the Speech API. | 66 | + console.log(`Express server listening on port: ${port}...`); |
| 67 | -// Ensure SoX is installed, see https://www.npmjs.com/package/node-record-lpcm16#dependencies | 67 | +}); |
| 68 | -recorder | ||
| 69 | - .record({ | ||
| 70 | - sampleRateHertz: sampleRateHertz, | ||
| 71 | - threshold: 0, | ||
| 72 | - // Other options, see https://www.npmjs.com/package/node-record-lpcm16#options | ||
| 73 | - verbose: false, | ||
| 74 | - recordProgram: 'sox', // Try also "arecord" or "sox" | ||
| 75 | - silence: '1.0', | ||
| 76 | - }) | ||
| 77 | - .stream() | ||
| 78 | - .on('error', console.error) | ||
| 79 | - .pipe(recognizeStream); | ||
| 80 | - | ||
| 81 | -console.log('Listening, press Ctrl+C to stop.'); | ||
| ... | \ No newline at end of file | ... | \ No newline at end of file | ... | ... |
-
Please register or login to post a comment