多媒体系统中双滑杆音量控制技术

时间:2022-10-09 01:12:10

多媒体系统中双滑杆音量控制技术

摘要:阐述了多媒体系统中的背景音乐与解说声音的作用与意义,具体介绍了一种在多媒体创作中实现背景音乐与解说声音的双滑杆音量控制技术,该技术与目前一些常用的声音控制方法相比,在控制上更为容易、在程序界面也较为简洁。

关键词:多媒体系统;动态链接库;音量控制

中图分类号:TP319文献标识码:A文章编号:1009-3044(2010)10-2460-02

Dual-slider Volume Control of Multimedia System

GAI Zhi-hua, DONG Hu-sheng, SHEN Jian

(Digital Campus Management Center, Suzhou Institute of Trade & Commerce, Suzhou 215009, China)

Abstract: The role and significance of background music and sound commentary in multimedia system is described in this paper, a dual-slider volume control to realize background music and sound commentary of multimedia is introduced in detail, comparing with some usual voice control method, it is easy to control sound, and, its interface is simple.

Key words: multimedia system; dynamic link library; volume control

当前在科学研究、培训演示、教育教学与家庭娱乐等领域中,多媒体系统因其集文字、音乐、图形、动画与视频等多种媒体于一身,具体丰富的表现力而被广泛应用[1]。在多媒体系统中,各种媒体形式互为补充:使用文字可以对内容进行详细的介绍、使用图形图像与动画可以增强系统的直观性、使用视频可以实现场景再现等,使用声音则可以舒缓学习压力、烘托情景激感,还可以通过解说来诠释画面内容、加深理解。因此一款优秀的多媒体系统中必须具备同时控制背景音与解说音的功能,以实现在程序运行过程对两者分别进行音量控制、关闭或打开等操作。

但是在当前的主流的多媒体开发工具Authorware[2]中实现同时对背景音与解说音进行控制并非易事,为解决这一问题,一般采用加载动态链接库A5WMME.ucd,通过调用其中的WavePlay()、WavePause()、WaveResume()、MidiPlay()、MidiPause()或MidiResume()等声音控制函数,结合使用交互响应条件来控制MIDI格式的背景音乐与Wave格式的解说音的播放;或是采用Authorware中自带的声音图标加载解说音,调用声音控制函数进行背景音的播放控制,实现对两路声音的播放控制,但是这些方法却不能有效地实现对两路声音的音量控制,虽然可以通过加载Winapi.u32函数执行其中sndvol32.exe调出Windows系统音量控制程序,但是依然无法实现两路声音分别控制音量大小的问题。文献[3]通过VC++与Authorware混合编程,调用Windows多媒体功能扩展访问波形音频函数waveOutsetVolume()和WaveOutGetVolume()控制解说音的音量控制,调用乐器数字接口函数midiOutSetVolume()实现背景音乐的音量控制,但是此种方法需要大量的编程,且在多媒体课件系统的界面布局时增加了难度。

本文采用插入DirectmediaXtra加载解说音,调用MIDILoop.u32函数加载背景音乐,通过加载Winmm.dll动态链接库中的midioutSetVolume函数实现了对背景音乐音量的控制;由于DirectmediaXtra自身具有音量控制功能,从而实现了对两路声音音量的有效控制,此外,还结合条件响应交互控制实现了在多媒体系统中的双滑杆音量控制技术。

1 音乐文件格式与实现方案

在多媒体系统中,为了同时播放背景音乐与解说音两路声音信号,一般采取两种不同的文件格式。由于MIDI文件具有较小的文件尺寸且可以通过加载MIDI控制函数进行方便的控制,因此在背景音乐的选择上多采用MIDI文件。

MIDI(Musical Instrument Digital Interface),又称作乐器数字接口,是数字音乐/电子合成乐器的统一国际标准。它定义了计算机音乐程序、数字合成器及其它电子设备交换音乐信号的方式,规定了不同厂家的电子乐器与计算机连接的电缆和硬件及设备间数据传输的协议,可以模拟多种乐器的声音。

较之于背景音乐文件,解说音文件可以选择的文件格式较为丰富,较常用的格式有WAV、MP3、SWA等。

1) WAV格式:它是微软公司开发的一种声音文件格式,也叫波形声音文件,是最早的数字音频格式,被Windows平台及其应用程序广泛支持。WAV格式支持许多压缩算法,支持多种音频位数、采样频率和声道,采用44.1kHz的采样频率,16位量化位数,跟CD一样,对存储空间需求太大不便于交流和传播。

2) MP3格式:其全称是MPEG-1 Audio Layer 3,它在1992年合并至MPEG规范中。MP3能够以高音质、低采样率对数字音频文件进行压缩。换句话说,音频文件(主要是大型文件,比如WAV文件)能够在音质丢失很小的情况下把文件压缩到更小的程度。

3) SWA格式:它是一种高压缩率的音频格式,与波形文件的压缩比例一般为24:1,比MP3还高出许多,和最近推出的MP3pro在压缩率上十分接近。一般说来,多媒体作品中的声音主要包括人声、音乐声和音响效果声音,大多数软件支持WAV这个声音格式,但是它占用的空间很大,因此在对音质要求不是特别高、但又要求占用存储空间少的情况下,使用Authorware制作的多媒体作品几乎都是用SWA这种格式来传递声音信息的。

由于Authorware[4]自身带有WAV转SWA工具,且转换后的文件尺寸生情与音质损失都较小,因此一般使用SWA格式替代WAV格式文件。在本文中背景音乐文件采用了MIDI格式文件,解说音选择了MP3文件格式。

本文的实现方案流程图如图1所示。对背景音乐[5]MIDI的播放采用加载MidiLoop.u32,调用其中的LoopMidi()与StopMidi()函数进行控制。对于解说音文件则采用插入DirectMediaXtra插件进行加载。为了分别实现对两路声音音量的控制,在方案中加入了两个显示图标用以显示两滑块,设定其属性为在路径上活动,并通过条件交互响应对滑块是否被拖动进行跟踪以确定背景音或解说音的音量大小。

2 双滑杆音量控制技术具体实现

1) 建立如图1所示的项目流程图并保存,[6]后加载外部函数MidiLoop.u32中的LoopMidi()与stopMidi()函数,加载动态链接库winmm.dll中的MidiOutSetVolume()与MidiOutGetNumDev()声音控制函数。

2) 进行初始化与MIDI文件的循环播放。在“初始化”计算图标中输入以下代码:

mididev=midiOutGetNumDevs()

v=100

i=0

firsttime=TRUE

其中的mididev为获取的系统中MIDI设备数,v为定义的背景音滑块沿路径移动时的值,其范围为100~0,i为定义的解说音滑块沿路径移动时的值,其范围应为0~-100,当v与i值最小大时,则背景音与解说音的音量为零,同时也达到了取消音乐播放开关的效果。变量Firsttime用于确定项目是否为初次运行。

在“播放MIDI”计算图标中的内容为:

varfilename:=FileLocation^"alice.mid"

if mididev0 then LoopMidi(varfilename)

由于在播放背景音乐时有时要选择不同的背景音乐,所以在此处使用文件名变量,在具体项目中还可以提供打开窗口实现文件的选择[7]。

3) 在“解说音加载”DirectMediaXtra功能图标中加载外部解说声音文件,取消其自带的滑杆控制属性。

4) 设定显示图标“MIDI音量滑块”与“解说音量滑块”位置、活动范围属性均为“在路径上”,为其分别定义初始值v与i,并设定基点与终点值大小分别为100、0与0、-100。

5) 交互控制图标组中,为第一个计算图标设定其交互类型为条件响应,响应条件为“Dragging@"MIDI音量滑块"|firsttime”,并在其中输入代码:

v= (PathPosition@"MIDI音量滑块")

midiOutSetVolume(1, INT(v) * 512 + INT(v) * 512 * 65536)

firsttime: = FALSE

由于“背景音量滑块”图标属性为在路径上,因此,当鼠标拖动该图标调整位置时,变量v根据设定的基点值与终点值将自动调整大小,通过midiOutSetVolume()函数实现对背景MIDI文件的音量控制[9]。

与控制背景音量类似,设定第二个计算图标的条件响应为“Dragging@"解说音量滑块"”,其中的代码为:

i=PathPosition@("解说音量滑块")

CallSprite(@"解说音加载", #SetVolume ,INT(i))

在此通过调用CallSprite()函数则可对DirectMediaXtra图标设定音量大小。

6) 为“退出”计算图标添加StopMidi()与Quit()函数。

由于项目调用了外部函数与动态链接库中的函数,因此该项目文件非常简洁,编程量较小,但却能够良好地解决多媒体系统中双滑杆分别控制背景音与解说音音量的难题,程序运行效果如图2所示。

3 结束语

本文采用了加载外部U32函数与动态链接库的方法实现了在多媒体系统中对背景音与解说音的双滑杆音量控制,并在具体的多媒体系统中得到成功应用。该方案对背景音[10]MIDI与解说音文件实现了分别的滑杆音量控制,将该模块整合后应用于具体的多媒体系统开发中能够较好地帮助使用者进行音量控制,应用本方案还可以简化程序界面的布局难度,使得演示系统具有更好的交互性能。此外,在具体应用中还可以对本方案进行进一步的优化,如通过加载binapi.u32函数中的BN_SetVolume()函数还可以实现对于系统音量的控制、通过添加打开对话框为用户提供选择背景音乐的功能等,从而在多媒体系统中建立功能更为强大的音量控制模块。

参考文献:

[1] 夏红,何玉林,丁一.多媒体应用系统开发中音乐与声音控制技术[J].计算机工程与应用,2000,7:82-84.

[2] 董全德.Authorware声音控制[J].黄山学院学报,2000,7(3):75-76.

[3] 曹庆旭.Authorware中的声音控制[J].电脑知识与技术,2006,1:145-146.

[4] 朱卫锋.Authorware中的声音控制[J].计算机时代,2001,3.

[5] 任二民,赵书良,王希.多媒体课件中的声音控制[J].河北师范大学学报,2004,28(4):350-352.

[6] 胡振生.Authorware7.0多媒体开发白金手册[M].北京:人民邮电出版社,2005.

[7] 郑华安.谈Authorware课件中声音的系统构架及运用技术[J].教育信息化,2004,1.

[8] 包健,严义.接口与通信课程多媒体CAI软件的研究与开发[J].实验室研究与探索,2002,4.

[9] 关明勇,徐奎.媒体课件中声音效果的特点及设计[J].软件导刊(教育技术),2008,1.

[10] 糟志科.Windows录音机程序录制声音素材的方法和技巧[J].中国教育信息化,2007,4.

上一篇:计算机中数据备份与恢复之我见 下一篇:基于HPN模型的化工间歇过程动态特性分析