web接入科大讯飞实时语音转写模块

简介

该模块提供了与科大讯飞语音识别API的集成,实现实时语音转写功能。通过WebSocket连接,将麦克风采集的音频数据发送至科大讯飞服务器,并接收返回的识别结果。

安装

复制代码
npm install kdxf-web

基本用法

javascript 复制代码
import createIatRecorder from 'kdxf-web';
const config = {
    hostUrl: "wss://iat-api.xfyun.cn/v2/iat",
    host: "iat-api.xfyun.cn",
    appid: "", // 填写您的科大讯飞应用ID
    apiSecret: "", // 填写您的科大讯飞API密钥
    apiKey: "", // 填写您的科大讯飞API密钥
    uri: "/v2/iat"
};
const iatRecorder = createIatRecorder(config);
​
// 设置文本变化回调
iatRecorder.onTextChange = (text) => {
  console.log('当前识别文本:', text);
};
​
// 设置识别完成回调
iatRecorder.onRecognitionComplete = (text) => {
  console.log('识别完成:', text);
};
​
// 设置状态变化回调
iatRecorder.onWillStatusChange = (oldStatus, newStatus) => {
  console.log(`状态从 ${oldStatus} 变为 ${newStatus}`);
};
​
// 开始录音并识别
document.getElementById('startBtn').onclick = () => {
  iatRecorder.start();
};
​
// 停止录音
document.getElementById('stopBtn').onclick = () => {
  iatRecorder.stop();
};

API 参考

主要方法

方法 描述
start() 开始录音并进行语音识别
stop() 停止录音,等待最终识别结果
recorderStop() 完全停止录音并释放所有资源

回调函数

回调 描述
onTextChange 当识别文本变化时触发
onRecognitionComplete 当语音识别完成时触发
onWillStatusChange 当状态即将改变时触发

状态值

录音器有以下几种状态:

  • null: 未开始录音
  • ing: 录音中
  • end: 录音结束

配置参数说明

参数 类型 描述
hostUrl String WebSocket服务地址
host String 主机名
appid String 科大讯飞应用ID
apiSecret String 科大讯飞API密钥
apiKey String 科大讯飞API密钥
uri String API路径

工作原理

  1. 初始化录音设备和WebSocket连接
  2. 采集用户麦克风的音频数据
  3. 对音频数据进行必要的预处理(重采样到16kHz)
  4. 通过WebSocket发送音频数据到科大讯飞服务器
  5. 接收并处理服务器返回的识别结果
  6. 触发相应回调函数通知应用程序

注意事项

  1. 使用前需要在科大讯飞开放平台注册并创建应用,获取相应的appid、apiKey和apiSecret
  2. 确保用户允许浏览器访问麦克风,否则将无法进行录音
  3. 该模块依赖Web Audio API和WebSocket API,确保使用的浏览器支持这些功能
  4. 每次使用完毕后应调用recorderStop()方法释放资源
  5. 默认最大录音时间为60秒,超时将自动停止

示例项目

完整示例代码:

ini 复制代码
<template>
  <div class="speech-recognition">
    <h3>科大讯飞语音识别</h3>
    
    <div class="buttons">
      <button @click="startRecording" :disabled="isRecording">开始录音</button>
      <button @click="stopRecording" :disabled="!isRecording">停止录音</button>
    </div>
    
    <div class="status">当前状态:{{ status }}</div>
    
    <div class="result">
      <p>{{ result || '等待识别结果...' }}</p>
    </div>
  </div>
</template>
​
<script setup>
import { ref, onMounted, onUnmounted } from 'vue';
import createIatRecorder from 'kdxf-web';
​
// 状态变量
const result = ref('');
const status = ref('准备就绪');
const isRecording = ref(false);
const recorder = ref(null);
​
// 初始化语音识别器
onMounted(() => {
  const config = {
    hostUrl: "wss://iat-api.xfyun.cn/v2/iat",
    host: "iat-api.xfyun.cn",
    appid: "您的应用ID",
    apiSecret: "您的API密钥",
    apiKey: "您的API密钥",
    uri: "/v2/iat"
  };
  
  recorder.value = createIatRecorder(config);
  
  // 设置回调函数
  recorder.value.onTextChange = (text) => {
    result.value = text;
  };
  
  recorder.value.onWillStatusChange = (oldStatus, newStatus) => {
    if (newStatus === 'ing') {
      status.value = '录音中...';
      isRecording.value = true;
    } else if (newStatus === 'end') {
      status.value = '处理中...';
    } else if (newStatus === 'null') {
      status.value = '准备就绪';
      isRecording.value = false;
    }
  };
  
  recorder.value.onRecognitionComplete = (text) => {
    result.value = text;
    status.value = '识别完成';
    isRecording.value = false;
  };
});
​
// 开始录音
const startRecording = async () => {
  if (recorder.value) {
    result.value = '';
    await recorder.value.start();
  }
};
​
// 停止录音
const stopRecording = () => {
  if (recorder.value) {
    recorder.value.stop();
  }
};
​
// 组件销毁时释放资源
onUnmounted(() => {
  if (recorder.value) {
    recorder.value.recorderStop();
  }
});
</script>
​
<style scoped>
.speech-recognition {
  max-width: 500px;
  margin: 0 auto;
  padding: 20px;
  text-align: center;
}
​
.buttons {
  margin: 20px 0;
}
​
button {
  padding: 8px 16px;
  margin: 0 8px;
  cursor: pointer;
}
​
.result {
  margin-top: 20px;
  min-height: 100px;
  padding: 10px;
  text-align: left;
  border: 1px solid #ddd;
  border-radius: 4px;
}
​
.status {
  font-size: 14px;
  color: #666;
}
</style>

高级配置

除了基本配置外,还可以设置语言、方言等参数:

ini 复制代码
// 设置为英语识别
iatRecorder.language = 'en_us';
​
// 设置方言(普通话、粤语等)
iatRecorder.accent = 'cantonese';

更多信息请参考科大讯飞开放平台文档

相关推荐
一只小阿乐10 小时前
react 封装弹框组件 传递数据
前端·javascript·react.js
533_10 小时前
[element-plus] el-tree 动态增加节点,删除节点
前端·javascript·vue.js
禁止摆烂_才浅10 小时前
前端开发小技巧-【JavaScript】- 获取元素距离 document 顶部的距离
前端·javascript·react.js
wshzd10 小时前
LLM之Agent(二十九)|LangChain 1.0核心组件介绍
前端·javascript·langchain
程序猿_极客10 小时前
Vue 2脚手架从入门到实战核心知识点全解析(day6):从工程结构到高级通信(附代码讲解)
前端·javascript·vue.js·vue2学习笔记
q***718511 小时前
海康威视摄像头ISUP(原EHOME协议) 摄像头实时预览springboot 版本java实现,并可以在浏览器vue前端播放(附带源码)
java·前端·spring boot
web加加11 小时前
vue3 +vite项目页面防f12,防打开控制台
前端·javascript·vue.js
A尘埃12 小时前
大模型应用python+Java后端+Vue前端的整合
java·前端·python
遥遥晚风点点12 小时前
Spark导出数据文件到HDFS
前端·javascript·ajax
克里斯蒂亚L13 小时前
开发一个计时器组件
前端·浏览器