怎么用PlaySound播放Wav的什么音频播放器最好用

我要文库申报
查看: 4641|回复: 1
如何用VBA在excel中播放指定路径下的wav声音文件不出现播放窗体,而只听到播放声音?
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次管理次数 次
网站名称: Excel技巧网 | Excel专家栖息谷 | 微软中文技术社区合作伙伴
署名作者: wise
版权声明: 版权归本站与作者共有 除本站官方外非作者本人转载须经许可并注明出处
适用版本: 03以前版本&
语言环境: 简体中文
学习方法: 掌握Excel技巧的关键是动手操作
下载 ≠ 知识
免费注册成为本站会员,享用更多功能,结识更多Office办公高手!
才可以下载或查看,没有帐号?
Q:如何用VBA在excel中播放指定路径下的wav声音文件不出现播放窗体,而只听到播放声音?
A:出现播放窗体的代码是:
Private Sub Workbook_Activate()
& &ActiveWorkbook.FollowHyperlink ThisWorkbook.Path & &\SMSB.wav& '调用声音文件
End Sub复制代码
不出现播放窗体的代码则需要调用API函数sndPlaySound32,代码如下:
Private Declare Function sndPlaySound32 _
& & Lib &winmm.dll& _
& & Alias &sndPlaySoundA& ( _
& && &&&ByVal lpszSoundName As String, _
& && &&&ByVal uFlags As Long) As Long
& & Sub PlayWavFile()
& && &'sndPlaySound32 ThisWorkbook.Path & &\SMSB.wav&, 0&
& && &Call sndPlaySound32(ThisWorkbook.Path & &\SMSB.wav&, 0&)
& &End Sub
复制代码
(11.63 KB, 下载次数: 57)
20:24 上传
点击文件名下载附件
学office,哪能不关注全网最大的Office类微博(新浪)
积分学习力
魅力值 影响力
消费券 Ti币好友
在线时间 小时
最后登录月度优秀 次管理次数 次
好帖,谢谢小7分享!
学office,哪能不关注全网最大的Office类微博(新浪)
Excel技巧网的会员探讨问题仅代表其个人意见,与网站的立场无关。任何违反国家和地方相关法律法规的言论,本站有义务协助政府相关部门追究发言者的责任!
本站中非注明转载文章与案例的版权为作者与Excel技巧网共有。若非原文作者,本站之外任何单位或个人未经允许,不得将其用于商业用途。
若非原文作者,任何形式的非商业性转载必须获得Excel技巧网或作者允许,并注明作者和出处。
会员发表的帖子如涉及版权纠纷,须自行负责。详情请参考注册时的网站服务条款。
本站特聘法律顾问:沈学律师
Powered by查看: 4790|回复: 4
[求助]用playsound函数播放音乐时如何中止?
阅读权限20
在线时间 小时
我用call playsound(thisworkbook.path & "\歌名.wav", 0&, &h1)语句播放音乐时,有时想暂时中断一下,请教高手我的想法能行吗?如果能行的话,该用什么语句呢?先谢谢了!
阅读权限50
在线时间 小时
利用多媒体的 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:\wavsucheng.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 等於 &H
阅读权限20
在线时间 小时
首先感谢楼主详细的讲解!我将你的代码直接复制到vbe中能运行吗?在你的代码中我看不到命令按钮或控件只类的呢?我要随心所欲地来中断或继续播放该怎样操作呢?
阅读权限70
在线时间 小时
那你就用播放器,这么多的播放器就没一款适合你
阅读权限50
在线时间 小时
lwxg 发表于
利用多媒体的 mciSendString API 函数, 再搭配 mci(multimedia control interface) 指令, 即可播放 .wav&&...
请教老师,帮忙解决增加随时中止代码运行的代码及修改实现打字幕时同时进行朗读的代码问题。
最新热点 /1
操作技巧+函数公式+图表可视化+数据透视表
四大领域全面进阶,极速提升工作效率!本课程共6节课,从7月26日起,晚20:00直播,由微软全球最有价值专家MVP、微软MOS国际认证专家祝洪忠主讲,欢迎报名咨询!
玩命加载中,请稍候
玩命加载中,请稍候
Powered by
本论坛言论纯属发表者个人意见,任何违反国家相关法律的言论,本站将协助国家相关部门追究发言者责任! & & 本站特聘法律顾问:徐怀玉律师 李志群律师查看:2793|回复:3
我想请教一下各位朋友,怎么在VC的资源中添加一个WAV格式的文件,并用PlaySound播放出来,是不是只要在.rc中自定义一个新的资源WAVE,然后引入一个声音文件create.wav,然后在程序中就可以播放了?我这样做了,但是不行,我看了一下.rc里,已经添加了WAVE资源的描述,resouce.h里也定义了它的标识符,但编译能通过,链接就出问题:
Linking...
main.obj : error LNK2001: unresolved external symbol [email=__imp__PlaySoundA@12]__imp__PlaySoundA@12[/email]
Debug/使用WNDCLASSEX.exe : fatal error LNK1120: 1 unresolved externals
执行 link.exe 时出错.
Creating browse info file...
使用WNDCLASSEX.exe - 1 error(s), 0 warning(s)
不知道是哪儿出问题了,请教研究过这方面的朋友,谢谢了
我的问题描述的还清楚吧?
Winmm.lib,在连接库中加入该文件。
程序设计,算法为王。
提出问题;分析问题;确定算法;画出流程图;编辑程序;调试程序;建立文档资料。
大家在开发板块贴代码的时候,请使用“插入代码”的功能。
[code]int main(){return 0;}[/code]
或者在代码里加入预编译控制复制内容到剪贴板代码:#pragma comment(lib,&winmm.lib&)
程序设计,算法为王。
提出问题;分析问题;确定算法;画出流程图;编辑程序;调试程序;建立文档资料。
大家在开发板块贴代码的时候,请使用“插入代码”的功能。
[code]int main(){return 0;}[/code]
收到,这个问题以解决,想不到就这么简单的问题,困扰了一晚上用sndPlaySoundFromMemory播放背景音乐,如何知道已经播放完毕,以便循环播放?
20kissoflife]
编辑:www.fx114.net
本篇文章主要介绍了"用sndPlaySoundFromMemory播放背景音乐,如何知道已经播放完毕,以便循环播放?
20kissoflife]",主要涉及到用sndPlaySoundFromMemory播放背景音乐,如何知道已经播放完毕,以便循环播放?
20kissoflife]方面的内容,对于用sndPlaySoundFromMemory播放背景音乐,如何知道已经播放完毕,以便循环播放?
20kissoflife]感兴趣的同学可以参考一下。
如题,谢谢!你是说&sndplaysound&API&函数吗&?&
只能播放&Wav声音文件
sndplaysound&"d:\ww.wav",SND_ASYNC&or&SND_LOOP
SND_SYNC(=&H0)&&&同步调用,声音播放完毕&程序才能继续
SND_ASYNC(=&H1)&&非同步调用,不必等声音播放完毕&程序即可继续
SND_LOOP(=&H8)&&&声音播放完毕后&从头重复播放&与SND_ASYNC(=&H1)使用
SND_NOSTOP(=&H10)&如果其他声音正在播放&则不终止该声音的播放,而返回False
SND_MEMORY(&H4)&&&播放内存中的声音
一、不得利用本站危害国家安全、泄露国家秘密,不得侵犯国家社会集体的和公民的合法权益,不得利用本站制作、复制和传播不法有害信息!
二、互相尊重,对自己的言论和行为负责。
本文标题:
本页链接:PlaySound和sndPlaySound的三种播放音乐方法 -
- ITeye博客
博客分类:
首先要添加头文件
#include "mmsystem.h"//导入声音头文件 #pragma comment(lib,"winmm.lib")//导入声音头文件库
1. 通过filename来定位文件播放
PlaySound(TEXT("c:\\crossing field.wav"), NULL, SND_FILENAME | SND_ASYNC); // TEXT()函数处理宽字符问题,SND_FILENAME标识采用文件名播放,SND_ASYNC标识异步播放,即PlaySound函数开始播放后便返回执行代码而不是等到播放完了再执行(此种方式对应SND_SYNC)
sndPlaySound(TEXT("c:\\crossing field.wav"), SND_FILENAME | SND_ASYNC);
这种方式依赖于外部文件,若文件位置改变,则无法正常播放,所以有接下来两种方法。
2. 通过资源文件播放
首先将wav文件添加进资源.rc文件,假设文件ID为IDR_WAVE1,则代码如下
PlaySound((LPCTSTR)IDR_WAVE1, NULL, SND_RESOURCE | SND_ASYNC | SND_LOOP); // 将文件ID强制转换为LPCTSTR型数据,然后标明是采用资源文件的形式播放(SND_RESOURCE),异步(SND_ASYNC),循环(SND_LOOP)
sndPlaySound((LPCTSTR)IDR_WAVE1, SND_RESOURCE | SND_ASYNC | SND_LOOP); // 同PlaySound
3. 通过加载进内存播放
首先找到资源文件
HRSRC hrsrc = FindResource(NULL, (LPCTSTR)IDR_WAVE1, TEXT("WAVE")); // IDR_WAVE1为文件ID,WAVE为文件ID所在文件夹名称
若成功则返回资源文件句柄,将其赋给hrsrc,失败返回NULL
接着加载资源文件
HGLOBAL hglobal = LoadResource(NULL, hrsrc); // 将第一步成功的句柄传给LoadResource作为参数,并得到HGLOBAL的实例hglobal
同样失败返回NULL
最后锁定资源同时得到该资源在内存中的首地址
LPCWSTR pBuffer = (LPCWSTR)LockResource(hglobal); // LockResource返回LPVOID型指针,强制转换为LPCWSTR型
拿到pBuffer后就可以调用PlaySound和sndPlaySound函数了
PlaySound(pBuffer, NULL, SND_MEMORY | SND_ASYNC | SND_LOOP); // SND_MEMORY表明播放内存中的声音数据
sndPlaySound(pBuffer, SND_MEMORY | SND_ASYNC | SND_LOOP);
第一种方式是外部调用,所以生成的exe文件很小,而第二种第三种会把wav文件压进exe文件,所以文件会变得特别大……
浏览: 21445 次
不错不错,抢沙发。}

我要回帖

更多关于 好用的音频加速播放器 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信