当前位置:首页 > JavaScript

js实现siri

2026-04-05 12:05:46JavaScript

实现基础语音识别

使用Web Speech API中的SpeechRecognition接口可以捕获用户的语音输入。以下是一个简单的实现示例:

const recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
recognition.lang = 'zh-CN'; // 设置语言为中文
recognition.interimResults = false; // 是否返回临时结果

recognition.onresult = (event) => {
  const transcript = event.results[0][0].transcript;
  console.log('识别结果:', transcript);
  processCommand(transcript); // 处理语音指令
};

recognition.start();

语音合成响应

使用SpeechSynthesis接口可以让浏览器朗读文本内容:

js实现siri

function speak(text) {
  const utterance = new SpeechSynthesisUtterance(text);
  utterance.lang = 'zh-CN'; // 设置语言
  utterance.rate = 1; // 语速
  window.speechSynthesis.speak(utterance);
}

指令处理逻辑

构建一个简单的命令匹配系统处理语音指令:

js实现siri

const commands = {
  '时间': () => {
    const now = new Date();
    speak(`现在是${now.getHours()}点${now.getMinutes()}分`);
  },
  '搜索': (query) => {
    window.open(`https://www.baidu.com/s?wd=${encodeURIComponent(query)}`);
    speak('正在为您搜索');
  }
};

function processCommand(text) {
  for (const [keyword, action] of Object.entries(commands)) {
    if (text.includes(keyword)) {
      const param = text.replace(keyword, '').trim();
      action(param);
      return;
    }
  }
  speak('抱歉,我不明白这个指令');
}

唤醒词检测

实现类似"Siri"的唤醒词检测功能:

let isListening = false;

recognition.onstart = () => {
  isListening = true;
};

recognition.onend = () => {
  if (isListening) {
    recognition.start(); // 自动重启监听
  }
};

function checkWakeWord(text) {
  if (text.toLowerCase().includes('siri')) {
    speak('我在听,请说');
    return true;
  }
  return false;
}

完整集成示例

将上述组件整合为一个完整的语音助手:

class VoiceAssistant {
  constructor() {
    this.recognition = new (window.SpeechRecognition || window.webkitSpeechRecognition)();
    this.setupRecognition();
    this.commands = {
      '时间': this.handleTime,
      '搜索': this.handleSearch
    };
  }

  setupRecognition() {
    this.recognition.lang = 'zh-CN';
    this.recognition.interimResults = false;
    this.recognition.continuous = true;

    this.recognition.onresult = (event) => {
      const transcript = event.results[0][0].transcript;
      if (this.checkWakeWord(transcript)) return;
      this.processCommand(transcript);
    };
  }

  speak(text) {
    const utterance = new SpeechSynthesisUtterance(text);
    utterance.lang = 'zh-CN';
    window.speechSynthesis.speak(utterance);
  }

  start() {
    this.recognition.start();
  }

  // 其他方法实现...
}

注意事项

  1. Web Speech API需要HTTPS环境或localhost才能正常工作
  2. 不同浏览器对语音识别和合成的支持程度不同
  3. 中文识别准确率可能低于英语,需要适当优化指令设计
  4. 移动端设备可能需要用户主动交互后才能启动语音识别

以上实现提供了基本框架,实际应用中可能需要根据具体需求扩展更多功能模块,如自然语言处理、上下文记忆等高级特性。

标签: jssiri
分享给朋友:

相关文章

js 进度条的实现

js 进度条的实现

使用 HTML 和 CSS 创建基础进度条 HTML 结构可以简单使用一个 div 元素作为容器,内部嵌套另一个 div 表示进度: <div class="progress-containe…

js实现报表

js实现报表

使用JavaScript实现报表 在JavaScript中实现报表功能可以通过多种方式完成,常见的方法包括使用原生JavaScript、第三方库(如Chart.js、D3.js)或结合后端数据渲染。以…

js实现抽奖

js实现抽奖

实现抽奖功能的基本思路 抽奖功能的核心是随机选择奖项并展示结果。可以通过数组存储奖项,利用随机数生成索引,最后通过动画增强用户体验。 准备奖项数据 定义一个数组存储奖项信息,每个奖项可以包含名称、图…

js实现图

js实现图

JavaScript 实现图的常用方法 在 JavaScript 中,图(Graph)可以通过多种方式实现,常见的包括邻接表(Adjacency List)和邻接矩阵(Adjacency Matrix…

js实现滑动

js实现滑动

实现滑动效果的方法 在JavaScript中实现滑动效果可以通过多种方式完成,以下是几种常见的实现方法: 使用CSS过渡和JavaScript触发 通过CSS定义过渡效果,JavaScript控制触…

js实现的游戏

js实现的游戏

JavaScript 游戏开发基础 JavaScript 是开发网页游戏的流行选择,因其无需插件即可在浏览器中运行。以下是一些关键技术和资源: HTML5 Canvas Canvas 提供了绘制图形…