wave函数介绍

原创 2001年08月17日 17:36:00
 WINDOWS下的低级音频函数介绍

  在WINDOWS下,音频函数有多种类型,如MCI、多媒体OLE控制、高级音频等,使用方法都比较简单。但如果想编写一个功能较强大的音频处理程序,那就必须使用低级音频函数和多媒体文件I/O来控制音频设备的输入和输出。因为低级音频函数可直接与音频驱动程序交互,通过窗口消息或回调(CALL BACK)函数来管理音频数据块的记录和播放,控制非常灵活。重要的一点是,低级音频函数为我们提供了一个设备无关的接口。

 播放数字音频

   在使用音频设备之前,必须打开设备驱动程序。为可靠起见,在播放和记录音频之前,要确定系统音频设备的能力。在用完之后必须关闭音频设备。具体流程如下:

   1.查询设备数目和能力

     使用waveOutGetNumDevs和waveOutGetDevCaps来获取波形输出设备的个数和能力。只有在确定设备存在之后,才可以打开设备、使用设备。

   2.打开波形输出设备

     使用waveOutOpen为进行重放操作打开特定的波形设备。该函数打开与指定的设备ID相关联的设备,并以给出指定内存句柄的方法返回打开波形设备的句柄。

     当有多种波形输出设备时,建议使用WAVE_MAPPER常数作为设备ID,这使waveOutOpen函数会自动挑选最适合播放给定的数据格式的设备。

   3.准备音频数据块

     在波形重放之前,要准备好音频数据块。将数据块传递给设备驱动程序就实现了重放。使用的函数是waveOutPerpareHeader。在用完数据块之后,必须用waveOutUnPrepareHeader函数来清除对波形数据块的准备。

   4.发送音频数据块

     在成功打开波形输出设备之后,就可以进行波形重放,使用waveOutWrite函数。在调用该函数后,必须等到设备驱动程序使用完音频数据块之后才可以把该数据块释放掉。

   5.管理波形重放

     在使用低级音频函数播放音频时,应用程序必须不断地向设备驱动程序提供数据块,直到播放结束。WINDOWS提供两种方法管理波形重放:一是使用窗口消息管理,二是使用低级回调函数管理。另外,通过使用waveOutPause、waveOutRestart和waveOutReset来进行暂停、重新启动和停止播放。

   6.关闭波形设备

     用完设备之后,必须调用waveOutClose函数关闭波形输出设备,以便其他程序可以使用设备。

   记录数字音频

     记录数字音频的方法基本同播放过程,不同在于记录期间是不提供诸如暂停和重新开始这样的控制的。使用到的函数包括:waveInGetDevCaps、waveInOpen、waveInPrepareHeader、waveInUnPrepareHeader、waveInAddBuffer、waveInReset、waveInStart、waveInStop、waveInClose等。

PCM WAVE格式详解及用C语言实现wave文件的读取

转自:http://ibillxia.github.io/blog/2013/07/20/details-of-wave-format-and-reading-wave-files-in-C-lang...
  • yasi_xi
  • yasi_xi
  • 2014年07月28日 10:18
  • 5641

Wave Driver介绍-3(Wave API waveOutSetVolume)

Wave API waveOutSetVolume简介
  • daydayupfromnowon
  • daydayupfromnowon
  • 2010年11月11日 20:03
  • 1920

WAVE 文件操作

//WaveFileOperate.h #pragma once #include #include #include #pragma comment(lib, "winmm.lib") ...
  • zgl7903
  • zgl7903
  • 2014年05月20日 16:03
  • 2088

(一)WAVE标准的发展历史与WAVE协议栈简介

注:本系列主要介绍关于车联网标准_WAVE协议栈的内容,多是博主查看标准和相关文献所得的理解,不一定完全正确,欢迎探讨。(一)WAVE标准的发展历史与WAVE协议栈简介 (二)802.11标准简介h...
  • LIN_SHUQING
  • LIN_SHUQING
  • 2017年07月12日 16:59
  • 705

WAVE格式

一.wave格式概述 Wave文件格式是用于多媒体文件存储的Microsoft RIFF(Resource Interchange FileFormat)的一个子集。每一个RIFF文件以一个文件...
  • yejia1280
  • yejia1280
  • 2017年04月17日 22:02
  • 435

WAVE文件分析与编程(VC++6.0)

/*极少接触多媒体编程,这次终于有机会去学习WAVE文件格式啦,原来WAVE文件格式如此简单,^_^Thanks to http://ccrma.stanford.edu/courses/422/pr...
  • wenxy1
  • wenxy1
  • 2007年08月07日 15:22
  • 2263

图像滤镜艺术---Wave滤镜

本文介绍了一款水波滤镜的实现过程,并提供了DEMO程序的下载地址,跟大家分享!...
  • Trent1985
  • Trent1985
  • 2015年09月15日 11:05
  • 1486

用Boost的Wave库进行C++源文件的预处理(Boost Wave C++ 预处理)

最近无聊,看看Boost里有啥好东西,翻到了Wave库,发现有个趣的东西,Wave库自身就是为C++的预处理而设计的,其中Wave库的例子里面有一个用Wave实现的C++的预处理器,这是个好东西,可以...
  • lishuai369
  • lishuai369
  • 2010年10月05日 11:44
  • 2890

[SPLUSH WAVE] DragonMahjongg3~天空編~ 1.07版修改器+界面汉化

修改器只针对游戏1.07版本,请勿升级游戏版本!! 修改器界面,上面的好理解,最下面的当你抓到第一张牌后会根据你抓的牌来给你一个和的牌,抓牌了后要等一秒才生效. 其他没啥说的了,修改器纯汇编写...
  • luozhuang
  • luozhuang
  • 2011年09月06日 12:44
  • 8167

WAVE文件头数据解析

//对44字节头的WAVE文件数据进行解析 import java.io.BufferedInputStream; import java.io.DataInputStream; import jav...
  • mzj245073253
  • mzj245073253
  • 2017年03月18日 21:00
  • 274
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:wave函数介绍
举报原因:
原因补充:

(最多只允许输入30个字)