DirectAudio

DirectAudio是以前的DirectSound和DirectMusic的组合,事实上我们现在用到的还是原来的那两个(DirectSound和DirectMusic),只是可能微软给了他们一个组合后的新名词(DirectAudio),但是实际上的内容还是那些。毕竟不可能那么快的对那两个DirectX中最复杂的组成部分进行大的改变。对,确实是最复杂的,而且对我这个没有任何音乐细胞的人来说更是如此。
 
DirectSound
 创建DirectSound对象步骤:
  1. 创建DirectSound对象(LPDIRECTSOUND)
  2. 设置协作级别
  3. 创建声音缓冲(LPDIRECTSOUNDBUFFER, DSBUFFERDESC, WAVEFORMATEX)
  4. 把声音数据写入声音缓冲(类似于写入DD中的后备缓冲,只是有两个按照降序排列的指针)
  5. 播放声音
  6. 停止声音
  7. 控制音量(-10000 – 0,其实也就是设置衰减程度)
  8. 调整频率(100 – 100000 Hz)
  9. 调整声道平衡(最左:-10000, 最右:10000)

以上这些步骤都是比较固定的,其中难点在于4,声音数据那里来?当然我们可以自己乱写一些数据(我就写过一个正弦波形到缓冲区中让DirectSound播放,其结果就是虐待耳朵),但是最常用的就是从一个已有的WAV文件导入。但是问题是WAV的读取非常的复杂,比BMP文件复杂得多。但是我们可以使用一些已经有的函数。对于WAV文件格式的研究我想暂时搁浅一下。好,如果不算这个问题,那么DS的使用就基本没有问题了。适当调用7-9的步骤可以播放出来一些声音上的特效。

 

这一章不是我学习DirectX的重点,所以我并没有投入学得太多,这里就都简要介绍一下。

 

DirectMusic

DirectMusic是整个DirectX中纯的COM最初出现在DirectX 6.0中,也是最复杂的,也是最强大的。以下介绍一下如何用DirectMusic来播放一个MIDI文件。

DirectMusic创建步骤:

  1. 初始化COM
  2. 创建一个演奏对象(IDirectMusicPerformance)
  3. 给演奏对象增加端口(IDirectMusicPort)
  4. 加载一个MIDI段(IDirectMusicLoader)
  5. 播放MIDI(由演奏对象IDirectMusicPerformance控制)
  6. 停止MIDI
  7. 检查MIDI段状态
  8. 释放一个MIDI段

这些步骤确实非常复杂,很多都是需要直接调用COM中的函数,而不是DirectMusic提供的。但是它给我们播放MIDI文件带来了统一和方便,DirectMusic为我们作了一切。另外需要注意的是DirectMusic如此只能播放一个MIDI文件,也就是当你播放另外一个MIDI的时候,前一个会自动停止。而不象DirectSound中那样可以同时播放多个WAV。

 

关于DirectSound和DirectMusic就说这些吧,真的是非常非常少,甚至漏掉了很多东西,但是少并不表示他简单,而事实正是声音部分是最复杂的,但是我不想涉及太多声音的问题,我只是想先照顾画面:)

By Lu Jun

80后男,就职于软件行业。习于F*** GFW。人生48%时间陪同电子设备和互联网,美剧迷,高清视频狂热者,游戏菜鸟,长期谷粉,临时果粉,略知摄影。

Leave a comment

Your email address will not be published. Required fields are marked *

This site uses Akismet to reduce spam. Learn how your comment data is processed.