前面我们展示过语音识别时,语音片段的制作,保存,加载,那么加载后只有波形,如何播放出来?看代码:

首先,加载保存的.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#,四)相关推荐

  1. java.lang.String_自己写的java.lang.String可以让jvm加载到吗?

    git 前言 老问题了,到网上也一搜一堆答案,比如,随便来一篇 乍一看好像没什么问题,但是在掌握自定义类加载器之后,知道如何打破双亲委派之后再回头来看这段话发现有两个问题: 1:凭什么你认为我现在是A ...

  2. 自己动手写CPU之第九阶段(2)——加载存储指令说明2(lwl、lwr)

    将陆续上传新书<自己动手写CPU>,今天是第38篇,我尽量每周四篇,但是最近已经很久没有实现这个目标了,一直都有事,不好意思哈. 开展晒书评送书活动,在亚马逊.京东.当当三大图书网站上,发 ...

  3. 手写Vue个人组件库——fl-Lazyimg 图片懒加载

    fl-Lazyimg图片懒加载 基础使用 将img绑定在fl-Lazyimg标签中,设置img的src-data为图片路径即可使用. [外链图片转存失败,源站可能有防盗链机制,建议将图片保存下来直接上 ...

  4. 记事本写java出现找不到或无法加载主类

    1.类名和.java文件名相同 2.执行javac 命令后出现.class文件 3以上无误运行java命令出现 找不到或无法加载主类 打开环境变量配置,删除CLASSPATH,再次运行即可成功 **在 ...

  5. 原来热加载如此简单,手动写一个 Java 热加载吧

    1. 什么是热加载 热加载是指可以在不重启服务的情况下让更改的代码生效,热加载可以显著的提升开发以及调试的效率,它是基于 Java 的类加载器实现的,但是由于热加载的不安全性,一般不会用于正式的生产环 ...

  6. 写给父亲的语音计算器(位图的加载,忽然领悟了资源编译器的加载c#,五)

    用小画家制作了,加,减,乘,除,0,1,2,3,4,5,6,7,8,9,=,(,)等,手绘的,48*48位图,保存为.bmp形式. 加载是这样的,好像抄写连连看程序时,抄过,直接上代码: string ...

  7. 写给父亲的语音计算器(加减乘除的处理C#,三)

    曾给孩子写了一个计算器把我累坏了,四个操作数,三个操作符,只有加减乘除四则运算,我的个神,三个操作符一共4*4*4=64种组合,这样写计算器,没完没了,今天写给父亲的语音计算器终于突破了.上代码: p ...

  8. C# 控制台语音计算器

    记得上高中时,给人当会计,帮忙结算月度工资:用的就是带语音功能的计算器! 当时用起来倍儿爽,于是速度加倍,效率加速:结果让老板赔了不少钱! 就是因为这个,才对语音计算器有了深刻印象!可能是这货坑了我! ...

  9. 【PowerShell语音计算器】

    [PowerShell语音计算器] 带中文发音功能的计算器程序,支持鼠标和小键盘输入,支持多种数值转人民币 大写,如:123.4--->壹佰贰拾叁点肆圆. 版本号 1.51 下载: http:/ ...

最新文章

  1. SpringCloud Feign声明式服务调用
  2. 初步认识Volatile-volatile 的作用
  3. String是一个奇怪的引用类型
  4. 十天学会PHP(第五版),十天学会php之第五天
  5. Codeforces 757B - Bash's Big Day(分解因子+hashing)
  6. 解决gensim报错AttributeError: type object ‘Word2Vec‘ has no attribute ‘load_word2vec_format‘
  7. Yahoo!团队实践分享:网站性能优化的34条黄金守则(二)
  8. Mesos超配:让集群利用率可以达到100%
  9. poj 2513 欧拉回路+并查集推断是否联通+Trie树
  10. Redis缓存相关问题总结
  11. VC6编译wxWINDOWS-2.4.0-编译EDISON源码
  12. AGV机器人RFID传感器CK-G06A与西门子1200PLC应用手册
  13. mmd Ray渲染 mikumikudance导入模型阴影很黑
  14. 用计算机怎么谈黑人团队,光遇黑人抬棺乐谱怎么弹奏 计算机演奏乐谱16
  15. Codeforces 1324D Pair of Topics
  16. POI获取单元格颜色与设置单元格颜色
  17. 小程序各个文件夹的作用分类
  18. 软件分析与用户体验分析
  19. 第十二届“挑战杯”QG学子载誉归来,荣获全国决赛“一等奖”
  20. oracle jdbc中文,oracle jdbc

热门文章

  1. oracle cpu使用率高怎么排查解决,OracleCPU占用率较高的处理方法
  2. 你认为困难的实时光线追踪,NVIDIA却做到了……
  3. Python可视化案例:Mutual Funds和ETFs对比
  4. ebcdic java_java EBCDIC
  5. 椭圆型变分问题理论及数值方法
  6. oracle中ln函数,PLSQL LN用法及代码示例
  7. Python爬虫练习:爬取软科世界大学学术排名
  8. 苹果手机iframe撑大父页解决办法
  9. 数字图像处理学习笔记4第四章 图像变换 附实验
  10. COMSOL中导出美观的三维几何结构