bricks/bricks/webspeech.js
2025-07-16 14:28:55 +08:00

74 lines
2.0 KiB
JavaScript

var bricks = window.bricks || {};
bricks.WebTTS = class extends bricks.VBox {
constructor(opts){
super(opts);
}
speak(text){
// 检查浏览器是否支持SpeechSynthesis
if ('speechSynthesis' in window) {
var utterance = new SpeechSynthesisUtterance(text);
// 设置语音属性,例如语言
utterance.lang = bricks.app.lang;
utterance.pitch = 1;
utterance.rate = 1;
utterance.onstart = function(event) {
console.log('语音合成开始');
};
// 当语音合成结束时触发
utterance.onend = function(event) {
console.log('语音合成结束');
};
// 当语音合成出错时触发
utterance.onerror = function(event) {
console.error('语音合成出错:', event.error);
};
// 将utterance添加到语音合成队列
window.speechSynthesis.speak(utterance);
} else {
console.error('浏览器不支持SpeechSynthesis');
}
}
}
bricks.WebASR = class extends bricks.VBox {
constructor(opts){
super(opts);
this.reognition = None;
}
start_recording(){
// 检查浏览器是否支持SpeechRecognition
if ('SpeechRecognition' in window) {
// 创建SpeechRecognition实例
this.recognition = new SpeechRecognition();
// 处理识别错误
this.recognition.onerror = function(event) {
console.error('识别错误:', event.error);
};
// 处理语音识别结束事件
this.recognition.onend = function() {
console.log('语音识别已结束');
};
// 处理识别结果
this.recognition.onresult = function(event) {
var transcript = event.results[0][0].transcript;
this.dispatch('asr_result', {
content:transcript
});
console.log('识别结果:', transcript);
};
this.recognition.lang = bricks.app.lang;
this.recognition.start();
} else {
console.log('browser has not SpeechRecognition');
}
}
stop_recording(){
this.recognition.stop();
}
}
bricks.Factory.register('WebTTS', bricks.WebTTS);
bricks.Factory.register('WebASR', bricks.WebASR);