(求思路)关于VB6播放wav文件的问题,请高手帮忙!!!!!!!!!!!!!!(帮忙就有分哦:))

tianyingjzh 2004-12-24 08:36:35
wav文件在服务器上,在本地机上做VB程序,能够播放wav文件(以前没有做过)
请问,1.用什么控件合适(属于哪个ocx文件),
2.是不是要把wav文件下载到本地机上?怎么做呢?用什么控件,winsocket行吗?
...全文
323 19 打赏 收藏 转发到动态 举报
写回复
用AI写文章
19 条回复
切换为时间正序
请发表友善的回复…
发表回复
tianyingjzh 2004-12-30
  • 打赏
  • 举报
回复
to:creazyfish(梳分头的鱼)
我试了你给的方法,发现有两个问题,呵呵,请您进一步指教哦
1、sndPlaySoundA 这个函数在运行时找不到入口,我查了一下winmm.dll的函数,没有找到这个函数,只找到PlaySoundA函数,但是运行时还是找不到入口
2、mciExecute函数好用,但是不能播放文件名中带空格的WAV文件,请问要把文件名怎么处理一下呢?
hitbird 2004-12-30
  • 打赏
  • 举报
回复
用MideaPlayer就可以了,指向远程的路径,然后就自动下载并播放了
tianyingjzh 2004-12-30
  • 打赏
  • 举报
回复
还要请问,wav文件在服务器上,我要在本地机上播放这个文件,并且根据用户的需要,要播放不同的wav文件,是在服务器上远程播放还是下载到本地机上播放?如果下载,用什么方式?怎么处理比较好呢?
请高手指教!
creazyfish 2004-12-30
  • 打赏
  • 举报
回复
至于你说的文件名有空格会无法播放的问题,我也不大清楚,可以把文件重命名一下
creazyfish 2004-12-30
  • 打赏
  • 举报
回复
2.
以下是王国荣、郑郁霖先生的文章
利用多媒体的 mciSendString API 函数, 再搭配 mci(multimedia control interface) 指令, 即
可播放 .wav 声音档, 细节如下:

1. API 的宣告:

Declare Function mciSendString Lib "Winmm.dll" Alias "mciSendStringA"_
(ByVal Command As String,_
ByVal ReturnString As String,_
ByVal ReturnLength As Long,_
ByVal Callback As Long) As Long

Command : MCI 的命令字串

open = 开启设备:设备名 [type 设备型式][alias 别名]
close = 关闭设备:设备名
play = 播放档案:设备名 [from 起点][to 终点]
pause = 暂停档案
resume = 取消暂停档案
seek = 直接移到:设备名 [to 位置 | to start | to end]
stop = 停止拨放:设备名




2. 程式范例:

开启档案
Call mciSendString("open c:\wavs\3ucheng.mid waveaudio alias song",0,0,0)
播放音乐
Call mciSendString("play song",0,0,0)

' 撰写播放声音的一副程式
Sub PlaySound(filename)
Dim cmd As String
Call mciSendString("close MyWav", 0, 0, 0) ' MyWav 这个名称可依需要来修改
cmd = "open " & filename & " type WAVEAudio alias MyWav"
'去掉 上面中的 type WAVEAudio, 则该副程式便可用来播放 midi 音乐档。
Call mciSendString(cmd, 0, 0, 0)
Call mciSendString("play MyWav", 0, 0, 0)
End Sub

' 假设要拨放 "c:\windows\Tada.wav"
PlaySound "c:\windows\Tada.wav"

播放 .flc 动画档案的方法与 .wav 及 .midi 并没有什麽不同,最後完成的程式大致如下:

Sub PlaySound(filename)
Dim cmd As String
Call mciSendString("close MyFlc", 0, 0, 0) ' MyFlc 这个名称可依需要来修改
cmd = "open " & filename & " alias MyFlc"
Call mciSendString(cmd, 0, 0, 0)
Call mciSendString("play MyFlc", 0, 0, 0)
End Sub

注:有些机器可能会因为没有安装 .flc 的驱动程式而无法播放,欲检查机器中是否安装有
播放 .flc 的驱动程式, 可先利用 Windows 提供的媒体播放程式播放 .flc 档案看看。

假设我们想将 .flc 放在 Picture1 之中播放, 则必须将 open MCI 指令由原先的:

"open " & filename & " alias MyFlc" 改成:
"open " & filename & " alias MyFlc parent " & Picture1.hWnd & " style " & WS_CHILD

则 .flc 就会在 Picture1 之中播放。

注:WS_CHILD 等於 &H40000000
creazyfish 2004-12-30
  • 打赏
  • 举报
回复
1.应该可以用的,你按照这个方法试一下呢
'This project needs a Common Dialog box, named 'CDBox'
' (To add the Common Dialog Box to your tools menu, go to Project->Components (or press CTRL-T)
' and select Microsoft Common Dialog control)
Private Declare Function mciSendString Lib "winmm.dll" Alias "mciSendStringA" (ByVal lpstrCommand As String, ByVal lpstrReturnString As String, ByVal uReturnLength As Long, ByVal hwndCallback As Long) As Long
Dim Alias As String
Private Sub Form_Load()
Const PlayTime = 10
'Set the common dialog box' title
CDBox.DialogTitle = "Choose your midi-file"
'Set the filter
CDBox.Filter = "Midi-files (*.mid)|*.mid"
'Show the 'Open File'-dialog
CDBox.ShowOpen
'Extract an alias from the file
Alias = Left$(CDBox.FileTitle, Len(CDBox.FileTitle) - 4)
'play midi
R% = mciSendString("OPEN " + CDBox.filename + " TYPE SEQUENCER ALIAS " + Alias, 0&, 0, 0)
R% = mciSendString("PLAY " + Alias + " FROM 0", 0&, 0, 0)
R% = mciSendString("CLOSE ANIMATION", 0&, 0, 0)
'play midi for 10 secs
t = Timer
Do: DoEvents: Loop Until Timer > t + PlayTime
'stop midi and close it
R% = mciSendString("OPEN " + CDBox.filename + " TYPE SEQUENCER ALIAS " + Alias, 0&, 0, 0)
R% = mciSendString&("STOP " + Alias, 0&, 0, 0)
R% = mciSendString&("CLOSE ANIMATION", 0&, 0, 0)
End Sub
tianyingjzh 2004-12-29
  • 打赏
  • 举报
回复
呵呵,详细啊!
cindytsai 2004-12-29
  • 打赏
  • 举报
回复
楼上很详细
creazyfish 2004-12-27
  • 打赏
  • 举报
回复
播放声音文件
在Microsoft Visual Basic中进行多媒体音乐的播放是一件非常轻松的事情。在Micr
osoft Windows系统中支持的声音文件有WAV文件和MIDI文件,通常使用Windows应用程序编
程接口(API)函数mciExecute函数可以对MIDI文件进行播放。而使用API函数sndPlaySound
则可以对WAV播放文件进行播放,当然,你也可以使用mciExecute函数来播放WAV文件。
为了播放WAV文件,你需要在你的程序窗体的通用声明部分中,或是标准模块中添加
如下的声明语句:

Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySound
A" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

以及如下的标识常量:

Public Const SND_SYNC = &H0
Public Const SND_ASYNC = &H1
Public Const SND_NODEFAULT = &H2
Public Const SND_MEMORY = &H4
Public Const SND_ALIAS = &H10000
Public Const SND_FILENAME = &H20000
Public Const SND_RESOURCE = &H40004
Public Const SND_ALIAS_ID = &H110000
Public Const SND_ALIAS_START = 0
Public Const SND_LOOP = &H8
Public Const SND_NOSTOP = &H10
Public Const SND_VALID = &H1F
Public Const SND_NOWAIT = &H2000
Public Const SND_VALIDFLAGS = &H17201F
Public Const SND_RESERVED = &HFF000000
Public Const SND_TYPE_MASK = &H170007

sndPlaySound函数需要两个参数,第一个参数soundfilename是要播放的WAV文件的
名称。第二个参数是一个表明播放方式的标识常量,其定义的值如上所示,通常所使用的标
识意义如下:

SND_SYNC播放WAV文件,播放完毕后将控制转移回你的应用程序中。
SND_ASYNC播放WAV文件,然后将控制立即转移回你的应用程序中,而不管对WAV文件
的播放是否结束。
SND_NODEFAULT不要播放缺省的WAV文件,以免发生某些意外的错误。
SND_MEMORY播放以前已经加载到内存中的WAV文件。
SND_LOOP循环播放WAV文件。
SND_NOSTOP在开始播放其它的WAV文件之前,需要完成对本WAV文件的播放。

注意:SND_LOOP标识通常需要同SND_ASYNC共同使用,也即在两个标识之间添加与播
放符,以免在对WAV文件进行播放的时候将系统挂起。

为了播放MIDI文件,你需要在你的程序窗体的通用声明部分中,或是标准模块中添加
如下的声明语句:

Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (B
yVal lpstrCommand As String) As Long

mciExecute函数只需要一个参数,CommandString,顾名思义,它是一个命令字符串
,用于表明对声音文件播放的命令,例如,希望完整播放声音文件,则该字符串就是字符串
損lay"加上声音文件的路径以及文件名称,如下所示**

Dim ReturnValue As Long
ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID")

如果希望对声音文件的部分进行播放,可以使用from...to...语句格式,例如若要播
放CANYON.MID文件的10毫秒到100毫秒的部分,可以使用如下的语句:

Dim ReturnValue As Long
ReturnSoundValue = mciExecute("play C:\WIN95\MEDIA\CANYON.MID from 10 to
100")
mciExecute函数也可以用来对WAV文件进行播放,方法同播放MIDI一样。

样例程序
1.在Visual Basic中开始一个新的项目,采用缺省的方法建立Form1。
2.将如下的声明语句添加到Form1的通常声明部分中(注意每个声明语句需要被书写
在一行内):
Private Declare Function sndPlaySound Lib "winmm.dll" Alias "sndPlaySound
A" (ByVal lpszSoundName As String, ByVal uFlags As Long) As Long

Const SND_SYNC = &H0
Const SND_ASYNC = &H1
Const SND_NODEFAULT = &H2
Const SND_MEMORY = &H4
Const SND_ALIAS = &H10000
Const SND_FILENAME = &H20000
Const SND_RESOURCE = &H40004
Const SND_ALIAS_ID = &H110000
Const SND_ALIAS_START = 0
Const SND_LOOP = &H8
Const SND_NOSTOP = &H10
Const SND_VALID = &H1F
Const SND_NOWAIT = &H2000
Const SND_VALIDFLAGS = &H17201F
Const SND_RESERVED = &HFF000000
Const SND_TYPE_MASK = &H170007

Private Declare Function mciExecute Lib "winmm.dll" Alias "mciExecute" (B
yVal lpstrCommand As String) As Long

3.在Form1上添加一个文本框控件,采用缺省的方法建立Text1。将它的Caption属性
设置为NULL。

4.在Form1上添加一个命令按钮控件,采用缺省的方法建立Command1。将它的Captio
n属性设置为"使用sndPlaySound函数敗*

5.在Form1上添加一个命令按钮控件,采用缺省的方法建立Command2。将它的Captio
n属性设置为"使用mciExecute函数敗*

6.将如下的代码添加到Command1的单击事件中:

Private Sub Command1_Click()
Dim ReturnValue As Long
Text1.Text = "使用sndPlaySound函数播放TADA.WAV文件。"
ReturnValue = sndPlaySound("C:\WIN95\MEDIA\TADA.WAV", SND_SYNC)
End Sub
7.将如下的代码添加到Command2的单击事件中:
Private Sub Command2_Click()
Dim ReturnValue As Long
Text1.Text = "使用mciExecute函数播放Canyon.mid文件。"
ReturnSoundValue = mciExecute
("play C:\WIN95\MEDIA\CANYON.MID from 10 to 100")
End Sub
tianyingjzh 2004-12-27
  • 打赏
  • 举报
回复
谢谢大家,我去研究一下哈!回来结贴
aohan 2004-12-27
  • 打赏
  • 举报
回复
Dim m_Filename As String

Private Sub Command_Open_Click()
Me.CommonDialog1.ShowOpen
m_Filename = Me.CommonDialog1.FileName
If m_Filename <> "" Then
Me.MMControl1.FileName = m_Filename
Me.Caption = m_Filename
Me.MMControl1.Command = "Open"
End If
End Sub

Private Sub Command_Play_Click()
Me.MMControl1.Command = "Play"
End Sub

Private Sub Form_Load()
m_Filename = ""
Me.MMControl1.AutoEnable = True
Me.MMControl1.hWndDisplay = Me.hWnd
End Sub

Private Sub MMControl1_StatusUpdate()
Me.HScroll1.Max = Me.MMControl1.Length
Me.HScroll1.Min = 0
Me.HScroll1.Value = Me.MMControl1.Position
End Sub
xingnup 2004-12-27
  • 打赏
  • 举报
回复
用MediaPlayer就很方便.可实现基本功能.
taosin 2004-12-26
  • 打赏
  • 举报
回复
MCI或者MediaPlayer均可
ryuginka 2004-12-26
  • 打赏
  • 举报
回复
MediaPlayer
yingxiangchen 2004-12-25
  • 打赏
  • 举报
回复
用MCI或者MediaPlayer均可
wfhlxl 2004-12-25
  • 打赏
  • 举报
回复
click menu project commponent item
add window media player reference item
then 7.0 media.filename= netaddress
9.0 media.url=netaddress
gg137zeus 2004-12-24
  • 打赏
  • 举报
回复
Private Declare Function mciExecute Lib "winmm.dll" (ByVal ipstrcommand As String) As Long

mciExecute ("sound key.wav")
zyg0 2004-12-24
  • 打赏
  • 举报
回复
Windows Media Player sdk
tianyingjzh 2004-12-24
  • 打赏
  • 举报
回复
最好不用API,用VB自带的控件。

1,451

社区成员

发帖
与我相关
我的任务
社区描述
VB 控件
社区管理员
  • 控件
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧