waveOutOpen 函数说明

news/2024/7/6 5:36:12

使用心得:首先打开声音输出设备,然后初始化输出内存,并保证不要使用缓存;(调用waveOutPrepareHeader设置内存),然后通过回调函数进行状态通知。通过waveOutWrite进行声音播放;

最后调用waveOutUnprepareHeader释放内存,waveOutReset(m_hWaveOut);
   waveOutClose(m_hWaveOut);关闭音频设备

//声明:
waveOutOpen(
  lphWaveOut: PHWaveOut;  {用于返回设备句柄的指针; 如果 dwFlags=WAVE_FORMAT_QUERY, 这里应是 nil}
  uDeviceID: UINT;        {设备ID; 可以指定为: WAVE_MAPPER, 这样函数会根据给定的波形格式选择合适的设备}
  lpFormat: PWaveFormatEx; {TWaveFormat 结构的指针; TWaveFormat 包含要申请的波形格式}
  dwCallback: DWORD       {回调函数地址或窗口句柄; 若不使用回调机制, 设为 nil}
  dwInstance: DWORD       {给回调函数的实例数据; 不用于窗口}
  dwFlags: DWORD          {打开选项}
): MMRESULT;              {成功返回 0; 可能的错误值见下:}

MMSYSERR_BADDEVICEID = 2{设备ID超界}
MMSYSERR_ALLOCATED   = 4{指定的资源已被分配}
MMSYSERR_NODRIVER    = 6{没有安装驱动程序}
MMSYSERR_NOMEM       = 7{不能分配或锁定内存}
WAVERR_BADFORMAT     = 32; {设备不支持请求的波形格式}

//TWaveFormatEx 结构:
TWaveFormatEx = packed record
  wFormatTag: Word;      {指定格式类型; 默认 WAVE_FORMAT_PCM = 1;}
  nChannels: Word;       {指出波形数据的通道数; 单声道为 1, 立体声为 2}
  nSamplesPerSec: DWORD; {指定样本速率(每秒的样本数)}一般为8000
  nAvgBytesPerSec: DWORD; {指定数据传输的平均速率(每秒的字节数)} 每秒的字节数: 
  nBlockAlign: Word;     {指定块对齐(单位字节), 块对齐是数据的最小单位}
  wBitsPerSample: Word;  {采样大小(字节)}每个样本的BIT数目,一般为16
  cbSize: Word;          {应该是该结构的大小}
end;
{16 位立体声 PCM 的块对齐是 4 字节(每个样本2字节, 2个通道)}

//打开选项 dwFlags 的可选值:
WAVE_FORMAT_QUERY = $0001;    {只是判断设备是否支持给定的格式, 并不打开}
WAVE_ALLOWSYNC    = $0002;   


http://www.niftyadmin.cn/n/3566371.html

相关文章

通过CMWAP看电视全攻zt

一直以为在CMWAP上看电视是不可能的,不过有一天我在小9的收藏夹里上到Windows Madia.com里发现可以看里面的视频,就觉得看电视应该也不成问题,经过一翻查找资料终于实现了解CMWAP上看电视和听广播。现将攻略全文奉上,希望大家能更…

关于java.net.URLEncoder.encode编码问题

Q:java.net.URLEncoder.encode里的编码和什么有关的? A:使用urlencoder编码会将中文变成你在浏览器地址栏看到的%XX形式,至于选择哪种enc编码跟你jvm的default charset有关,因为java项目一般用的都是UTF-8编码,为了防止你的中文以…

MySQL执行SHOW STATUS查询服务器状态状态之Handler_read_* 详解

在MySQL里,我们一般使用SHOW STATUS查询服务器状态,语法一般来说如下:SHOW [GLOBAL | SESSION] STATUS [LIKE ‘pattern’ | WHERE expr]执行命令后会看到很多内容,其中有一部分是Handler_read_*,它们显示了数据库处理…

VMware下OSSIM 5.2.0的下载、安装和初步使用(图文详解)

不多说,直接上干货! 入门阶段不建议选用最新的版本。  采用OSSIM 4.11 到 OSSIM5.0.3 之间任何版本做实验,sensor的状态都会是“V”。 建议,入门,采用OSSIM5.0.0 下载: 链接:https://pan.baidu.com/s/1…

CppUnit - 测试驱动开发入门

测试驱动开发是一个现在软件界最流行的词汇之一,可是很多人还是不得其门而入。这篇文章想通过对于 CppUnit的介绍,给予读者一个基本的映像。如果你熟知CppUnit的使用,请参阅我的另一篇文章:CppUnit代码简介 - 第一部分&#xff0c…

音频程序学习

#pragma comment(lib,"winmm") #include <mmsystem.h> #include <mmreg.h> waveOutOpen函数介绍2007-08-30 19:08(from MSDN) 这个函数打开一个给定的波形音频输出装置来进行回放。 &#xff08;The waveOutOpen function opens the given waveform-audi…

xargs参数代换

xargs 的作用是产生命令需要的参数&#xff0c;主要是用于在命令结合管道的使用中给一些不支持管道的命令提供输入参数。例如&#xff1a;利用find找出~ 目录下由特殊权限的文件&#xff0c;并用ls命令列出文件列表&#xff1a;[whxlocalhost ~]$ find ~ -perm 7000 | ls-l tot…

CppUnit使用指南

测试驱动开发的原则&#xff1a; 先写测试代码&#xff0c;然后编写符合测试的代码。至少做到完成部分代码后&#xff0c;完成对应的测试代码&#xff1b; 测试代码不需要覆盖所有的细节&#xff0c;但应该对所有主要的功能和可能出错的地方有相应的测试用例…