当前位置:首页 > 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接口可以让浏览器朗读文本内容:

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

指令处理逻辑

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

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;
}

完整集成示例

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

js实现siri

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实现vue

js实现vue

Vue.js 简介 Vue.js 是一个渐进式 JavaScript 框架,用于构建用户界面。其核心库专注于视图层,易于与其他库或现有项目整合。 实现 Vue.js 的基本步骤 安装 Vue.j…

js实现图片预览

js实现图片预览

使用FileReader API实现图片预览 通过FileReader对象读取用户选择的图片文件并显示预览: const input = document.getElementById('image…

js实现pdf在线预览

js实现pdf在线预览

使用PDF.js实现PDF在线预览 PDF.js是由Mozilla开发的一个开源JavaScript库,可以在网页中直接渲染PDF文件。以下是实现PDF在线预览的步骤: 引入PDF.js库 在HT…

js实现驼峰

js实现驼峰

实现驼峰命名的几种方法 使用正则表达式和字符串替换 通过正则表达式匹配字符串中的特定模式(如下划线或短横线),并将其后的字母转换为大写,同时移除分隔符。 function toCamelCase(s…

js实现自举

js实现自举

实现 JavaScript 自举的方法 JavaScript 自举(Bootstrap)通常指通过 JavaScript 动态加载自身或依赖的脚本,实现运行时环境的初始化或扩展。以下是几种常见实现方式…

js实现交换

js实现交换

交换变量的方法 在JavaScript中,交换两个变量的值有多种方法。以下是常见的几种实现方式: 使用临时变量 通过引入一个临时变量来存储其中一个变量的值,实现交换: let a = 1; le…