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
    网络矩阵/视频监控平台

  • 相关阅读:
    flexible
    arcgis
    vue 语法糖
    sass 的安装 编译 使用
    nodeJs
    微信小程序
    linux cgroups 简介
    git命令
    sublime笔记
    工程优化学习(进退法、黄金分割法、二次插值法、三次插值法、最速下降法)
  • 原文地址:https://www.cnblogs.com/doorsky/p/2677149.html
Copyright © 2011-2022 走看看