1.需求

上传一个音频文件(例如英语听力的音频)与音频对应的原文word文档。大概估算音频中一段对话到另一端对话的时间间隔,将音频截取为不同对话的小音频文件,通过百度语音识别转换成英文,然后与原文对比。

2.先上结果图吧。大概的效果如图所示

timespan是每段对话的开始时间戳,file_url是我上传到服务器的音频文件地址,baiduText是百度语音识别的结果,contractText是匹配之后的结果,percent是字符串相似度匹配百分比。

3.实现思路

3.1.上传文件并保存就不说了。后面会放源码。

3.2.异步循环处理音频,直到结束

3.3.读取音频文件,根据时间间隔获取需要的时间戳

这里需要先将音频文件转换为wav的波形文件。(第一版本的时候我用的NAudio,但是没用好)

根据波形数据,判断是否有声音,并记录下有声音和没声音的时间点

3.4.根据时间点,截取音频。我用的是NAudio。由于百度只能识别60s以下的音频,所以对超过60s的音频做了处理。另外百度识别音频最快的格式是pcm,所以也做了转换,音频转换也是用的NAudio

(****这里修改了一个bug,截取超过60s的音频时,要重新读音频流,然后再截取,不然后面的时间会乱。截图我就懒得换了)

3.5.百度语音识别可以看百度官网。我这边的access_token和过期时间直接写xml文件了

3.6.百度语音识别的结果与原文匹配

3.7.中文匹配,匹配的每个字符,匹配算法如下

3.8.英文匹配的每个单词

4.源码下载

https://github.com/zhaoshangtong/AudioTool

5.结语

目前这是第一个版本,肯定有不完善的地方。欢迎交流~

ps:不用推荐,不用点赞,要脸~~哈哈哈哈哈哈哈哈哈哈

C#音频截取与原文匹配的更多相关文章

  1. C#音频截取与原文匹配2:使用ffmpeg处理音频文件

    ffmpeg获取音频时间 ffmpeg转换音频格式(单声道,16000hz,16bit  wav) ffmpeg截取音频 不知道是不是错觉,感觉ffmpeg比NAudio要快啊~ 那么这就是第二个版本 ...

  2. ios 字符串处理:截取字符串、匹配字符串、分隔字符串

    1.截取字符串 NSString*string =@"sdfsfsfsAdfsdf";string = [string substringToIndex:7];//截取掉下标7之后 ...

  3. 那些年,我们一起被坑的H5音频

    原文地址:http://weibo.com/p/23041874d6cedd0102vkbr   不要被这么文艺的标题吓到,这里不会跟你讲述中学时期泡妞史,也不会有其它什么现实不该有而小说噼里啪啦不能 ...

  4. idea java 正则表达式匹配替换

    原文匹配中文 excelMap.get\((\"[\u4E00-\u9F15]+\")\) 目标 excelMap.get\($1.hashCode\(\)\)

  5. 怎么用JS截取字符串中第一个和第二个字母间的部分?

    一.JS中用正则判断字符串是否有匹配正则的字符串部分,格式如下: /[a-zA-Z](.*?)[a-zA-Z]/.test('1a123d45678901a2') “.test”前面的部分是正则表达式 ...

  6. linux shell 字符串操作详解 (长度,读取,替换,截取,连接,对比,删除,位置 )

    在做shell批处理程序时候,经常会涉及到字符串相关操作.有很多命令语句,如:awk,sed都可以做字符串各种操作. 其实shell内置一系列操作符号,可以达到类似效果,大家知道,使用内部操作符会省略 ...

  7. Adobe Edge Animate –使用EdgeCommons加载和播放音频

    Adobe Edge Animate –使用EdgeCommons加载和播放音频 版权声明: 本文版权属于 北京联友天下科技发展有限公司. 转载的时候请注明版权和原文地址. 在Edge中,可以new一 ...

  8. Matlab之合并音频

    程序功能: 1.读入wav下的所有音频 2.每个音频截取前0.6秒 3.合并每个音频 clear all; cd = 'wav'; waveFiles = dir(fullfile(cd,'*.wav ...

  9. 匹配中文字符的正则表达式: [/u4e00-/u9fa5]

    原文:匹配中文字符的正则表达式: [/u4e00-/u9fa5] 这里是几个主要非英文语系字符范围(google上找到的): 2E80-33FFh:中日韩符号区.收容康熙字典部首.中日韩辅助部首.注音 ...

随机推荐

  1. 彻底理解Python多线程中的setDaemon与join【配有GIF示意】

    在进行Python多线程编程时, join() 和 setDaemon() 是最常用的方法,下面说说两者的用法和区别. 1.join () 例子:主线程A中,创建了子线程B,并且在主线程A中调用了B. ...

  2. UI控件拖动失效

    问题描述:ui Slider滑块点击时需要特效,直接在滑块上添加OnPointerDown事件与OnPointerUp事件,但是当拖动时会直接触发OnPointerUp事件,而且拖动相关的事件失效 原 ...

  3. django-模板之for标签(十)

  4. 数据后台管理(五)AOP日志

    为了增加数据的安全性,在数据管理的过程中,我们需要将操作者访问时间,操作者的名称,访问的IP,访问资源的URL,执行时长,访问方法记录下来存储到数据库中,并可以通过页面查看. 1.将日志信息存储到数据 ...

  5. Ubuntu 18.04 下安装pip3及pygame模块

    1.Ubuntu下pip3的安装.升级.卸载 安装pip3 sudo apt-get install python3-pip 升级pip3 sudo pip3 install --upgrade pi ...

  6. 使用ASP.NET Core 3.x 构建 RESTful API - 2. 什么是RESTful API

    1. 使用ASP.NET Core 3.x 构建 RESTful API - 1.准备工作 什么是REST REST一词最早是在2000年,由Roy Fielding在他的博士论文<Archit ...

  7. JAVA程序打包方法-挺好

    https://blog.csdn.net/dj0721/article/details/72462688/

  8. Ubuntu13.10编译android源码中遇到的问题

    1. jdk的版本不对 我开始安装的是最新的jdk7,但是编译时会出现jdk的版本

  9. 如何修改git上传代码的作者姓名

    随着IT行业的不断壮大,开源的东西越来越多,使用git来进行代码管理的人自然也越来越多,而且很多人的git账户都不是自己的本人名字,但是在公司工作的时候为了遇到问题能够定位责任人和便于区分提交人,通常 ...

  10. 学习笔记 : python 文件操作

    1.如果文件路径带有   \ 比如  open('c:\python\test.txt') 会报:SyntaxError: (unicode error) 'unicodeescape' codec ...