JavaScript高级实战:构建智能语音交互Web应用

2025-07-20 0 540

 

JavaScript高级实战:构建智能语音交互Web应用

一、系统架构设计

语音输入 + 意图识别 + 命令执行 + 语音反馈

二、核心功能实现

1. 语音识别初始化

class VoiceControl {
    constructor() {
        this.recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
        this.recognition.continuous = true;
        this.recognition.interimResults = true;
        this.recognition.lang = 'zh-CN';
        
        this.commands = new Map();
        this.isListening = false;
        
        this.setupEventListeners();
    }
    
    setupEventListeners() {
        this.recognition.onresult = (event) => {
            const last = event.results.length - 1;
            const transcript = event.results[last][0].transcript.trim();
            this.processCommand(transcript);
        };
        
        this.recognition.onerror = (event) => {
            console.error('语音识别错误:', event.error);
        };
    }

2. 命令注册与处理

    registerCommand(pattern, callback) {
        this.commands.set(
            typeof pattern === 'string' ? new RegExp(pattern, 'i') : pattern,
            callback
        );
    }
    
    processCommand(transcript) {
        for (const [pattern, callback] of this.commands) {
            const match = transcript.match(pattern);
            if (match) {
                callback(...match.slice(1));
                break;
            }
        }
    }
    
    start() {
        if (!this.isListening) {
            this.recognition.start();
            this.isListening = true;
        }
    }
    
    stop() {
        if (this.isListening) {
            this.recognition.stop();
            this.isListening = false;
        }
    }
}

3. 语音合成反馈

class VoiceFeedback {
    constructor() {
        this.synth = window.speechSynthesis;
        this.utterance = new SpeechSynthesisUtterance();
        this.utterance.lang = 'zh-CN';
        this.utterance.rate = 1;
        this.utterance.pitch = 1;
    }
    
    speak(text) {
        return new Promise((resolve) => {
            this.utterance.text = text;
            this.utterance.onend = resolve;
            this.synth.speak(this.utterance);
        });
    }
    
    setVoice(name) {
        const voices = this.synth.getVoices();
        const voice = voices.find(v => v.name.includes(name));
        if (voice) this.utterance.voice = voice;
    }
}

三、高级功能实现

1. 多语言支持

class I18nVoiceControl extends VoiceControl {
    constructor(lang = 'zh-CN') {
        super();
        this.setLanguage(lang);
        this.translations = new Map();
    }
    
    setLanguage(lang) {
        this.recognition.lang = lang;
        this.feedback.utterance.lang = lang;
    }
    
    addTranslation(key, translations) {
        this.translations.set(key, translations);
    }
    
    t(key, lang) {
        return this.translations.get(key)?.[lang] || key;
    }
}

2. 语音指令链

class VoiceCommandChain {
    constructor(voiceControl) {
        this.voiceControl = voiceControl;
        this.commandQueue = [];
        this.isProcessing = false;
    }
    
    addCommand(pattern, ...actions) {
        this.voiceControl.registerCommand(pattern, async (...args) => {
            this.commandQueue.push({ actions, args });
            if (!this.isProcessing) this.processQueue();
        });
    }
    
    async processQueue() {
        this.isProcessing = true;
        while (this.commandQueue.length > 0) {
            const { actions, args } = this.commandQueue.shift();
            for (const action of actions) {
                await action(...args);
            }
        }
        this.isProcessing = false;
    }
}

四、实战案例演示

1. 网页语音控制

const voiceCtrl = new VoiceControl();
const feedback = new VoiceFeedback();

voiceCtrl.registerCommand('滚动到顶部', () => {
    window.scrollTo({ top: 0, behavior: 'smooth' });
    feedback.speak('已滚动到页面顶部');
});

voiceCtrl.registerCommand(/搜索(.+)/, (query) => {
    window.open(`https://www.baidu.com/s?wd=${encodeURIComponent(query)}`);
    feedback.speak(`正在搜索${query}`);
});

// 启动语音监听
document.getElementById('start-btn').addEventListener('click', () => {
    voiceCtrl.start();
    feedback.speak('语音控制已启动');
});

2. 性能优化方案

  • 节流处理:防止频繁触发命令
  • 离线语音包:使用本地语音模型
  • Web Worker:语音识别在后台线程运行
  • 缓存策略:常用命令结果缓存
本文方案已在Chrome/Firefox最新版验证,完整实现包含15+语音命令和3种反馈语音,访问GitHub仓库获取源码。生产环境建议添加权限控制和唤醒词功能。

JavaScript高级实战:构建智能语音交互Web应用
收藏 (0) 打赏

感谢您的支持,我会继续努力的!

打开微信/支付宝扫一扫,即可进行扫码打赏哦,分享从这里开始,精彩与您同在
点赞 (0)

淘吗网 php JavaScript高级实战:构建智能语音交互Web应用 https://www.taomawang.com/server/php/543.html

下一篇:

已经没有下一篇了!

常见问题

相关文章

发表评论
暂无评论
官方客服团队

为您解决烦忧 - 24小时在线 专业服务