欧美bbbwbbbw肥妇,免费乱码人妻系列日韩,一级黄片

原生JavaScrip實現(xiàn)語音識別的示例詳解

 更新時間:2025年03月14日 08:21:26   作者:JYeontu  
語音識別轉(zhuǎn)文本看似是很有難度的一個功能,但你知道嗎,使用原生?JavaScript?也能實現(xiàn)語音識別功能,下面小編就來和大家講講具體的實現(xiàn)方法吧

用過微信的同學(xué)大部分都使用過語音轉(zhuǎn)文本功能吧?語音識別轉(zhuǎn)文本看似是很有難度的一個功能,但你知道嗎?使用原生 JavaScript 也能實現(xiàn)語音識別功能。

效果展示

SpeechRecognition

MDN文檔:developer.mozilla.org/en-US/docs/Web/API/SpeechRecognition

1、基礎(chǔ)定義

// 瀏覽器兼容性處理
const SpeechRecognition = window.SpeechRecognition || window.webkitSpeechRecognition;
const recognition = new SpeechRecognition();

2、核心參數(shù)配置

參數(shù)類型作用描述
continuousboolean是否持續(xù)識別(默認(rèn)false)
interimResultsboolean是否返回臨時識別結(jié)果(默認(rèn)false)
langstring識別語言(如'zh-CN'/'en-US')
maxAlternativesnumber返回候選結(jié)果數(shù)量(默認(rèn)1)

功能實現(xiàn)

1、實時結(jié)果處理

recognition.onresult = (event) => {
  const results = event.results;
  const resultIndex = event.resultIndex;
  
  // 臨時結(jié)果和最終結(jié)果分離處理
  const current = results[resultIndex];
  const isFinal = current.isFinal;
  
  if (isFinal) {
    // 處理最終結(jié)果
    saveToDatabase(current[0].transcript); 
  } else {
    // 實時顯示臨時結(jié)果
    showInterimResult(current[0].transcript);
  }
};

2、移動端適配方案

// Android 自動重啟識別
recognition.onend = () => {
  if (/Android/.test(navigator.userAgent)) {
    setTimeout(() => recognition.start(), 500);
  }
};

// iOS 特殊處理
if (/iPhone|iPad/.test(navigator.userAgent)) {
  recognition.continuous = false;
}

應(yīng)用場景

1、語音指令系統(tǒng)

recognition.onresult = (event) => {
 const command = event.results[0][0].transcript.toLowerCase();
 if(command.includes('刷新')) location.reload();
 if(command.includes('搜索')) triggerSearch(command);
};

2、實時字幕生成

語音筆記應(yīng)用

Demo源碼

<!DOCTYPE html>
<html lang="zh-CN">
<head>
  <meta charset="UTF-8">
  <meta name="viewport" content="width=device-width, initial-scale=1.0">
  <title>語音轉(zhuǎn)文字實時演示</title>
  <style>
    body {
      font-family: 'Segoe UI', sans-serif;
      max-width: 800px;
      margin: 2rem auto;
      padding: 0 1rem;
    }
    
    #status {
      width: 20px;
      height: 20px;
      border-radius: 50%;
      display: inline-block;
      margin-right: 10px;
      background: #ccc;
    }
    
    #status.active {
      background: #00c853;
      animation: pulse 1s infinite;
    }
    
    @keyframes pulse {
      0% { box-shadow: 0 0 0 0 rgba(0,200,83,0.4); }
      70% { box-shadow: 0 0 0 10px rgba(0,200,83,0); }
      100% { box-shadow: 0 0 0 0 rgba(0,200,83,0); }
    }

    #transcript {
      border: 1px solid #ddd;
      min-height: 150px;
      padding: 1rem;
      margin: 1rem 0;
      white-space: pre-wrap;
      background: #f8f9fa;
    }

    .interim {
      color: #666;
      font-style: italic;
    }
  </style>
</head>
<body>
  <h2>實時語音轉(zhuǎn)文字演示</h2>
  
  <div>
    <span id="status"></span>
    <button id="toggleBtn">開始識別</button>
    <span id="lang">當(dāng)前語言:中文</span>
  </div>

  <div id="transcript"></div>

  <script>
    const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
    const transcriptDiv = document.getElementById('transcript');
    const statusEl = document.getElementById('status');
    const toggleBtn = document.getElementById('toggleBtn');

    // 基礎(chǔ)配置
    recognition.continuous = true;
    recognition.interimResults = true;
    recognition.lang = 'zh-CN';

    // 狀態(tài)管理
    let isRecognizing = false;

    // 事件處理
    recognition.onstart = () => {
      isRecognizing = true;
      statusEl.classList.add('active');
      toggleBtn.textContent = '停止識別';
    };

    recognition.onend = () => {
      isRecognizing = false;
      statusEl.classList.remove('active');
      toggleBtn.textContent = '開始識別';
    };

    recognition.onresult = (event) => {
      let final = '';
      let interim = '';

      for (let i = event.resultIndex; i < event.results.length; i++) {
        const transcript = event.results[i][0].transcript;
        if (event.results[i].isFinal) {
          final += transcript + '\n';
        } else {
          interim += transcript;
        }
      }

      transcriptDiv.innerHTML = final.replace(/\n/g, '<br>') + 
        `<span class="interim">${interim}</span>`;
    };

    recognition.onerror = (event) => {
      console.error('識別錯誤:', event.error);
      alert(`識別錯誤: ${event.error}`);
    };

    // 按鈕控制
    toggleBtn.addEventListener('click', () => {
      if (isRecognizing) {
        recognition.stop();
      } else {
        recognition.start();
      }
    });

    // 權(quán)限檢測
    if (!('webkitSpeechRecognition' in window)) {
      transcriptDiv.innerHTML = '?? 當(dāng)前瀏覽器不支持語音識別功能';
      toggleBtn.disabled = true;
    }
  </script>
</body>
</html>

瀏覽器兼容

實測edge可以正常識別,chrome需要梯子,局限性還是比較大。

到此這篇關(guān)于原生JavaScrip實現(xiàn)語音識別的示例詳解的文章就介紹到這了,更多相關(guān)JavaScrip語音識別內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!

相關(guān)文章

  • bootstrap中的導(dǎo)航條實例代碼詳解

    bootstrap中的導(dǎo)航條實例代碼詳解

    本文通過實例代碼給大家介紹了bootstrap中的導(dǎo)航條,非常不錯,具有一定的參考借鑒價值,需要的朋友可以參考下
    2019-05-05
  • javascript將DOM節(jié)點添加到文檔的方法實例分析

    javascript將DOM節(jié)點添加到文檔的方法實例分析

    這篇文章主要介紹了javascript將DOM節(jié)點添加到文檔的方法,對比分析了javascript的兩種節(jié)點創(chuàng)建的方法,涉及javascript節(jié)點操作及運行時間計算的相關(guān)技巧,需要的朋友可以參考下
    2015-08-08
  • JS中異常拋出和處理方法圖文詳解

    JS中異常拋出和處理方法圖文詳解

    JavaScript和其他語言一樣,都擁有捕獲異常的機制,下面這篇文章主要給大家介紹了關(guān)于JS中異常拋出和處理的相關(guān)資料,文中通過實例代碼介紹的非常詳細(xì),需要的朋友可以參考下
    2022-11-11
  • express異步函數(shù)異常捕獲示例詳解

    express異步函數(shù)異常捕獲示例詳解

    這篇文章主要給大家介紹了關(guān)于express異步函數(shù)異常捕獲的相關(guān)資料,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2020-11-11
  • 淺談FastClick 填坑及源碼解析

    淺談FastClick 填坑及源碼解析

    這篇文章主要介紹了淺談FastClick 填坑及源碼解析,小編覺得挺不錯的,現(xiàn)在分享給大家,也給大家做個參考。一起跟隨小編過來看看吧
    2018-03-03
  • 微信公眾平臺 發(fā)送模板消息(Java接口開發(fā))

    微信公眾平臺 發(fā)送模板消息(Java接口開發(fā))

    這篇文章主要介紹了微信公眾平臺 發(fā)送模板消息(Java接口開發(fā)),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧
    2019-04-04
  • 原生js+css調(diào)節(jié)音量滑塊

    原生js+css調(diào)節(jié)音量滑塊

    這篇文章主要介紹了原生js+css調(diào)節(jié)音量滑塊,文中示例代碼介紹的非常詳細(xì),具有一定的參考價值,感興趣的小伙伴們可以參考一下
    2020-01-01
  • BootStrap表單控件之文本域textarea

    BootStrap表單控件之文本域textarea

    這篇文章主要介紹了BootStrap表單控件之文本域textarea,需要的朋友可以參考下
    2017-05-05
  • javascript將數(shù)組插入到另一個數(shù)組中的代碼

    javascript將數(shù)組插入到另一個數(shù)組中的代碼

    下面的代碼主要功能就是將數(shù)組arr2插入到數(shù)組arr1的index位置,需要的朋友可以參考下
    2013-01-01
  • JavaScript實現(xiàn)獲取設(shè)備網(wǎng)絡(luò)連接信息

    JavaScript實現(xiàn)獲取設(shè)備網(wǎng)絡(luò)連接信息

    作為前端開發(fā),做好用戶體驗是很重要的,日常開發(fā)中我們經(jīng)常可以遇到用戶網(wǎng)速慢導(dǎo)致靜態(tài)資源加載慢,從而給影響用戶體驗,所以本文來和大家分享一個有趣的API,可以實現(xiàn)獲取網(wǎng)絡(luò)信息
    2023-05-05

最新評論