写给父亲的语音计算器(语音的加载播放C#,四)
前面我们展示过语音识别时,语音片段的制作,保存,加载,那么加载后只有波形,如何播放出来?看代码:
首先,加载保存的.mch波形文件:
string curFileName = "d:\\加.mch";
//1,加载声音
FileInfo fiif = new FileInfo(curFileName);
long len = fiif.Length;
int rbuffer = (int)len;
int size = 1920;
FileStream fs1 = new FileStream(curFileName, FileMode.Open, FileAccess.Read, FileShare.Read);
fs1.Read(bt1920, 0, rbuffer);//返回0表示读完
fs1.Close();
其次,这句话,很熟悉,与前面录音(waveInOpen函数)相同:
// 2,初始化waveout
WaveInHelper.Try(WaveNative.waveOutOpen(out m_WaveOut, device, format, m_BufferProc, 0, WaveNative.CALLBACK_FUNCTION));
第三步,解决回调函数m_BufferProc://3,回调函数(与bios中断(int)函数相似)
private WaveNative.WaveDelegate m_BufferProc = new WaveNative.WaveDelegate(WaveOutProc);
internal static void WaveOutProc(IntPtr hdrvr, int uMsg, int dwUser, ref WaveNative.WaveHdr wavhdr, int dwParam2)
{
if (uMsg == WaveNative.MM_WOM_DONE)
{
try
{
// 收到此消息,已经播放完毕
}
catch
{
}
}
}
其实这个回调只是个摆设,什么也没做。没办法,微软是这样定制的。
第四步,当你点击位图“+”时放音:先声明
private WaveNative.WaveHdr m_Header;
private byte[] m_HeaderData;
private GCHandle m_HeaderHandle;
private GCHandle m_HeaderDataHandle;
然后, // 4,放音
m_HeaderHandle = GCHandle.Alloc(m_Header, GCHandleType.Pinned);
m_Header.dwUser = (IntPtr)GCHandle.Alloc(this);
m_HeaderData = new byte[size];
m_Header.dwBufferLength = size;
m_HeaderData = bt1920;
m_HeaderDataHandle = GCHandle.Alloc(m_HeaderData, GCHandleType.Pinned);
m_Header.lpData = m_HeaderDataHandle.AddrOfPinnedObject();
WaveInHelper.Try(WaveNative.waveOutPrepareHeader(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header)));
WaveInHelper.Try(WaveNative.waveOutWrite(m_WaveOut, ref m_Header, Marshal.SizeOf(m_Header)));
我的个神啊!这才多少行,放音程序就搞定了,看来我的录音程序还有很大的进化空间啊,赶紧的!看来程序中有许多啰嗦,绕死个人。简单明白,对吧!
待续(慢慢来!...........)每天一点小改变☺
我的邮箱liuganggang_1978@163.com;734523623@qq.com
写给父亲的语音计算器(语音的加载播放C#,四)相关推荐
- java.lang.String_自己写的java.lang.String可以让jvm加载到吗?
git 前言 老问题了,到网上也一搜一堆答案,比如,随便来一篇 乍一看好像没什么问题,但是在掌握自定义类加载器之后,知道如何打破双亲委派之后再回头来看这段话发现有两个问题: 1:凭什么你认为我现在是A ...
- 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)
将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...
- 手写Vue个人组件库——fl-Lazyimg 图片懒加载
fl-Lazyimg图片懒加载 基础使用 将img绑定在fl-Lazyimg标签中,设置img的src-data为图片路径即可使用. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上 ...
- 记事本写java出现找不到或无法加载主类
1.类名和.java文件名相同 2.执行javac 命令后出现.class文件 3以上无误运行java命令出现 找不到或无法加载主类 打开环境变量配置,删除CLASSPATH,再次运行即可成功 **在 ...
- 原来热加载如此简单,手动写一个 Java 热加载吧
1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...
- 写给父亲的语音计算器(位图的加载,忽然领悟了资源编译器的加载c#,五)
用小画家制作了,加,减,乘,除,0,1,2,3,4,5,6,7,8,9,=,(,)等,手绘的,48*48位图,保存为.bmp形式. 加载是这样的,好像抄写连连看程序时,抄过,直接上代码: string ...
- 写给父亲的语音计算器(加减乘除的处理C#,三)
曾给孩子写了一个计算器把我累坏了,四个操作数,三个操作符,只有加减乘除四则运算,我的个神,三个操作符一共4*4*4=64种组合,这样写计算器,没完没了,今天写给父亲的语音计算器终于突破了.上代码: p ...
- C# 控制台语音计算器
记得上高中时,给人当会计,帮忙结算月度工资:用的就是带语音功能的计算器! 当时用起来倍儿爽,于是速度加倍,效率加速:结果让老板赔了不少钱! 就是因为这个,才对语音计算器有了深刻印象!可能是这货坑了我! ...
- 【PowerShell语音计算器】
[PowerShell语音计算器] 带中文发音功能的计算器程序,支持鼠标和小键盘输入,支持多种数值转人民币 大写,如:123.4--->壹佰贰拾叁点肆圆. 版本号 1.51 下载: http:/ ...
最新文章
- SpringCloud Feign声明式服务调用
- 初步认识Volatile-volatile 的作用
- String是一个奇怪的引用类型
- 十天学会PHP(第五版),十天学会php之第五天
- Codeforces 757B - Bash's Big Day(分解因子+hashing)
- 解决gensim报错AttributeError: type object ‘Word2Vec‘ has no attribute ‘load_word2vec_format‘
- Yahoo!团队实践分享:网站性能优化的34条黄金守则(二)
- Mesos超配:让集群利用率可以达到100%
- poj 2513 欧拉回路+并查集推断是否联通+Trie树
- Redis缓存相关问题总结
- VC6编译wxWINDOWS-2.4.0-编译EDISON源码
- AGV机器人RFID传感器CK-G06A与西门子1200PLC应用手册
- mmd Ray渲染 mikumikudance导入模型阴影很黑
- 用计算机怎么谈黑人团队,光遇黑人抬棺乐谱怎么弹奏 计算机演奏乐谱16
- Codeforces 1324D Pair of Topics
- POI获取单元格颜色与设置单元格颜色
- 小程序各个文件夹的作用分类
- 软件分析与用户体验分析
- 第十二届“挑战杯”QG学子载誉归来,荣获全国决赛“一等奖”
- oracle jdbc中文,oracle jdbc