科技行者

行者学院 转型私董会 科技行者专题报道 网红大战科技行者

知识库

知识库 安全导航

至顶网软件频道基础软件VC中用低级音频函数WaveX播放声音

VC中用低级音频函数WaveX播放声音

  • 扫一扫
    分享文章到微信

  • 扫一扫
    关注官方公众号
    至顶头条

Windows通过高级音频函数、媒体控制接口MCI设备驱动程序;

作者:王结太 来源:CSDN 2007年10月19日

关键字:

  • 评论
  • 分享微博
  • 分享邮件
2. 使用低级音频函数WaveX

  下面将进入文章的主题。

  2.1 概述

  低层音频服务及重要的数据结构低级音频服务控制着不同的音频设备,这些设备包括WAVE、MIDI和辅助音频设备[2]。低级音频服务包括如下内容:(1)查询音频设备;(2)打开和关闭设备驱动程序;(3)分配和准备音频数据块;(4)管理音频数据块;(5)应用MMTIME结构;(6)处理错误。

  2.2 重要消息及数据结构

  使用低级音频函数之所以能够对各个声音数据块操作,要归功于Windows的消息映射,Windows在采集、播放完一个数据块之后就会发送有关的消息。播放声音涉及到的重要消息及触发条件如下:

  MM_WOM_CLOSE:在一个波形声音输出设备关闭时发出,之后该设备句柄不再有效
  MM_WOM_DONE:当给定的输出缓存播放完毕返回给应用程序,或者直接调用waveOutReset函数停止播放并重置管理器
  MM_WOM_OPEN:当给定的波形声音输出设备被打开时

  MOM_CLOSE:当MIDI输出设备关闭时
  WOM_DONE:当留缓冲播放完毕并正被返回程序时发到MIDI输出回调函数
  WOM_OPEN:当MIDI输出设备打开时

  重要的数据结构:

  波形数据格式 WAVEFORMAT/WAVEFORMATEX
  波形数据缓冲区格式 WAVEHDR
  音频输出设备性能 WAVEOUTCAPS

  这些内容都定义在mmsystem.h头文件中,更为具体的信息请参阅MSDN。

  2.3 wavex播放声音波形文件方法的大致流程

  常用mmio函数:

  mmioOpen( ) 打开一个RIFF文件
  mmioDescend ( ) 进入块
  mmioRead( ); 该取RIFF文件
  mmioAscend ( ); 跳出块
  mmioClose( ); 关闭PIFF文件

  对于块来说,进入块和跳出块是配对的。

  读取WAV文件的读取过程:

  mmioOpen( ) 打开文件
  ↓
  mmioDescend ("WAVE") 进入"fmt"块
  ↓
  mmioRead( ) 读取WAVE文件格式信息
  ↓
  mmioAscend ( ) 跳出"fmt"块
  ↓
  mmioDescend ("data") 进入"data"块
  ↓
  mmioRead( ) 读取WAVE数据信息
  ↓
  mmioClose( ) 关闭文件。

  输出WAV文件的过程:

  WaveOutOpen () 打开一个输出设备
  ↓
  WaveOutPrepareHeader() 准备WAVE数据头。
  ↓
  WaveOutWrite() 将数据写入设备并开始播放
  ↓
  WaveOutReset() 停止播放并重置管理器
  ↓
  WaveOutClose() 并闭播放设备
  ↓
  WaveOutUnpareHeader() 清理用WaveOutPrepareHeader准备的Wave
    • 评论
    • 分享微博
    • 分享邮件
    邮件订阅

    如果您非常迫切的想了解IT领域最新产品与技术信息,那么订阅至顶网技术邮件将是您的最佳途径之一。

    重磅专题
    往期文章
    最新文章