多媒体文件I/O

多媒体文件I/O与普通文件I/O相似,但支持多媒体“RIFF”格式,并提供了缓冲和非缓冲文件I/O。
所有的多媒体文件I/O函数名前缀为mmio,消息名前缀为MMIO。
低级波形音频函数:
低级音频服务允许用户直接与音频设备驱动程序打交道,直接控制音频设备如波形,Midi的播放与记录,低级音频函数是一个设备无关接口。
低级音频函数前缀均为wave,按输入函数、输出函数区分为WaveIn××××和WaveOut××××。
波形音频的重放过程:
首先,我们要调用多媒体文件I/O函数mmIO××××( ),并根据多媒体文件I/O生成在wave重放中需要的结构和数据,并将这些结构和数据用waveOut××××( )函数重放。 用户可以根据加密的需要将wave文件篡改,去掉文件头和“fmt”块,只保留数据块。 或者将其压缩,只要重放时能在内存中还原出数据文件。并记得文件音频格式和大小,就能重放音频。
常用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。
实例:
这个实例实现的功能是首先打开背景音乐,然后每五秒钟加入一段配音。背景音乐放完后将停止播放,大家可以听一下背景+配音+配音+……+配音产生的实际效果。为了实现这个功能,我们封装了一个类。大家可以在光盘上找到这两个文件“wavemix..h”和“wavemix.cpp” .
首先,我们看一下“wavmix.h”,这里定义了一个称为“mwave”的类,
其中成员函数有:构造、析构函数、open(打开文件)、play(播放文件)、Add(往缓冲中加混音文件)、Stop(停止播出)、close(关闭输出设备,类重新初始化)。
现在我们照前面方法建一个基于对话框的程序,在“File View”中加入上述两个文件。打开“WavemixDlg.h”,在前面加上“#include "wavemix.h"”,
在类class cWavemixDlg中加入私有数据“MWAVE mWave”,在类“cwavemixDlg”中加入成员OnlnitDialog( )和OnTime(),,
在此函数中加入一个定时器,打开并播放背景音乐。在定时器的向应过程OnTime()中加入函数mwave.Add("2.waw".)使之每五秒钟向缓冲加入一个配音。编译并运行之。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值