问题
I am trying to set up a server to receive audio from a client browser using SocketIO
, then process it through Google Speech-to-Text, and finally reply back to the client with the text.
Originally and ideally, I wanted to set up to function somewhat like the tool on this page: https://cloud.google.com/speech-to-text/
I tried using getUserMedia
and streaming it through SocketIO-Stream
, but I couldn't figure out how to 'pipe' MediaStream
.
Instead, now I've decided to use MediaRecorder
on the client side, and then send the data altogether as a blob(seen in this example).
I then apply toString('base64')
to the blob and call google-cloud/speech's client.recognize()
on the blob.
Client Side(i'm using VueJS):
new Vue({
el: '#app',
data: function () {
return ({
msgs: [],
socket: null,
recorder: null,
: []
})
},
mounted: function () {
this.socket = io.connect('localhost:3000/user');
console.log('Connected!')
this.socket.on('text', function (text) {
this.msgs.push(text)
})
},
methods: {
startRecording: function () {
if (this.recorder && this.recorder.state == 'recording') {
console.log("Stopping!")
this.recorder.stop()
} else {
console.log("Starting!")
navigator.mediaDevices.getUserMedia({ audio: true, video: false })
.then(this.handleSuccess);
}
},
handleSuccess: function (stream) {
this.recorder = new MediaRecorder(stream)
this.recorder.start(10000)
this.recorder.ondataavailable = (e) => {
this.chunks.push(e.data)
console.log(e.data)
}
this.recorder.onstop = (e) => {
const blob = new Blob(this.chunks, { 'type': 'audio/webm; codecs=opus' })
this.socket.emit('audio', blob)
}
}
}
})
Server Side:
const speech = require('@google-cloud/speech');
const client = new speech.SpeechClient();
const io = require('socket.io').listen(3000)
const ss = require('socket.io-stream')
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';
const audio = {
content: null
}
const config = {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode,
}
async function main() {
const [response] = await client.recognize({
audio: audio,
config: config
})
const transcription = response.results
.map(result => result.alternatives[0].transcript)
.join('\n');
console.log(`Transcription: ${transcription}`);
}
io.of('/user').on('connection', function (socket) {
console.log('Connection made!')
socket.on('audio', function (data) {
audio.content = data.toString('base64')
main().catch(console.error)
});
});
The log from the main()
function in the Server side is always:
"Transcription: "
-- which is empty!
It should contain the text from the audio sent. Thank you in advance!
回答1:
Your nodejs application asks for the processing of raw audio data, recorded as an array of 16-bit signed integers ('LINEAR16'
) at a rate if 16k samples/sec (16000
) . This sort of audio representation is known as pulse-code modulation (PCM) for reasons lost in ancient telephony lore.
But the Blob you send from your client-side code is not that. It's a media object with the content-type audio/webm; codecs=opus
. That means the audio track is compressed using the Opus codec and boxed (multiplexed) in the webm (Matroska, ebml) container format. The cloud text-to-speech code tries to interpret that as raw audio data, fails, throws up its hands and returns an empty transcription string. It's analogous to trying to view a zip file in a text editor: it's just gibberish.
To get text-to-speech to work with a media object, you have to extract the PCM audio from it first. This is a notorious pain in the neck to set up on a server; you have to use ffmpeg. There's a tutorial on it in the text-to-speech documentation. The tutorial mentions scraping the audio out of video files. Your Blob is, basically, a video file with no video track in it, so the same techniques work.
But, you'll be much better off returning to your first approach, using the MediaStream browser javascript APIs. In particular, your browser code should use elements of the Web Audio API to intercept the raw PCM audio data and send it to your server or directly from your browser to text-to-speech.
Explaining all this is way beyond the scope of a StackOverflow answer. Here are some hints. How to use web audio api to get raw pcm audio?
回答2:
The Google Text-To-Speech v1p1beta1
API end point supports MP3 files now. As O.Jones says, above MediaRecorder API is a good option, but now you can just get MP3 instead of raw PCM data, I found it difficult to implement the RecordRTC library with the intention of getting raw PCM because I ran into sound quality and cross-browser issues.
My solution: I used the mimeType audio/mp3
when creating my blob as such: const blob = new Blob(chunks, { 'type' : 'audio/mp3' });
Then I converted the blob to a base64 string like in this SO example. Then when you send an api call to Google's Speech-To-Text api, you have to specify the v1p1beta1
beta endpoint, as well as set the config as I have done in the cURL request below. Note that the default sampling rate for MediaRecorder is 16000Hz. An example CURL call could be the following (you must specify your api key):
curl --location --request POST 'https://speech.googleapis.com/v1p1beta1/speech:recognize?key=yourkey' \
--header 'Content-Type: application/json' \
--data-raw '{
"config": {
"encoding":"MP3",
"sampleRateHertz": 16000,
"languageCode": "en-US"
},
"audio": {
"content":"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"
}
}'
Also, this is working for me on Chrome, Firefox and Safari, but for Safari you must enable the MediaRecorder in Develop -> Experimental Features -> Media Recorder
来源:https://stackoverflow.com/questions/56453937/how-to-google-speech-to-text-using-blob-sent-from-browser-to-nodejs-server