C# 实现语音听写

article/2025/8/20 17:37:08

本文系原创,禁止转载。

分享如何使用c#对接科大讯飞语音听写服务,简单高效地实现语音听写。

实现语音听写主要分为录音和语音识别两部分;录音是指获取设备声卡端口的音频数据并将之保存为音频文件,语音识别就是将刚才所述的音频文件通过调用讯飞的语音听写服务转换为文字。

相关的类库文件

1. 开源录音库 NAudio.dll 

  http://pan.baidu.com/s/1dFth2nv

2.语音听写库 msc.dll

  去讯飞开放平台申请相关的SDK

录音部分可以使用开源的.net音频处理类库NAudio.dll,它是托管的类库,使用起来比较方便,当然你也可以自己去读声卡录音,微软有相关的系统API,这里不详述。

录音部分核心代码:

 1 //初始化
 2             String FilePath = AppDomain.CurrentDomain.BaseDirectory + "Temp.wav";
 3             WaveIn m_waveSource = new WaveIn();
 4             m_waveSource.WaveFormat = new NAudio.Wave.WaveFormat(16000, 16, 1);// 16bit,16KHz,Mono的录音格式
 5             m_waveSource.DataAvailable += new EventHandler<WaveInEventArgs>(waveSource_DataAvailable);
 6             m_waveSource.RecordingStopped += new EventHandler<StoppedEventArgs>(waveSource_RecordingStopped);
 7             WaveFileWriter m_waveFile = new WaveFileWriter(m_fileName, m_waveSource.WaveFormat);
 8             
 9             //开始录音
10             m_waveSource.StartRecording();
11             
12             //保存到截获到的声音
13             private void waveSource_DataAvailable(object sender, WaveInEventArgs e)
14           {
15             if (m_waveFile != null)
16             {
17                 m_waveFile.Write(e.Buffer, 0, e.BytesRecorded);
18                 m_waveFile.Flush();
19             }
20           }
21         
22           //停止录音
23           m_waveSource.StopRecording();

录音完成后就可以进行语音听写了,讯飞提供的语音听写服务SDK中的类库msc.dll是原生的类库,在c#中没有办法像托管类库那样使用,需要通过使用Import的方式来引用,也可以包装成托管的类库来使用,这里只介绍第一种方法。

上述类库是msc.dll使用C语言封装的,在声明接口的时候需注意C语言的变量类型的表达方式与C#有很多不同之处;比如,在SDK中有很多针对内存地址操作的,所以涉及到很多的指针类型变量,而C#中指针概念相对较弱。提供两个解决思路,一是在C#中声明UnSafe代码,这样就可以像C/C++一样使用指针,二是使用IntPtr、ref 变量的表达方式,来实现“兼容”。
相关接口声明:

 1      [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
 2         public static extern int MSPLogin(string usr, string pwd, string @params);
 3 
 4         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
 5         public static extern IntPtr QISRSessionBegin(string grammarList, string _params, ref int errorCode);
 6 
 7         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
 8         public static extern int QISRGrammarActivate(string sessionID, string grammar, string type, int weight);
 9 
10         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
11         public static extern int QISRAudioWrite(string sessionID, IntPtr waveData, uint waveLen, int audioStatus, ref int epStatus, ref int recogStatus);
12 
13         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
14         public static extern IntPtr QISRGetResult(string sessionID, ref int rsltStatus, int waitTime, ref int errorCode);
15 
16         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
17         public static extern int QISRSessionEnd(string sessionID, string hints);
18 
19         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
20         public static extern int QISRGetParam(string sessionID, string paramName, string paramValue, ref uint valueLen);
21 
22         [DllImport("msc.dll", CallingConvention = CallingConvention.StdCall)]
23         public static extern int MSPLogout();

业务流程:
1.调用 MSPLogin(...)接口登入,可以只登入一次,但是必须保证在调用其他接口前先登入;
2.调用 QISRSessionBegin(...)开始一次语音听写;
3.调用 QISRAudioWrite(...) 分块写入音频数据
4.循环调用 QISRGetResult(...) 接口返回听写结果
5.调用 QISRSessionEnd(...) 主动结束本次听写
6.不再使用服务的时候 调用MSPLogout()登出,避免不必要的麻烦。
核心代码:

public string AudioToString(string inFile){int ret = 0;string text = String.Empty;FileStream fileStream = new FileStream(inFile, FileMode.OpenOrCreate);byte[] array = new byte[this.BUFFER_NUM];IntPtr intPtr = Marshal.AllocHGlobal(this.BUFFER_NUM);int audioStatus = 2;int epStatus = -1;int recogStatus = -1;int rsltStatus = -1;while (fileStream.Position != fileStream.Length){int waveLen = fileStream.Read(array, 0, this.BUFFER_NUM);Marshal.Copy(array, 0, intPtr, array.Length);ret = iFlyASR.QISRAudioWrite(this.m_sessionID, intPtr, (uint)waveLen, audioStatus, ref epStatus, ref recogStatus);if (ret != 0){fileStream.Close();throw new Exception("QISRAudioWrite err,errCode=" + ret);}if (recogStatus == 0){IntPtr intPtr2 = iFlyASR.QISRGetResult(this.m_sessionID, ref rsltStatus, 0, ref ret);if (intPtr2 != IntPtr.Zero){text += this.Ptr2Str(intPtr2);}}Thread.Sleep(500);}fileStream.Close();audioStatus = 4;ret = iFlyASR.QISRAudioWrite(this.m_sessionID, intPtr, 1u, audioStatus, ref epStatus, ref recogStatus);if (ret != 0){throw new Exception("QISRAudioWrite write last audio err,errCode=" + ret);}int timesCount = 0;while (true){IntPtr intPtr2 = iFlyASR.QISRGetResult(this.m_sessionID, ref rsltStatus, 0, ref ret);if (intPtr2 != IntPtr.Zero){text += this.Ptr2Str(intPtr2);}if (ret != 0){break;}Thread.Sleep(200);if (rsltStatus == 5 || timesCount++ >= 50){break;}}return text;}

自己设计以下UI交互,或者和你的应用程序结合一下,就可以让你的应用程序长一双会听的耳朵了!

结果:

 

转载于:https://www.cnblogs.com/mohanchen/p/7218240.html


http://chatgpt.dhexx.cn/article/4jawMDTe.shtml

相关文章

讯飞语音听写

第一步&#xff1a;将下载好的Sdk解压&#xff0c;将压缩文件中的libs下的jar文件放到项目中的libs包下&#xff0c;将压缩文件中的lisb下除jar文件放到main下的jniLibs包中 第二步&#xff1a;Sdk初始化,建议选择在自定义的application中初始化。 //初始化讯飞语音SpeechUtil…

讯飞语音——带你简单实现语音听写

语音听写 de 简单实现 一、前言 如果你没有在讯飞语音平台上创建应用&#xff0c;请先参考讯飞语音的详细配置使用 二、功能描述 语音听写和语音合成都是较为基础也是最常使用的两个基本功能。 语音合成是将文本转化为语音说出来&#xff0c;就是读文章。 语音听写是什么呢&a…

使用讯飞实现语音听写与语音合成功能

一、准备工作 1、首先你需要去科大讯飞的官网去注册一个账号&#xff0c;怎么注册我就不说了&#xff0c;然后去控制台&#xff0c;创建新应用。 2、下载对应的sdk&#xff0c;点击sdk下载&#xff0c;记住这里的APPID码&#xff0c;sdk初始化要用。 3、下载语音听写和在线语…

科大讯飞语音听写在vue2中的使用

安装 worker-loader版本是2.0.0 vue.config.js的配置如下chainWebpack:(config)=>{config.output.globalObject("this"); }, configureWebpack: (config) => {config.module.rules.push({test: /\.worker.js$/,use: {loader: "worker-loader",option…

vue+科大讯飞语音听写功能(解决针对vue new Worker报错问题)

参考1&#xff1a;vue科大讯飞语音听写功能(解决针对vue new Worker报错问题)_Other world的博客-CSDN博客 参考2&#xff1a;vue中使用web worker - Gerryli - 博客园 参考3&#xff1a;将PC浏览器、ZOOM等软件正在播放的音频实时转成文字&#xff01;讯飞语音输入法的妙用 -…

Unity2021接入讯飞语音听写(Android)

使用的引擎工具&#xff1a; Unity2021.3.19 android-studio-2021.1.21 第一步&#xff1a; 新建一个Android项目&#xff08;工程名字随便啦&#xff09; 然后新建一个library &#xff08;同上&#xff0c;库名自己命名吧&#xff09; Android环境目前就算是初步建立好了。 …

vue2中接入讯飞语音听写

首先先登录https://www.xfyun.cn/&#xff0c;在控制台中创建自己的app&#xff0c;并且拿到APPID。 下载crypto-js 与线程worker npm install crypto-js npm install worker-loader 官网中有示例文件&#xff0c;稍微改造一下&#xff0c;封装成组件就能使用了。 transco…

Java 接入讯飞语音听写Speech to Text(STT)功能

标题 讯飞认证配置封装监听器客户端工具 Speech2TextClient.java 对外开放接口对外开放接口实现结果参考 根据官方提供的 WebIATWS 工具扩展修改&#xff0c;接入了讯飞的语音听写(STT)服务 讯飞认证配置 public class XFAuthorityConfig {public static final String hostUr…

html5语音听写流式,iOS 讯飞语音听写(流式版)

最近项目中用到了讯飞的语音识别,然后稍微看了一下,里面有几个值得注意的点,记录一下,先说语音听写(流式版),实时语音转写后期会附上 ,文末有 demo //语音听写(流式版) 语音听写流式版其实没设么好说的,因为直接有 SDK,导入项目就可以了,需要注意的点就是每个创建的 APP 和 SDK…

科大讯飞语音听写(Android)

前面就不废话了&#xff0c;像申请应用&#xff0c;获取SDK等等&#xff0c;我相信大家应该都会的&#xff0c;科大讯飞采用的是两种语音听写功能,一种带有UI&#xff0c;一种没有UI&#xff0c;本人还是比较笨的&#xff0c;所以就写了较为简单的不带UI的语音听写&#xff0c;…

语音转写和语音听写_如何在Windows 10上使用语音听写

语音转写和语音听写 Windows 10’s Fall Creators Update makes voice dictation much easier to use. Now, you can immediately begin dictation by pressing a key WindowsH on your keyboard. You don’t have to dig through the Control Panel and set anything up first…

【超简单】之基于PaddleSpeech搭建个人语音听写服务

一、【超简单】之基于PaddleSpeech搭建个人语音听写服务 1.需求分析 亲们&#xff0c;你们要写会议纪要嘛&#xff1f;亲们&#xff0c;你们要写会议纪要嘛&#xff1f;亲们&#xff0c;你们要写会议纪要嘛&#xff1f; 当您面对成吨的会议录音&#xff0c;着急写会议纪要而…

遥感技术及高分遥感影像在地震中的应用及高分二号获取

长期以来&#xff0c;地震预报监测、灾害调查、灾情信息获取主要依靠实地勘测手段&#xff0c;其获取的数据精度和置信度虽然较高&#xff0c;但存在工作量大、效率低、费用高和信息不直观等缺点。遥感技术手段可在一定程度上克服传统实地勘测手段的缺点&#xff0c;并具有其他…

高分一号(GF-1)-中国高分辨率对地观测系统的第一颗卫星

2013年4月26日12时13分04秒由长征二号丁运载火箭成功发射&#xff0c;开启了中国对地观测的新时代。卫星全色分辨率是2米&#xff0c;多光谱分辨率为8米。高分一号卫星的宽幅多光谱相机幅宽达到了800公里。 “高分一号”的特点是增加了高分辨率多光谱相机&#xff0c;该相机的性…

历年(2017-2022)国产陆地观测卫星(高分1号2号6号等)外场绝对辐射定标系数

国产卫星绝对辐射定标系数&#xff08;2008——2022&#xff09; 2017年 参考博文&#xff1a;高分一号/二号/六号定标系数_desertsTsung的博客-CSDN博客

第059篇:高分二号遥感影像预处理流程(ENVI5.3.1平台+ENVI App Store中最新的中国国产卫星支持工具)

今天被袁老的新闻刷屏&#xff0c;湖南衡水县水稻基地传出好消息&#xff1a; 袁隆平团队第三代杂交水稻测产&#xff0c;测得晚稻平均亩产为911.7公斤 早稻晚稻实现亩产3061斤 伟大&#xff0c;除了伟大&#xff0c;不知道还能用什么词概括袁老的不凡成就&#xff01; 说到这…

envi5.3处理高分二号影像数据详细过程记录

目录 一、多光谱影像处理 1. 辐射定标 2.大气校正 1. 需要准备一些数据: 2.大气校正过程 3、正射校正 二、全色影像处理 1. 辐射定标 2. 正射校正 三、图像融合 1.几何配准 2.图像融合 高分二号处理流程 envi5.3的安装教程&#xff1a; ENVI5.3安装 安装完ENVI5.3后…

我国高分系列卫星遥感影像介绍

继上一篇介绍《遥感图像处理》的文章之后&#xff0c;本篇文章对我国的高分系列卫星遥感影像进行简单的整理。 高分系列卫星是在高分专项的支持下&#xff0c;也就是高分辨率对地观测系统重大专项&#xff0c;由国防科技工业局牵头&#xff0c;组织实施建设的一系列高分辨率对…

高分辨率遥感卫星影像在交通方面的应用及高分二号影像获取

高分辨率遥感影像在城市交通领域具有广泛的应用前景&#xff1a;如遥感交通调查、遥感影像地图与电子地图制作、道路工程地质遥感解译、交通安全与知道抗灾救灾、交通事故现场快速勘察、交通需求预测、车辆与车牌视频识别等等。高分辨率影像比如高分二号卫星、高分一号卫星&…

中国高分系列卫星介绍

中国高分系列卫星 中国高分系列卫星是"高分专项"所规划的高分辨率对地观测的系列卫星。它是《国家中长期科学和技术发展规划纲要&#xff08;2006&#xff5e;2020年&#xff09;》所确定的16个重大专项之一。由于课程汇报&#xff0c;所以作了一个PPT&#xff0c;在…