我正在尝试使用 Node js 练习 google Speech to Text。 我想做的是使用 MediaRecorder 进行录音。我使用 multer 将音频上传到服务器,然后转录音频以获取文本。
问题在于,应该包含转录文本的变量实际上根本不包含任何内容。我几个小时以来一直试图找出问题的根源,但没有结果。
这是 html 和 javascript 代码:
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="UTF-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge">
<meta name="viewport" content="width=device-width, initial-scale=1.0">
<title>Document</title>
</head>
<body>
<audio id="audio" controls></audio>
<button name="record">record</button>
<button name="stop">stop</button>
<a id="myLink">Telecharger</a>
<div id="transcription">Transcription: </div>
<script>
var btnStart = document.querySelector('button[name="record"]');
var btnStop = document.querySelector('button[name="stop"]');
var audio = document.querySelector('#audio');
var myLink = document.getElementById('myLink');
btnStart.addEventListener('click', async () => {
let stream = await navigator.mediaDevices.getUserMedia({audio: true, video: false});
let mediaRecorder = new MediaRecorder(stream);
mediaRecorder.start();
let chunks = [];
mediaRecorder.ondataavailable = (e) => {
chunks.push(e.data);
}
//function to catch error
mediaRecorder.onerror = (e) => {
alert(e.error);
}
mediaRecorder.onstop = async (e) => {
let blod = new Blob(chunks, { type: 'audio/wav' });
const formData = new FormData();
formData.append('audio', blod);
// Envoi du fichier audio au serveur Node.js
const response = await fetch('/transcribe', {
method: 'POST',
body: formData,
});
let transcription = await response.text();
transcriptionDiv.innerHTML = `Transcription: ${transcription}`;
}
btnStop.addEventListener('click',()=>{
mediaRecorder.stop();
})
})
</script>
</body>
</html>
我使用multrer上传:
const multer = require('multer');
const storage = multer.diskStorage({
destination: (req, file, callback) => {
callback(null, 'uploads');
},
filename: (req, file, callback) => {
const name = 'test-speech.wav';
callback(null, name);
}
});
module.exports = multer({storage: storage}).single('audio');
和节点js代码:
app.post('/transcribe', upload, async (req, res) => {
try {
const config = {
encoding: 'LINEAR16',
sampleRateHertz: 44100,
languageCode: 'fr-FR',
};
const audio = {
content: fs.readFileSync('uploads/test-speech.wav').toString('base64'),
};
const request = {
audio: audio,
config: config,
};
const [response] = await client.recognize(request);
const transcription = response.results.map(result => result.alternatives[0].transcript).join('\n');
console.log('Transcription : ', transcription);
res.send(transcription);
} catch (err) {
console.error('Error while transcribing :', err);
res.status(500).send('Error while transcribing');
}
});
正如我上面所说,变量
transcription
不包含任何值。有人可以帮助我吗?