74 lines
2.0 KiB
JavaScript
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);
|
|
|