游戏音乐播放不了,MMControl控件
我写了一个小游戏的代码,现在就剩一些小音乐
我是利用MMControl控件实现的
Form1.MMControl1.FileName = App.Path & "sounds\GameStart.wav"
Form1.MMControl1.Command = "open"
Form1.MMControl1.Command = "play"
可是无法播出声音,这是为什么呢
[解决办法]
VB中播放WAV文件
作者:赵鹏
在多媒体软件的开发设计中,声音是一个相当重要的多媒体元素,优秀的声音设计会为多媒体软件增色不少。而WAV格式的声音文件是一种最常用的声音文件格式,也最容易得到,比如通过Win 95中的“录音机”程序,利用麦克风就可以非常简单地录制WAV文件。VB是一个相当经典的多媒体开发的工具,在VB中播放WAV文件的方法主要有这样几种。
一、利用OLE控件
建一窗体,用鼠标选择OLE控件,在窗体上拖出OLE区域,在图一的窗口中选择新建和声音然后按确定键就完成了在窗口中添加OLE控件,如图二。
这样就可以在OLE控件的ResourceDoc属性中选择所要播放的文件,程序运行时双击OLE控件即可。
在实际的程序设计当中,往往需要单击某个图标或按钮来控制声音的播放,其实现方法是这样的:首先将OLE控件的VISIBLE属性设置为FALSE,然后在图标或按钮的单击事件中编写如下的程序:
Private Sub Contol_Click()
OLE1.Action = 7
End Sub
二、利用MMControl控件
VB5.0提供了许多设计多媒体的控件,在PROJECT/COMPENENTS/CONTROLS中选择MMControls 控件,窗体上就出现了多媒体控件对象,在这个对象上有不同的图形功能标识,其名称从左到右分别是Pre、Next、Play、Pause、Back、Step、Stop、Record 、Eject 如图三。
这个多媒体控件可以播放多种格式的声音,播放WAV格式声音文件的程序代码
Private Sub form_load()
MMControl1.DeviceType = "waveaudio"
MMControl1.filename = "c:\win95\media\ding.wav"
MMControl1.Command = "open"
End Sub
'以下是为图形标识Play事件编写的代码
Private Sub MMControl_playclick(cancel As Integer)
MMControl1.Command = "play"
End Sub
当运行这个程序时,MMControl控件中的Play键被激活,点取此按钮即可播放ding.wav文件。
在实际的软件设计当中,更多的情况是鼠标点击按钮或图标来控制声音的播放, 其实现方法是这样的:首先将MMControl控件的VISIBLE属性设置为FALSE,然后在图标或按钮的单击事件中编写如下的程序:
Private Sub Control1_Click()
MMControl1.Command = "play"
End Sub
运行程序时单击相用的按钮或图标,WAV文件照样可以播放。用自行设计的按钮或图标取代多媒体控件中的固定按钮,可设计出更加灵活方便的用户界面。
三、利用VB的API函数
在窗体的DECLARATIONS(声明)中输入如下代码:
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal_lpszSoundName As String, ByVal uFlags As Long) As Long
'lpszSoundName是一个字符串变量,表示一个WAV格式的文件名。
'uFlags 用于设定播放状态的各种选项。参数值为0X00时,实现同步播放,参数值为0X01时实现非同步播放。
在命令按钮的单击事件中输入如下代码:
Private Sub Command1_Click()
Dim plays As Long
plays = sndPlaySound(“E:\WINDOWS\MEDIA\DING.WAV", &H0)
End Sub
运行时单击命令按钮即可播放WAV文件。
[解决办法]
注意使用 App.Path
Form1.MMControl1.FileName = App.Path & "sounds\GameStart.wav"
你上面这行代码, 如果你的程序路径是在主目录区下 c:\ d:\....则你这行完全没有问题,反之,如果不在主目录下则你的路径将会产生错误, 那是因为VB在主目录下已带上 \ 而其它子目录并没有 \
建议你弄个变量加以判断 如下:
Dim AppDisk As String
AppDisk = IIf(Right(App.Path, 1) = "", App.Path, App.Path & "")
调用文件时的代码写为
Form1.MMControl1.FileName = AppDisk & "sounds\GameStart.wav"
'**************************************
播放游戏开头的短音乐或雷声 打斗声 键盘敲击声.....这些大半是使用 .wav
你使用 MMcontrol当然可以用,但如你使用API 播放音效则将更为简化
下面代码你可以试着运行看
Option Explicit
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long
Private Declare Function sndStopSound Lib "winmm.dll" Alias "sndPlaySoundA" (ByVal lpszNull As Long, ByVal uFlags As Long) As Long
Const SND_ASYNC = &H1
Dim AppDisk$
Private Sub Form_Load()
AppDisk = IIf(Right(App.Path, 1) = "", App.Path, App.Path & "")
Call sndPlaySound(AppDisk & "sounds\GameStart.wav", 3)
End Sub
Private Sub Form_Unload(Cancel As Integer)
Call sndStopSound(0, SND_ASYNC) '停止播放该音乐
End Sub