Excel精英培训网

 找回密码
 注册
数据透视表40+个常用小技巧,让你一次学会!
查看: 14095|回复: 12

[分享] excel中用API函数播放声音文件

[复制链接]
发表于 2008-1-27 12:03 | 显示全部楼层 |阅读模式
本帖最后由 爱疯 于 2012-7-11 15:50 编辑

不看不看兄叫我讲一下他发的那个关于声音视频播放的帖子。一直没有时间,拖到现在,

http://www.excelpx.com/forum.php?mod=viewthread&tid=35536

先讲讲PlaySound函数。迟点讲下MCI。
PlaySound API函数可以播放波形声频文件,也就是后缀为WAV的文件,还可以播放系统声音。

PlaySound函数的声明如下:
Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
参数lpszName表示声音名,可以是文件名,系统事件名或内存地址,参数hModule只用于播放嵌入资源,其它的时候设置为0。参数dwFlags是各种标志常量的组合,有下面一些常用的常量:
    SND_SYNC=&H0  同步播放,直到指定声音被播放,函数不会返回,不能跟SND_ASYNC一起使用
    SND_ASYNC=&H1  异步播放,不管声音是否播放,函数立即返回程序,不能同SND_SYNC一起使用
    SND_NODEFAULT=&H2 如果指定声音不存在,如未设置此参数,将发出默认Beep声,设置了这个参数的话将不发出任何声音
    SND_LOOP=&H8  循环声音直至下次调用PlaySound函数 
    SND_ALIAS=&H10000 lpszName指向注册表项目,也就是说播放系统声音,不要同SND_RESOURCE或SND_FILENAME一起使用
    SND_FILENAME=&H20000 声频文件的文件名,不要同SND_RESOURCE或SND_ALIAS一起使用
    SND_PURGE = &H40 用来停止当前播放的声音

一般来说最好传递SND_FILENAME,SND_ALIAS或SND_MEMORY标志之一,当然如果不传递任何标志的话,函数自己也会确定lpszName的含义。
如果要停止前面播放的声音(例如使用SND_LOOP),可以设置lpszName参数为空字符串。要注意的是空字符串是vbNullString,而不是""。也可以设置dwFlags为SNR_FURGE来停止当前播放的声音。
也可以使用PlaySound函数播放系统声音(例如XP开机或关机时发出的声音),不需要指定文件名,只要指定用来表示指定系统声音的字符串就可以了。

下面是示范代码:
Private Declare Function PlaySound Lib "winmm.dll" Alias "PlaySoundA" (ByVal lpszName As String, ByVal hModule As Long, ByVal dwFlags As Long) As Long
Private Const SND_ALIAS& = &H10000
Private Const SND_ASYNC& = &H1
Private Const SND_SYNC& = &H0
Private Const SND_NODEFAULT& = &H2
Private Const SND_FILENAME& = &H20000
Private Const SND_LOOP& = &H8
Private Const SND_PURGE& = &H40

Public Const sdDefault = ".Default"
Public Const sdClose = "Close"
Public Const sdEmptyRecycleBin = "EmptyRecycleBin"
Public Const sdMailBeep = "MailBeep"
Public Const sdMaximize = "Maximize"
Public Const sdMenuCommand = "MenuCommand"
Public Const sdMenuPopUp = "MenuPopup"
Public Const sdMinimize = "Minimize"
Public Const sdOpen = "Open"
Public Const sdSystemExclaimation = "SystemExclaimation"
Public Const sdSystemExit = "SystemExit"
Public Const sdSystemHand = "SystemHand"
Public Const sdSystemQuestion = "SystemQuestion"
Public Const sdSystemStart = "SystemStart"
Sub playSystemSound()  '播放系统声音
    Call PlaySound(sdSystemStart, 0&, SND_ALIAS Or SND_ASYNC Or SND_NODEFAULT)
End Sub
Sub PlayWavLoop1()   '使用vbNullString来停止播放
    Call PlaySound(ThisWorkbook.Path & "\trysound.wav", 0&, SND_ASYNC Or SND_LOOP Or SND_NODEFAULT)
    WaitMinorSec 5
    Call PlaySound(vbNullString, 0&, SND_NODEFAULT)
End Sub
Sub PlayWavLoop2()
    Call PlaySound(ThisWorkbook.Path & "\trysound.wav", 0&, SND_ASYNC Or SND_LOOP Or SND_NODEFAULT)
    WaitMinorSec 5
    Call PlaySound("", 0&, SND_PURGE)  '也可以使用SND_PURGE来停止播放
End Sub
Sub PlayWavTest1()  '不会播放声音,异步播放将立即停止当前要播放的声音
    Call PlaySound(ThisWorkbook.Path & "\trysound.wav", 0&, SND_ASYNC Or SND_NODEFAULT)
    Call PlaySound(vbNullString, 0&, SND_NODEFAULT)
End Sub
Sub PlayWavTest2()  '会播放声音,因为""不能用来停止播放的声音
    Call PlaySound(ThisWorkbook.Path & "\trysound.wav", 0&, SND_ASYNC Or SND_NODEFAULT)
    Call PlaySound("", 0&, SND_NODEFAULT)
End Sub
Public Sub WaitMinorSec(ByVal dms As Double)
    Dim sTimer As Date
    sTimer = Timer
    Do
        DoEvents
    Loop While Format((Timer - sTimer), "0.000") < dms
End Sub

 

4bsdcpPm.rar (168.14 KB, 下载次数: 145)
发表于 2008-1-27 19:35 | 显示全部楼层
回复

使用道具 举报

发表于 2008-1-27 19:37 | 显示全部楼层
回复

使用道具 举报

发表于 2008-1-28 21:14 | 显示全部楼层

谢谢八月!!!!!!!!!!!
回复

使用道具 举报

发表于 2008-1-28 21:19 | 显示全部楼层

佩服 [em17][em17]
回复

使用道具 举报

发表于 2008-1-30 21:24 | 显示全部楼层

谢谢了,下载学习中.....

回复

使用道具 举报

发表于 2009-10-19 17:09 | 显示全部楼层

excel中用API函数播放声音文件
回复

使用道具 举报

发表于 2009-10-20 01:01 | 显示全部楼层

收藏,学习。。。。。。。[em01]
回复

使用道具 举报

发表于 2009-10-20 05:43 | 显示全部楼层

学习[em02][em02]
回复

使用道具 举报

发表于 2012-9-25 14:38 | 显示全部楼层
谢谢分享!学习一下!
回复

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

小黑屋|手机版|Archiver|Excel精英培训 ( 豫ICP备11015029号 )

GMT+8, 2024-6-6 02:11 , Processed in 0.511383 second(s), 4 queries , Gzip On, Yac On.

Powered by Discuz! X3.4

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表