zoukankan      html  css  js  c++  java
  • waveOutOpen

    今天尝试做声音输入和播放这方面的东西.

    输入能捕获音频数据后, 调用播放时发现waveOutOpen这个函数返回值错误了.

    之前在XP系统下, 这个函数也是这样调用的啊, 跟踪了一下, 发现返回的错误码 32.

    百度, google一圈之后, 发现也有人有此问题, 但回答都没有在重点上.

    最后原因找到.

    原来在waveOutOpen(@hWaveOut, WAVE_MAPPER, @FFormat,
            DWORD(@waveOutProc), DWORD(Self),
            CALLBACK_FUNCTION);

    第三个参数的格式上. 此参数取数有一定的规则.

      typedef   struct   {
            WORD     wFormatTag;                 //   WAVE_FORMAT_PCM,必须写这个。
            WORD     nChannels;                   //   单声道就设1
            DWORD   nSamplesPerSec;         //   每秒采样,CD音质44100就可以了,你要的8000也可以。
            DWORD   nAvgBytesPerSec;       //   =   nSamplesPerSec   *   nBlockAlign
            WORD     nBlockAlign;               //   =   nChannels   *   wBitsPerSample   /   8,因为单位是bytes。
            WORD     wBitsPerSample;         //   分辨率,你要的是8;还可填16。
            WORD     cbSize;                       //   保留
    }   WAVEFORMATEX;

    而且跟你输入的音频数据的采样也有一定关系. 比如我的输入采样为:

    采样频率为16000,16位采样,单通道。

    那么参数设置应该是这样的:

      PCMFormat: TWaveFormatEx = (
        wFormatTag: WAVE_FORMAT_PCM;
        nChannels: 1;
        nSamplesPerSec: 16000;
        nAvgBytesPerSec: 32000;
        nBlockAlign: 2;
        wBitsperSample: 16;
        cbSize: 0 );

    最后, 希望能够帮助到你.

    简捷安防 欢迎试用
    http://www.jianjiesoft.com
    网络矩阵/视频监控平台

  • 相关阅读:
    <img src="">中src不合法导致Page_Load两次甚至多次
    在浏览器地址栏中查看cookie
    cookie在二级域名下的前后台的不同,后台C#调用前台js方法容易犯的错误
    VS调试快捷键
    href="#"与href="javascript:void(0)"的区别
    window.location.href()与window.open()区别
    兼容IE和Firefox的事件的写法
    sp.net中手写ajax检测用户是否存在?
    Eclipse快捷键大全
    修改navigationItem.backBarButtonItem.title的值无效的解决办法
  • 原文地址:https://www.cnblogs.com/doorsky/p/2677149.html
Copyright © 2011-2022 走看看