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

  • 相关阅读:
    [转载]项目风险管理七种武器之引言
    [转载]基于TFS实践敏捷-Scrum模式运用
    [转载]基于TFS实践敏捷-工作项跟踪
    [转载]TFS入门指南
    SVN — subclipse操作指引
    Java 中 方法名或类名 变更 同时 更新 所有引用的 类名或方法名 的解决方案
    Java import javax.servlet 出错
    java 中 SVN 设置所有文件及子目录 needs-lock, svn 提交时自动设置 needs-lock, 及版本不一致问题
    vmware 传输(vmdb)错误-32:pipe:read failed 解决方法
    Web.xml配置详解
  • 原文地址:https://www.cnblogs.com/doorsky/p/2677149.html
Copyright © 2020-2023  润新知