modify encoding before sending to AWS
This commit is contained in:
parent
87c8a4618e
commit
88267ddca0
3 changed files with 61 additions and 15 deletions
|
@ -17,15 +17,14 @@
|
||||||
|
|
||||||
const {
|
const {
|
||||||
Writable,
|
Writable,
|
||||||
Transform,
|
|
||||||
PassThrough,
|
|
||||||
} = require('stream');
|
} = require('stream');
|
||||||
const GoogleSpeech = require('@google-cloud/speech');
|
const GoogleSpeech = require('@google-cloud/speech');
|
||||||
const {
|
const {
|
||||||
TranscribeStreamingClient,
|
TranscribeStreamingClient,
|
||||||
StartStreamTranscriptionCommand,
|
StartStreamTranscriptionCommand,
|
||||||
} = require('@aws-sdk/client-transcribe-streaming');
|
} = require('@aws-sdk/client-transcribe-streaming');
|
||||||
const { config } = require('process');
|
const fs = require('fs');
|
||||||
|
const { WaveFile } = require('wavefile');
|
||||||
|
|
||||||
/*
|
/*
|
||||||
* For speech provider implementer.
|
* For speech provider implementer.
|
||||||
|
@ -406,12 +405,13 @@ class AWSProvider extends Writable {
|
||||||
|
|
||||||
console.debug(process.env.AWS_SECRET_KEY_ID)
|
console.debug(process.env.AWS_SECRET_KEY_ID)
|
||||||
|
|
||||||
this.stream = new TransformStream();
|
this.stream = new TransformStream({ highWaterMark: 1 * 1024 });
|
||||||
this.readStream = this.stream.readable.getReader();
|
this.readStream = this.stream.readable.getReader({ highWaterMark: 1 * 1024 });
|
||||||
this.writeStream = this.stream.writable;
|
this.writeStream = this.stream.writable;
|
||||||
|
|
||||||
this.recognizeStream = null;
|
this.recognizeStream = null;
|
||||||
|
|
||||||
|
this.fullStream = [];
|
||||||
|
|
||||||
console.log(this.writeStream);
|
console.log(this.writeStream);
|
||||||
}
|
}
|
||||||
|
@ -426,11 +426,16 @@ class AWSProvider extends Writable {
|
||||||
}
|
}
|
||||||
|
|
||||||
_write(chunk, encoding, callback) {
|
_write(chunk, encoding, callback) {
|
||||||
this.recognizeStream.write(chunk);
|
this.fullStream.push(chunk);
|
||||||
|
|
||||||
// this.readStream.read().then((res) => {
|
const wav = new WaveFile();
|
||||||
// console.log(res)
|
|
||||||
// })
|
wav.fromScratch(1, 8000, '8m', chunk);
|
||||||
|
wav.fromMuLaw();
|
||||||
|
|
||||||
|
wav.toSampleRate(16000);
|
||||||
|
|
||||||
|
this.recognizeStream.write(wav.data.samples);
|
||||||
|
|
||||||
callback();
|
callback();
|
||||||
}
|
}
|
||||||
|
@ -472,12 +477,11 @@ class AWSProvider extends Writable {
|
||||||
|
|
||||||
async function* audioStream() {
|
async function* audioStream() {
|
||||||
for await (const chunk of audioSource()) {
|
for await (const chunk of audioSource()) {
|
||||||
console.debug("CHUNKING");
|
|
||||||
yield {AudioEvent: {AudioChunk: chunk.value}};
|
yield {AudioEvent: {AudioChunk: chunk.value}};
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
audioStream().next().then(res => console.debug(res.value.AudioEvent.AudioChunk));
|
// audioStream().next().then(res => console.debug(res.value.AudioEvent.AudioChunk));
|
||||||
|
|
||||||
// console.debug('AUDIO');
|
// console.debug('AUDIO');
|
||||||
// this.audioStream().next().then(res => console.debug(res));
|
// this.audioStream().next().then(res => console.debug(res));
|
||||||
|
@ -486,16 +490,27 @@ class AWSProvider extends Writable {
|
||||||
this.param = {
|
this.param = {
|
||||||
LanguageCode: this.LanguageCode,
|
LanguageCode: this.LanguageCode,
|
||||||
MediaEncoding: this.MediaEncoding,
|
MediaEncoding: this.MediaEncoding,
|
||||||
MediaSampleRateHertz: 8000,
|
MediaSampleRateHertz: 16000,
|
||||||
AudioStream: audioStream(),
|
AudioStream: audioStream(),
|
||||||
}
|
}
|
||||||
|
|
||||||
const command = new StartStreamTranscriptionCommand(this.param);
|
this.command = new StartStreamTranscriptionCommand(this.param);
|
||||||
|
|
||||||
this.client.send(command).then(async (res) => {
|
this.client.send(this.command).then(async (res) => {
|
||||||
for await (const event of res.TranscriptResultStream) {
|
for await (const event of res.TranscriptResultStream) {
|
||||||
console.debug(event);
|
if (event.TranscriptEvent) {
|
||||||
|
const results = event.TranscriptEvent.Transcript.Results;
|
||||||
|
// Print all the possible transcripts
|
||||||
|
results.map((result) => {
|
||||||
|
(result.Alternatives || []).map((alternative) => {
|
||||||
|
const transcript = alternative.Items.map((item) => item.Content).join(" ");
|
||||||
|
console.log(transcript);
|
||||||
|
});
|
||||||
|
});
|
||||||
|
}
|
||||||
};
|
};
|
||||||
|
}).catch((err) => {
|
||||||
|
console.debug(err);
|
||||||
})
|
})
|
||||||
return;
|
return;
|
||||||
|
|
||||||
|
@ -510,6 +525,19 @@ class AWSProvider extends Writable {
|
||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
const buffer = Buffer.concat(this.fullStream);
|
||||||
|
console.debug(buffer);
|
||||||
|
|
||||||
|
const wav = new WaveFile();
|
||||||
|
|
||||||
|
wav.fromScratch(1, 8000, '8m', buffer);
|
||||||
|
wav.fromMuLaw();
|
||||||
|
|
||||||
|
wav.toSampleRate(16000);
|
||||||
|
|
||||||
|
fs.writeFileSync('stream.wav', wav.toBuffer());
|
||||||
|
|
||||||
// this.recognizeStream.close();
|
// this.recognizeStream.close();
|
||||||
// console.log(this.recognizeStream);
|
// console.log(this.recognizeStream);
|
||||||
|
|
||||||
|
|
17
package-lock.json
generated
17
package-lock.json
generated
|
@ -11,6 +11,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-transcribe-streaming": "^3.362.0",
|
"@aws-sdk/client-transcribe-streaming": "^3.362.0",
|
||||||
"@google-cloud/speech": "^4.9.0",
|
"@google-cloud/speech": "^4.9.0",
|
||||||
|
"wavefile": "^11.0.0",
|
||||||
"ws": "^8.3.0",
|
"ws": "^8.3.0",
|
||||||
"yargs": "^17.3.1"
|
"yargs": "^17.3.1"
|
||||||
},
|
},
|
||||||
|
@ -2039,6 +2040,17 @@
|
||||||
"uuid": "dist/bin/uuid"
|
"uuid": "dist/bin/uuid"
|
||||||
}
|
}
|
||||||
},
|
},
|
||||||
|
"node_modules/wavefile": {
|
||||||
|
"version": "11.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wavefile/-/wavefile-11.0.0.tgz",
|
||||||
|
"integrity": "sha512-/OBiAALgWU24IG7sC84cDO/KfFuvajWc5Uec0oV2zrpOOZZDgGdOwHwgEzOrwh8jkubBk7PtZfQBIcI1OaE5Ng==",
|
||||||
|
"bin": {
|
||||||
|
"wavefile": "bin/wavefile.js"
|
||||||
|
},
|
||||||
|
"engines": {
|
||||||
|
"node": ">=8"
|
||||||
|
}
|
||||||
|
},
|
||||||
"node_modules/webidl-conversions": {
|
"node_modules/webidl-conversions": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
|
@ -3772,6 +3784,11 @@
|
||||||
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
"resolved": "https://registry.npmjs.org/uuid/-/uuid-8.3.2.tgz",
|
||||||
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
"integrity": "sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg=="
|
||||||
},
|
},
|
||||||
|
"wavefile": {
|
||||||
|
"version": "11.0.0",
|
||||||
|
"resolved": "https://registry.npmjs.org/wavefile/-/wavefile-11.0.0.tgz",
|
||||||
|
"integrity": "sha512-/OBiAALgWU24IG7sC84cDO/KfFuvajWc5Uec0oV2zrpOOZZDgGdOwHwgEzOrwh8jkubBk7PtZfQBIcI1OaE5Ng=="
|
||||||
|
},
|
||||||
"webidl-conversions": {
|
"webidl-conversions": {
|
||||||
"version": "3.0.1",
|
"version": "3.0.1",
|
||||||
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
"resolved": "https://registry.npmjs.org/webidl-conversions/-/webidl-conversions-3.0.1.tgz",
|
||||||
|
|
|
@ -20,6 +20,7 @@
|
||||||
"dependencies": {
|
"dependencies": {
|
||||||
"@aws-sdk/client-transcribe-streaming": "^3.362.0",
|
"@aws-sdk/client-transcribe-streaming": "^3.362.0",
|
||||||
"@google-cloud/speech": "^4.9.0",
|
"@google-cloud/speech": "^4.9.0",
|
||||||
|
"wavefile": "^11.0.0",
|
||||||
"ws": "^8.3.0",
|
"ws": "^8.3.0",
|
||||||
"yargs": "^17.3.1"
|
"yargs": "^17.3.1"
|
||||||
}
|
}
|
||||||
|
|
Loading…
Reference in a new issue