gpt4 book ai didi

node.js - 带有 React 的 Google 语音转文本

转载 作者:行者123 更新时间:2023-12-03 12:18:44 26 4
gpt4 key购买 nike

我正在开发一个简单的语音文本网络应用程序,我已经有了可用的服务器端 nodejs 代码和简单的 react 页面,但我不知道如何将它们粘合在一起,我正在尝试实现各种不同的奇怪东西,或者 react 应用程序没有得到任何返回的数据,或者有错误 500。

我想在从 Google 获取转录后为录音机实现 stop() 函数,因为它被设置为只听短命令,但我可以实现的唯一解决方案是 setTimeout 函数,这不是我想要的想要。

编辑:我已经解决了在收到命令后停止记录器的问题,它工作得很好,但是,欢迎任何改进。解决方案很简单,我只是将阈值从 null 修改为 0.5,thresholdEnd: 0.5。仍未解决此 Express 应用的前端问题。

编辑 2:有趣的是,我无意中发现了 this stuff这正是我想要的......为了找到这个惊人且 super 简单的解决方案付出了很多努力,特别是如果你遵循这个medium article .

有人能帮帮我吗?

服务器端代码:

'use strict';

const express = require('express');
const app = express();
const port = 3002;

const cors = require('cors')

// Node-Record-lpcm16
const recorder = require('node-record-lpcm16');

// Imports the Google Cloud client library
const speech = require('@google-cloud/speech');

function speechFunction() {
const encoding = 'LINEAR16';
const sampleRateHertz = 16000;
const languageCode = 'en-US';
const command_and_search = 'command_and_search';
const keywords = ['turn on', 'turn off', 'turn it on', 'turn it off'];

const request = {
config: {
encoding: encoding,
sampleRateHertz: sampleRateHertz,
languageCode: languageCode,
model: command_and_search,
speech_contexts: keywords
},
singleUtterance: true,
interimResults: false // If you want interim results, set this to true
};


// Creates a client
const client = new speech.SpeechClient();

// Create a recognize stream
const recognizeStream = client
.streamingRecognize(request)
.on('error', console.error)
.on('data', data =>
// process.stdout.write(
console.log(
data.results[0] && data.results[0].alternatives[0]
? `Transcription: ${data.results[0].alternatives[0].transcript}\n`
: `\n\nReached transcription time limit, press Ctrl+C\n`
)
);

// Start recording and send the microphone input to the Speech API
recorder
.record({
sampleRateHertz: sampleRateHertz,
threshold: 0, //silence threshold
recordProgram: 'rec', // Try also "arecord" or "sox"
silence: '5.0', //seconds of silence before ending
endOnSilence: true,
thresholdEnd: 0.5
})
.stream()
.on('error', console.error)
.pipe(recognizeStream);

console.log('Listening, press Ctrl+C to stop.');
// [END micStreamRecognize]
}

app.use(cors());

app.use('/api/speech-to-text/',function(req, res){
speechFunction(function(err, result){
if (err) {
console.log('Error retrieving transcription: ', err);
res.status(500).send('Error 500');
return;
}
res.send(result);
})
});

// app.use('/api/speech-to-text/', function(req, res) {
// res.speechFunction();
// });

// app.get('/speech', (req, res) => res.speechFunction);

app.listen(port, () => {
console.log(`Listening on port: ${port}, at http://localhost:${port}/`);
});

react

import React, { Component } from 'react';
import './App.css';

class App extends Component {

constructor() {
super()
this.state = {
}
}

onListenClick() {
fetch('http://localhost:3002/api/speech-to-text/')
.then(function(response) {
console.log(response);
this.setState({text: response});
})
.catch(function(error) {
console.log(error);
});
}

render() {
return (
<div className="App">
<button onClick={this.onListenClick.bind(this)}>Start</button>
<div style={{fontSize: '40px'}}>{this.state.text}</div>
</div>
);
}
}

export default App;

最佳答案

将 onListenClick() 代码替换为以下内容

async onListenClick(){
const response= await axios.get('http://localhost:3002/api/speech-to-text/')
console.log(response)
this.setState(text:response.data)
}

我想弄清楚如何通过单击按钮来停止 google api。但是上面的代码会带来关于 react 的数据

关于node.js - 带有 React 的 Google 语音转文本,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/59977502/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com