Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(四):语音识别输入功能

article/2025/8/19 23:40:04

基于前三章的内容,开发AI 对话框语音识别输入功能:

Tailwind css实战,基于Kooboo构建AI对话框页面(一)-CSDN博客

Tailwind css实战,基于Kooboo构建AI对话框页面(二):实现交互功能-CSDN博客

Tailwind CSS 实战,基于 Kooboo 构建 AI 对话框页面(三):实现暗黑模式主题切换-CSDN博客


在当今的 AI 应用中,语音交互已经成为提升用户体验的重要组成部分。通过语音识别技术,用户可以更自然、便捷地与 AI 助手进行沟通,无需手动输入文字。本文将详细介绍如何在基于 Kooboo 平台 构建的 AI 对话框页面中集成语音识别功能,结合 Tailwind CSS 实现美观且交互友好的语音输入体验。实现界面如下:


一、语音识别功能概述

语音识别技术允许用户通过麦克风讲话,系统将其转换为文本并显示在输入框中。在 AI 对话框场景中,语音识别可以大大提高输入效率,特别是对于长篇内容或移动设备用户。我们将实现以下核心功能

  • 点击麦克风图标访问权限,允许访问权限后支持语音输入
  • 说话时,识别内容会实时显示在输入框中
  • 再次点击麦克风图标停止录音,此时内容会保留在输入框中
  • 点击 "发送" 按钮或按 Enter 键发送内容

二、语音识别基础概念

1. 什么是 Web Speech API?

Web Speech API 是浏览器提供的一组 JavaScript 接口,用于处理语音数据。它主要包含两个部分:

  • SpeechRecognition:将语音转换为文本(语音识别)
  • SpeechSynthesis:将文本转换为语音(语音合成)

在本文中,我们主要使用 SpeechRecognition 实现语音输入功能。

2. 兼容性说明

目前主流浏览器(Chrome、Edge、Safari)均支持 Web Speech API,但需要注意:

  • Chrome/Edge:完全支持,但必须在安全上下文(HTTPS)或 localhost 环境下使用
  • Firefox:部分支持,需要用户手动启用实验性标志
  • Safari:支持但语法略有不同(使用 webkitSpeechRecognition

本案例通过以下方式处理兼容性:

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();

三、实现语音识别功能

1. 基础代码结构

// 初始化语音识别对象
const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();// 配置识别参数
recognition.lang = 'zh-CN';        // 设置识别语言为中文
recognition.interimResults = true; // 启用临时结果,实时显示识别内容
recognition.maxAlternatives = 1;   // 只返回最可能的结果// 状态变量
let isListening = false;// DOM 元素
const voiceButton = document.getElementById('voiceButton');
const messageInput = document.getElementById('messageInput');// 开始语音识别
function startListening() {isListening = true;// 更新 UI 状态voiceButton.classList.add('active');voiceButton.innerHTML = '<i class="fa fa-microphone-slash"></i>';messageInput.setAttribute('placeholder', '正在聆听...');// 启动识别recognition.start();
}// 停止语音识别
function stopListening() {isListening = false;// 更新 UI 状态voiceButton.classList.remove('active');voiceButton.innerHTML = '<i class="fa fa-microphone"></i>';messageInput.setAttribute('placeholder', '输入消息...');// 停止识别recognition.abort();
}// 绑定按钮事件
voiceButton.addEventListener('click', () => {if (isListening) {stopListening();} else {startListening();}
});

2. 理解关键参数

2.1 recognition.lang

设置识别语言,格式为 BCP 47 语言标签(如 zh-CNen-US)。完整语言列表可参考 MDN 文档。

2.2 recognition.interimResults
  • true:识别过程中实时返回临时结果
  • false:只在识别完成后返回最终结果
2.3 recognition.maxAlternatives

设置返回的候选结果数量。例如:

  • 1:只返回最可能的结果
  • 3:返回 3 个最可能的结果(需要在结果处理中遍历获取)

3. 处理识别结果

// 处理识别结果
recognition.onresult = (event) => {let transcript = '';// 遍历所有结果块for (let i = 0; i < event.results.length; i++) {// 获取当前块的最佳匹配结果transcript += event.results[i][0].transcript;// 如果是最终结果,添加标点符号if (event.results[i].isFinal) {if (!transcript.endsWith('。') && !transcript.endsWith('?') && !transcript.endsWith('!')) {transcript += '。';}}}// 更新输入框内容messageInput.value = transcript;
};
结果结构说明
  • event.results:包含多个结果块(SpeechRecognitionResultList
  • 每个结果块包含多个候选结果(SpeechRecognitionAlternative
  • 每个候选结果有:
    • transcript:识别文本
    • confidence:置信度(0-1 之间的数值)
    • isFinal:是否为最终结果

4. 错误处理与权限管理

// 错误处理(关键修改:忽略用户主动中断的错误)recognition.onerror = (event) => {if (event.error === 'aborted') {// 用户主动中断,不显示错误console.log('语音识别已中断');} else {// 其他错误(如网络问题、权限问题)console.error('语音识别错误:', event.error);stopListening();// 根据不同错误类型显示不同提示let errorMessage = '语音识别失败';if (event.error === 'not-allowed') {errorMessage = '请授予麦克风权限后重试!';} else if (event.error === 'network') {errorMessage = '网络连接不稳定,请检查网络!';}alert(errorMessage);}};

三、使用 Tailwind CSS 美化界面

1. 设计语音按钮

/* 输入框内语音按钮样式 */.input-wrapper {position: relative;flex: 1;}.voice-button {position: absolute;left: 8px;top: 50%;transform: translateY(-50%);width: 32px;height: 32px;display: flex;align-items: center;justify-content: center;cursor: pointer;color: var(--text-secondary);background: transparent;border: none;z-index: 10;}

 2. 输入框与按钮布局

<!-- 输入区域 --><div class="bg-[var(--bg-primary)] p-4 border-t border-[var(--border-color)]"><div class="flex space-x-2"><!-- 输入框包装器 --><div class="input-wrapper"><button id="voiceButton" class="voice-button"><i class="fa fa-microphone"></i></button><input id="messageInput"type="text" placeholder="输入消息..." class="message-input flex-1 w-full p-2 border border-[var(--border-color)] rounded-lg focus:outline-none focus:ring-2 focus:ring-blue-500 bg-[var(--bg-secondary)] text-[var(--text-primary)]"></div><button id="sendButton" class="px-4 py-2 bg-blue-600 text-white rounded-lg hover:bg-blue-700 transition-colors">发送</button></div></div>

3. 处理语音识别的结果并实时显示在输入框中

// 处理识别结果(优化显示临时结果)recognition.onresult = (event) => {let transcript = '';for (let i = 0; i < event.results.length; i++) {transcript += event.results[i][0].transcript;// 如果是最终结果,添加句号(可选)if (event.results[i].isFinal) {transcript += '。';}}messageInput.value = transcript;};

实际运行效果

当用户说话时:

  1. 输入框会实时显示识别的内容(包括临时结果)
  2. 说话结束后(短暂停顿),会标记为最终结果并添加句号
  3. 如果用户继续说话,会继续追加识别内容
     

总结

通过集成语音识别功能,我们的 AI 对话框页面变得更加智能和易用。用户可以根据需要选择文本输入或语音输入,大大提升了交互体验。结合 Tailwind CSS 的强大样式能力和 Kooboo 平台的便捷开发环境,我们能够高效地实现这些功能,并为未来的扩展留下空间。


http://www.hkcw.cn/article/PVQxdDIpFh.shtml

相关文章

一文讲清:卫星电话与普通电话有什么不同?

在人类通信技术演进的历程中&#xff0c;卫星电话与普通电话如同两条并行的轨道&#xff0c;分别承载着不同维度的技术突破与应用需求。尽管两者最终都实现了声音与信息的跨越时空传递&#xff0c;但其技术路径、适用场景及资源投入却存在本质差异。这种差异既源于通信基础设施…

汽车总线分析总结(CAN、LIN、FlexRay、MOST、车载以太网)

目录 一、汽车总线技术概述 二、主流汽车总线技术对比分析 1. CAN总线&#xff08;Controller Area Network&#xff09; 2. LIN总线&#xff08;Local Interconnect Network&#xff09; 3. FlexRay总线 4. MOST总线&#xff08;Media Oriented Systems Transport&#x…

充电便捷,新能源汽车移动充电服务如何预约充电

随着新能源汽车的普及&#xff0c;充电便捷性成为影响用户体验的关键因素之一。传统的固定充电桩受限于地理位置和数量&#xff0c;难以完全满足用户需求&#xff0c;而移动充电服务的出现&#xff0c;为车主提供了更加灵活的补能方式。通过手机APP、小程序或在线平台&#xff…

官方回应广东疑似出现火流星:未监测到雷电,可排除雷电现象

5月28日晚间,多名IP定位在广东的网友发视频称,广东茂名的天空疑似有什么东西落下,一下子天空都亮了,不久还伴有巨响。多段网传视频显示,在28日21时30分左右,天空突然被照亮恍如白昼,同时有声响传出。红星新闻注意到,虽有部分网友因未看到具体的天空景象,怀疑是雷电巨响…

纳米06凭什么上市即卖爆 央企品质重塑市场规则

纳米06凭什么上市即卖爆 央企品质重塑市场规则。在新能源汽车市场这片红海中,价格战与技术迭代的硝烟从未停歇。当传统车企巨头以央企身份加入竞争,这场较量被赋予了新的意义。5月27日,东风纳米06以“国民智趣纯电SUV”之名正式上市,限时先享价7.99万元起,凭借越级配置与央…

单亲妈妈抗癌6年张潇群去世 37岁生命遗憾落幕

5月29日,网友们发文悼念抗癌博主张潇群。这位来自浙江的单亲妈妈因结肠癌去世,享年37岁。自2019年确诊以来,张潇群经历了长达6年的抗癌斗争,期间进行了4次手术和50次化疗,耗尽了所有积蓄,但最终未能战胜病魔。据她的好友透露,张潇群在27日晚上9点左右离世,此前已昏迷一…

这3项裁决或成特朗普任内最大挫折 关税政策受挫

当地时间5月29日,美国联邦巡回上诉法院批准特朗普政府的请求,暂时恢复实施所谓“对等关税”政策。此前一天,美国国际贸易法院裁定该关税政策“越权”并阻止其生效。同日早些时候,美国联邦地区法院认定特朗普利用“紧急权力”征收的多项税款不合法,裁定暂停执行其关税命令1…

IT选型指南:电信行业需要怎样的服务器?

从第一条电报发出的 那一刻起 电信技术便踏上了飞速发展的征程 百余年间 将世界编织成一个紧密相连的整体 而在今年 我们迎来了第25届世界电信日 同时也是国际电联成立的第160周年 本届世界电信日的主题为:“弥合性别数字鸿沟,为所有人创造机遇”,但在新兴技术浪潮汹涌…

美公司吐槽美产商品包装还是中国的 关税可能让美国尿不湿等涨价

美国一家婴幼儿用品商店负责人莉兹表示,关税政策持续影响她的生意,她对公司的未来毫无信心。莉兹说,店内虽然有部分产品是美国生产的,但所有可回收塑料包装都产自中国。“我们会告知客户,未来几个月涨价的可能性极大……”责任编辑:zx0002

太可爱了!孙颖莎邱贻可上演父女式拌嘴

近日,孙颖莎接受了央视《体坛零距离》专访,展现了在封闭训练里的日常状态。她和邱贻可指导的可爱逗趣日常也被记录了下来。孙颖莎、邱贻可一前一后进电梯,莎莎被coco“故意”踩脚,co爹立刻摸头安慰。孙颖莎:邱指导不是你踩我脚干什么?邱贻可笑嘻嘻摸孙颖莎小脑袋说道:我…

ArduinoJson库使用详解

ArduinoJson助手 【推荐】直接根据输入数据、平台生成相应的代码 注意不同版本&#xff0c;函数声明、调用方式不一样 https://arduinojson.org/v7/assistant/#/step1 反序列化deserialization #include <ArduinoJson.h>void setup() {// Initialize serial portSeri…

肖战《藏海传》再上星央一播出 认可度拉满

肖战《藏海传》再上星央一播出 认可度拉满!肖战主演的《藏海传》要在央视一套播出了!这波上星央一的操作也太牛了吧,从网剧直接升级到国家级平台,这认可度简直拉满~责任编辑:0882

实验设计与分析(第6版,Montgomery)第5章析因设计引导5.7节思考题5.6 R语言解题

本文是实验设计与分析&#xff08;第6版&#xff0c;Montgomery著&#xff0c;傅珏生译) 第5章析因设计引导5.7节思考题5.6 R语言解题。主要涉及方差分析&#xff0c;正态假设检验&#xff0c;残差分析&#xff0c;交互作用图&#xff0c;等值线图。 dataframe <-data.frame…

全红婵退赛后首更动态 分享日常展笑颜

5月29日,中国跳水运动员全红婵在短视频平台上更新了一则动态,这是她在退赛风波后的首次更新。视频中,她与粉丝们分享了日常生活,包括钓鱼、遛狗、品尝美食以及和朋友们一起搞怪自拍,依旧展现了她古灵精怪的一面。5月24日,2025全国跳水冠军赛暨世锦赛选拔赛、全运会资格赛…

哈佛“国际禁招令”被叫停 法院初步禁令维持现状

当地时间29日,美国马萨诸塞州联邦地区法院一名法官批准了哈佛大学提出的发布初步禁令请求,暂停了特朗普政府取消哈佛大学招收外国学生资质的政策。法院网站最新信息显示,此前发布的临时限制令将继续有效,待各方协商并提交提议供法官下一步审议之后,将发布最终的初步禁令。…

视频显示输出方式

视频显示输出方式 第一代&#xff1a;CVBS信号 第二代&#xff1a;S-Video信号 第三代&#xff1a;VGA信号 第四代&#xff1a;DVI信号 第五代&#xff1a;HDMI信号

基于Python的智能车牌识别管理系统设计与实现(源码+定制+开发)应用于智慧停车的车牌识别与管理平台设计

博主介绍&#xff1a; ✌我是阿龙&#xff0c;一名专注于Java技术领域的程序员&#xff0c;全网拥有10W粉丝。作为CSDN特邀作者、博客专家、新星计划导师&#xff0c;我在计算机毕业设计开发方面积累了丰富的经验。同时&#xff0c;我也是掘金、华为云、阿里云、InfoQ等平台…

【leetcode】19. 删除链表的倒数第N个节点

删除链表的倒数第N个节点 题目代码1. 获取长度2. 双指针 题目 19. 删除链表的倒数第N个节点 给你一个链表&#xff0c;删除链表的倒数第 n 个结点&#xff0c;并且返回链表的头结点。 示例 2&#xff1a; 输入&#xff1a;head [1], n 1 输出&#xff1a;[] 示例 3&…

Coupang账号被封?如何有效申诉并恢复店铺?

Coupang作为韩国市场上一个重要的电商平台&#xff0c;已获得了不小的利润和市场份额。然而&#xff0c;在这个庞大的电商平台上&#xff0c;如果不遵守平台的规则&#xff0c;可能会面临店铺封号的风险。封号不仅会影响店铺的运营&#xff0c;严重的情况下&#xff0c;还可能导…

【Mac】安装 PaddleOCR

环境&#xff1a;Mac M1 芯片 1、安装 1.1 安装 Anaconda Anaconda 安装较为简单&#xff0c;直接在 Anaconda 官网 下载pkg文件&#xff0c;根据向导提示完成安装。 Anaconda 用于搭建 Python 虚拟环境&#xff0c;目的是为了避免与之前环境安装库的版本冲突&#xff0c;另…