|
@@ -9,8 +9,107 @@ import { ModalController } from '@ionic/angular';
|
|
|
})
|
|
|
export class PageYuyinComponent implements OnInit {
|
|
|
|
|
|
- constructor() { }
|
|
|
-
|
|
|
ngOnInit() {}
|
|
|
|
|
|
+ recognition: any; // 用于存储语音识别实例
|
|
|
+ recognizedContent: string = ''; // 用于存储识别到的语音内容
|
|
|
+ timer: string = '00:00'; // 用于显示计时器
|
|
|
+ interval: any; // 用于存储定时器的引用
|
|
|
+ elapsedSeconds: number = 0; // 计时器的秒数
|
|
|
+ isVoiceInputVisible: boolean = false; // 控制语音输入框的显示状态
|
|
|
+
|
|
|
+
|
|
|
+ constructor() {
|
|
|
+ // 初始化语音识别
|
|
|
+ this.initSpeechRecognition();
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+
|
|
|
+ // 初始化语音识别
|
|
|
+ initSpeechRecognition() {
|
|
|
+ const SpeechRecognition = (window as any).SpeechRecognition || (window as any).webkitSpeechRecognition;
|
|
|
+ if (SpeechRecognition) {
|
|
|
+ this.recognition = new SpeechRecognition();
|
|
|
+ this.recognition.lang = 'zh-CN'; // 设置语言为中文
|
|
|
+ this.recognition.interimResults = false; // 不返回中间结果
|
|
|
+ this.recognition.maxAlternatives = 1; // 最大替代结果数
|
|
|
+ this.recognition.continuous = true; // 设置为连续识别
|
|
|
+
|
|
|
+
|
|
|
+ // 处理识别结果
|
|
|
+ this.recognition.onresult = (event: any) => {
|
|
|
+ this.recognizedContent += event.results[event.results.length - 1][0].transcript; // 追加识别结果
|
|
|
+ console.log("识别到的内容:", this.recognizedContent); // 打印识别到的内容
|
|
|
+ };
|
|
|
+
|
|
|
+ // 处理识别错误
|
|
|
+ this.recognition.onerror = (event: any) => {
|
|
|
+ if (event.error === 'no-speech') {
|
|
|
+ console.warn('没有检测到语音,继续监听...');
|
|
|
+ } else {
|
|
|
+ console.error('语音识别错误:', event.error);
|
|
|
+ }
|
|
|
+ };
|
|
|
+ } else {
|
|
|
+ console.log('该浏览器不支持语音识别');
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+
|
|
|
+ startVoice() {
|
|
|
+ if (this.recognition && this.recognition.state !== 'active') { // 检查识别状态
|
|
|
+ this.recognition.start(); // 启动语音识别
|
|
|
+ console.log('语音识别启动...');
|
|
|
+ this.startTimer(); // 启动计时器
|
|
|
+ this.isVoiceInputVisible = true; // 显示语音输入框
|
|
|
+ } else {
|
|
|
+ console.warn('语音识别已经在运行中'); // 提示用户语音识别已在运行
|
|
|
+ }
|
|
|
+ }
|
|
|
+
|
|
|
+ // 启动计时器
|
|
|
+ startTimer() {
|
|
|
+ this.elapsedSeconds = 0; // 重置秒数
|
|
|
+ this.timer = '00:00'; // 重置计时器显示
|
|
|
+ this.interval = setInterval(() => {
|
|
|
+ this.elapsedSeconds++;
|
|
|
+ const minutes = Math.floor(this.elapsedSeconds / 60);
|
|
|
+ const seconds = this.elapsedSeconds % 60;
|
|
|
+ this.timer = `${this.padZero(minutes)}:${this.padZero(seconds)}`; // 更新计时器显示
|
|
|
+ }, 1000);
|
|
|
+ }
|
|
|
+
|
|
|
+ // 格式化数字为两位数
|
|
|
+ padZero(num: number): string {
|
|
|
+ return num < 10 ? '0' + num : num.toString();
|
|
|
+ }
|
|
|
+ // 取消语音输入
|
|
|
+ cancelVoiceInput() {
|
|
|
+ if (this.recognition) {
|
|
|
+ this.recognition.stop(); // 停止语音识别
|
|
|
+ console.log('语音识别已停止');
|
|
|
+ clearInterval(this.interval); // 清除计时器
|
|
|
+ this.timer = '00:00'; // 重置计时器显示
|
|
|
+ this.recognizedContent = ''; // 清空识别内容
|
|
|
+ }
|
|
|
+ this.isVoiceInputVisible = false; // 隐藏语音输入框
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
+ // 发送语音输入
|
|
|
+ sendVoiceInput() {
|
|
|
+ if (this.recognition) {
|
|
|
+ this.recognition.stop(); // 停止语音识别
|
|
|
+ console.log('语音识别已停止');
|
|
|
+ clearInterval(this.interval); // 清除计时器
|
|
|
+ this.timer = '00:00'; // 重置计时器显示
|
|
|
+ // 将识别到的内容传到输入框中
|
|
|
+return this.recognizedContent;
|
|
|
+ }
|
|
|
+ this.isVoiceInputVisible = false; // 隐藏语音输入框
|
|
|
+
|
|
|
+ }
|
|
|
+
|
|
|
}
|