Tailwind CSS 實戰,基于 Kooboo 構建 AI 對話框頁面(四):語音識別輸入功能

基于前三章的內容,開發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.pswp.cn/news/907390.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/907390.shtml
英文地址,請注明出處:http://en.pswp.cn/news/907390.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

ollama list模型列表獲取 接口代碼

ollama list模型列表獲取 接口代碼 curl http://localhost:11434/v1/modelscoding package hcx.ollama;/*** ClassName DockerOllamaList* Description TODO* Author dell* Date 2025/5/26 11:31* Version 1.0**/import java.io.BufferedReader; import java.io.InputStreamR…

ISOLAR軟件生成報錯處理(五)

錯誤1 An error has occurred. See error log for more details. java.lang.NullPointerException 這東西不用管&#xff0c;不影響生成 錯誤2 Description Resource Path Location Type Target ARObject: <xxxx> CompuMethod used for floating-point data conversi…

前端開發定時,ES學習,java集合

1.前端vue3加入定時任務&#xff1a; import { onMounted, ref,onUnmounted } from vue;//初始化&#xff0c;結束調用部分引用let timer: any;//定時器onMounted(async () > {timer setInterval(() > {open()//需要定時的任務}, 60000)//一分鐘調用一次}); onUnmounte…

Photoshop2025(PS2025)軟件及安裝教程

在數字圖像編輯領域&#xff0c;Adobe Photoshop 一直是無可爭議的王者。如今&#xff0c;Photoshop 2025 重磅登場&#xff0c;再次為我們帶來了驚喜與變革&#xff0c;進一步鞏固了它在行業中的領先地位。 Photoshop 2025 在人工智能方面的升級令人矚目。其全新的 “Magic Se…

【SQL Server Management Studio 連接時遇到的一個錯誤】

第一次用SQL Server Management Studio啟動之后第一步就是要建立連接 但是不知道Server Name要填什么&#xff0c;看了網上的教程說是要找到下面這個注冊表中對應的實例名稱填上去&#xff0c;或者前面加localhost 但是好像都沒有用&#xff0c;一直遇到報錯如下&#xff1a;…

高等數學基礎(向量矩陣及其創建和特殊的矩陣)

向量 向量是機器學習最底層的組成部分, 也是基礎數據的表示形式, 線性代數通過將研究對象拓展到向量, 對多維數據進行統一研究, 而進化出的方法方便我們可以研究和解決真實世界中的問題 標量 標量也稱為"無向量", 使用一個單獨的數表示數值大小, 可以有正負之分, …

IBM DB2數據庫管理工具IBM Data Studio

一、介紹 IBM Data Studio 是 IBM 提供的一個集成開發環境&#xff08;IDE&#xff09;&#xff0c;用于支持數據管理、開發、優化和管理數據庫應用程序&#xff0c;特別是在 IBM Db2 和其他數據庫平臺上。它提供了許多功能&#xff0c;以幫助開發人員和數據庫管理員提高生產力…

Java異常處理的全面指南

Java異常處理的全面指南 一、Java異常的基礎概念1.1 什么是異常1.2 異常類的層次結構 二、Java異常的處理方式2.1 try-catch塊2.2 throws關鍵字2.3 throw關鍵字 三、自定義異常3.1 自定義受檢異常3.2 自定義非受檢異常 四、Java異常處理的最佳實踐4.1 捕獲合適粒度的異常4.2 避…

MediaMtx開源項目學習

這個博客主要記錄MediaMtx開源項目學習記錄,主要包括下載、推流(攝像頭,MP4)、MediaMtx如何使用api去添加推流,最后自定義播放器,播放推流后的視頻流,自定義Video播放器博客地址 1 下載 MediaMTX MediaMTX 提供了預編譯的二進制文件,您可以從其 GitHub 頁面下載: Gi…

【unity游戲開發——編輯器擴展】EditorApplication公共類處理編輯器生命周期事件、播放模式控制以及各種編輯器狀態查詢

注意&#xff1a;考慮到編輯器擴展的內容比較多&#xff0c;我將編輯器擴展的內容分開&#xff0c;并全部整合放在【unity游戲開發——編輯器擴展】專欄里&#xff0c;感興趣的小伙伴可以前往逐一查看學習。 文章目錄 前言一、監聽編輯器事件1、常用編輯器事件2、示例監聽播放模…

Spring Boot+Activiti7入坑指南初階版

介紹  Activiti 是一個輕量級工作流程和業務流程管理 (BPM) 平臺,面向業務人員、開發人員和系統管理員。其核心是一個超快且堅如磐石的 Java BPMN 2 流程引擎。它是開源的,并根據 Apache 許可證分發。Activiti 可以在任何 Java 應用程序、服務器、集群或云中運行。它與 Spri…

VoltAgent 是一個開源 TypeScript 框架,用于構建和編排 AI 代理

?一、軟件介紹 文末提供程序和源碼下載 VoltAgent 是一個開源 TypeScript 框架&#xff0c;用于構建和編排 AI 代理 二、什么是 VoltAgent&#xff1f; AI 代理框架提供了構建由自主代理提供支持的應用程序所需的基礎結構和工具。這些代理通常由大型語言模型 &#xff08;&am…

《仿盒馬》app開發技術分享-- 訂單詳情頁(端云一體)

開發準備 在之前的章節中我們實現了訂單的提交&#xff0c;以及提交之后跳轉到確認訂單頁面&#xff0c;在確認訂單頁面我們添加了一個入口&#xff0c;這個入口是查詢訂單&#xff0c;當我們點擊入口時&#xff0c;我們需要跳轉到一個新的界面&#xff0c;這個界面通過接收上…

傳統項目管理總拖延?Scrum敏捷全流程拆解

在互聯網高速發展的時代&#xff0c;企業競爭的核心要素正逐漸向 "速度" 傾斜。市場環境瞬息萬變&#xff0c;用戶需求呈現出多元化、動態化的顯著特征&#xff0c;而傳統管理模式固有的滯后性與僵化性&#xff0c;已難以匹配快速迭代的市場需求。在此背景下&#xf…

GelSight Mini觸覺傳感器:7μm精度+3D 映射,賦能具身智能精密操作

GelSight Mini 高分辨率視觸覺傳感器采用先進的光學成像與觸覺感知技術&#xff0c;賦予機器人接近人類的觸覺能力。該設備可捕捉物體表面微觀細節&#xff0c;并生成高精度的2D/3D數字映射&#xff0c;幫助機器人識別形狀、紋理及接觸力&#xff0c;從而執行更復雜、精準的操作…

【電路筆記 TMS320F28335DSP】McBSP 從源時鐘得到 生成時鐘 CLKG 幀同步信號 FSG

對應于原文 Multichannel Buffered Serial Port (McBSP)的 2.5.3 Data Clock Generation。 CLKG Figure 2-4. Sample Rate Generator Block Diagram CLKG 是采樣率發生器輸出的數據位時鐘&#xff08;Data Bit Clock&#xff09;&#xff0c;它被用來控制&#xff1a; 數據發…

(25年5.28)ChatGPT Plus充值教程與實用指南:附國內外使用案例與模型排行

更多具體來源&#xff1a;查看原文 ChatGPT Plus 充值教程 由于國內卡無法直接充值 chatgpt&#xff0c;通常需要借助虛擬卡。目前咱們常用的方式是通過虛擬卡平臺獲取。因平臺審核要求這里不細說&#xff0c;具體看原文。 ChatGPT Plus主要使用方向 ChatGPT Plus 提供了更…

38. 自動化測試異步開發之編寫客戶端異步webdriver接口類

Selenium異步瀏覽器操作實現原理深度解析 一、AsyncBrowser類核心結構 1.1 類定義與啟動方法 class AsyncBrowser(Command):@classmethodasync def start(cls, remote_driver_server: str

國芯思辰| 霍爾電流傳感器AH811為蓄電池負載檢測系統安全護航

在電動車、儲能電站、不間斷電源&#xff08;UPS&#xff09;等設備中&#xff0c;蓄電池作為關鍵的儲能單元&#xff0c;其運行狀態直接關系到設備的穩定性和使用壽命。而準確監測蓄電池的負載情況&#xff0c;是保障其安全、高效運行的關鍵。霍爾電流傳感器 AH811憑借獨特的技…

[Java惡補day8] 3. 無重復字符的最長子串

給定一個字符串 s &#xff0c;請你找出其中不含有重復字符的 最長 子串 的長度。 示例 1: 輸入: s “abcabcbb” 輸出: 3 解釋: 因為無重復字符的最長子串是 “abc”&#xff0c;所以其長度為 3。 示例 2: 輸入: s “bbbbb” 輸出: 1 解釋: 因為無重復字符的最長子串是 “…