如果有看过本人做的Ogg Vorbis的评测文章,就会发现我在测试时由于WINAMP本身不支持将WMA的播放输出连接到它自己的DiskWriter插件进行保存而使用了一个工具来解码WMA文件。那就是GRAPH EDITOR。这个名字一看下去很容易给人造成误解,以为是一个图象编辑器。其实它是一个可视化的DirectShow Filter Graph Builder,也就是可以可视化地将DirectShow滤镜连接在一起运行的软件。
这个软件是Microsoft在DirectX SDK里面带的一个用于程序查错用的工具,如果就凭它是不足以做解码工作的。不过由于Microsoft顺带在DirectX SDK里面带了两个示例性质的DirectShow插件:Dump.ax 和 WavDest.ax,于是利用Graph Editor进行解码工作就成为现实了。有兴趣的朋友可以按这里下载。由于原则上只有微软才有此软件的传播权力,因此下载的压缩包是有密码的,密码是“世纪音频”的拼音全称。
可以在这里先告诉大家的是,现在充斥在网络上的从DVD上抓取的DivX;-)影片,Graph Editor是其中一个重要的辅助制作工具。Microsoft的软件变成盗版工具了,这倒是比较讽刺的。
下载回来之后,要做的第一步是将压缩包里面的两个扩展名为ax的DirectShow Filter插件注册到Windows中。方法有两个:
1、将.ax文件一次一个地拖到REGDROP文件上松开。
2、在MS-DOS方式下键入regsvr32 ".ax文件全路径",比如:regsvr32 “c:\graphedit\dump.ax”。
注册了之后如果又将ax文件移走了,则要重新注册。然后运行GraphEdit.exe。下面是其窗口:
然后我们要做的是找个媒体文件来(比如MP3或者WMA)拖到窗口上放开。下面的图是我找来的一个MP3文件拖放之后的结果。为了容易观察,我移动了图中的方框以便能在一屏内显示,同时还要将View菜单下的Auto arrange关掉,否则老是要将各个方框拖来拖去,很是讨厌。
下面来解释一下图中的东西:
在图里有4个方框,每个方框代表一个DirectShow Filter插件。每个框的左右两边都有些突起,称为pin。Pin是在DirectShow里面用来连接各种Filter插件的接口。Pin旁边的名字代表了这个pin所能接受和输出的数据类型。两个pin之间的箭头连线表示数据的流动方向。从上图中,我们可以很清晰的看出DirectShow系统(也就是当使用Windows Media Player时)播放mp3文件究竟经过了一个怎样的处理过程。这里需要注明一下的是,我的Windows里面装了另外一个mp3的解码器,所以显示的是InterVideo Audio Decoder,与一般的Windows的显示是不同的(正常情况下应该显示MPEG Layer-3 Decoder)。当这么一个解码流程图建立以后,我们就可以通过工具栏上的播放按钮进行播放了。
下面的是播放WMA的图:
那如何才能将播放的东西保存为WAV文件呢?先别急,我们再来看看Graph菜单。在这个菜单下面有个Insert Filters命令,可以将DirectShow Filter插件插入到当前的DirectShow Graph中。
第一次看到这个列表肯定会吓一跳,这么多的插件!其实里面对我们直接有用的都在DirectShow Filters那一类里。按+号图标打开列表,找到刚才注册的WAVDest插件:
然后双击它或者按旁边的Insert Filter按钮。然后找一个本来就存在的名为File writer的插件,插入,与此同时将会弹出一个保存文件对话框,要你指定文件保存路径。最后选CLOSE关闭窗口。
这样下来应该变成下面的样子了:
好了,然后我们将原本向DirectSound设备输出的音频信号重新导向到WAV文件,方法是先用鼠标选中Windows Media Audio Decoder的Xform Out与默认DirectSound设备的Audio Input pin (rendered)两个pin之间的连线,然后按键盘上的Del键将之删除。如下图:
然后用鼠标按住Windows Media Audio Decoder 的Xform Out端,拖动(此时会引出一条箭头)到WAV Dest框的In端口。然后再用同样的方法将WAV Dest的Out端与File Writer插件(也就是只见到一个wav文件名那个)的in端连接。最后应该是下面这个样子:
最后按播放按钮。这个WMA文件便会解码为WAV文件并存放在硬盘上了。由此类推,凡是你的Windows Media Player能够播放的媒体文件都可以用这个方法将其转换为WAV文件。唯一要注意的是,当关闭GraphEdit时它会问你是否将这个流程图以输入文件的名字保存!你就千万不要选“是”,否则把原来的输入文件覆盖了就找不回来了。
一开始可能觉得这个过程比较复杂,动手试过之后就会觉得非常简单。所以下面详细介绍一下这个软件实现起来的机制。Graph Editor其实是基于DirectX中的DirectShow的。自从DirectShow成为DirectX中的一个标准组成部分之后,微软便将Windows中一切与多媒体处理相关的东西都使用DirectShow技术来实现。按照通用性的原则,每一个处理过程都会被设计为一个独立的插件,添加到系统中,在处理媒体的时候再按需要进行调用。GraphEditor实现的便是将原本大家见不到的插件连接调用以可视化的形式显示出来。换句话说,其实就是将我们本来要写程序才能实现的操作用菜单,鼠标等等的操作来实现了。
- END -
版权所有,未经作者(苏信东)本人许可不得转载于任何媒体
本站微信订阅号:
本页网址二维码: