python播放mp3文件 playsound_播放声音文件 函数playsound()

播放声音文件

(1)用途:游戏里播放音乐;自己动手给女友做音乐贺卡(图片、滚动的字母、温馨的音乐)

(2)可以使用PlaySound()函数播放声音文件,该函数原型位于#include

中,因此要使用PlaySound,首先需要添加对这个头文件的引用。

提示:mm就是MultiMedia的简写,多媒体

(3)函数原型为:BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

返回值表示是否播放成功。

参数pszSound是要播放声音的文件名,只支持WAV等格式的文件;去mp3.baidu.com用“wav”为关键词可以搜到很多wav音乐,也可以用工具将其他格式的转换为wav格式的。

参数hmod是应用程序的实例句柄,一般传递NULL就可以;

参数fdwSound是标志的组合掩码,可选值有SND_FILENAME、SND_ASYNC、SND_SYNC等。SND_FILENAME表示pszSound参数指定的是文件名(pszSound还可以指定资源、内存音乐、系统音乐等等);SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回;SND_SYNC:同步播放声音,在播放完后PlaySound函数才返回;SND_LOOP一遍遍的重复播放声音,必须与SND_ASYNC标志一块使用。

(4)使用举例:

PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP启动.wav"),NULL,SND_FILENAME|SND_SYNC);

注意的问题:文件名中的反斜线要用“\\”,因为C语言中“\”默认是转义符,如果要表示“\”则需要使用“\\”,对这点不明白的请回去翻一下C语言的书;对中文字符串要使用TEXT宏。

(5)为啥构建不通过?

#include 只是保证编译通过,还要设定link。

解决方案:工程上点击右键,选“工程设置”,连接,添加“winmm”库。

解决此问题时参考的文章:http://hi.baidu.com/big_foot/blog/item/4822fcd11a7f7cd6562c84e7.html。它虽然描述的是VC中解决此问题的方式,但是记住“一通百通”这个道理,C-Free中添加Link库的方式和VC非常相似,只是操作步骤不同而已。

附录:VC中添加Link库的方式:

project->setting->Link下的Object/library modules里加入winmm.lib即可”,他这里用的是英文版,中文版应该是主菜单的【工程】→【设置】→【连接】,将“winmm.lib”加入到“对象/库模块”中。

(6)接上面的问题:关于link库

一个程序由源代码变成exe文件有两步:编译Compile;连接Link。编译是把c文件编译成.o、.obj文件,而连接则是把这些.o、.obj、.lib等文件连接到一起成为exe文件。这点不清楚的请回去查看C语言的教材。

那什么是*.lib文件呢?大家以前用TC开发程序的时候用的都是C语言内置的函数,所以不存在使用非内置函数的情况。但是在开发大程序的时候要大量用到非内置的函数,比如PlaySound、MessageBox等等。在使用这些函数的时候需要使用两部分,一部分是*.h头文件,它定义了函数的参数和返回值,另一部分是*.lib文件,是用来进行程序链接用的。C程序的构建分为编译(Compile)和连接(Link)两个过程,Compile是把源代码编译成*.obj文件,每个源码文件都对应一个*.obj文件,而连接则是把这些*.obj文件以及使用到的非内置函数的*.lib文件连接成一个*.exe文件。所以无论是忘了include *.h文件,还是丢了*.lib文件,都会构建出错。从上面的报错信息可以看出来是Compile成功,但是Link失败。一定要记得C程序编译的这两个过程,面试、笔试的时候常考。

(7)同步播放音乐

PlaySound("C:\\WINDOWS\\Media\\Windows XP关机.wav",NULL,SND_FILENAME|SND_SYNC);

(8)体会同步播放和异步播放的差异:

PlaySound("C:\\WINDOWS\\Media\\Windows XP关机.wav",NULL,SND_FILENAME|SND_SYNC);

MessageBox(NULL,"同步播放完毕","信息",MB_OK);

PlaySound("C:\\WINDOWS\\Media\\Windows XP关机.wav",NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,"异步播放立即返回","信息",MB_OK);

同步模式:音乐播放过程中函数不返回,播放完成才返回

异步播放在做游戏等需要播放时间较长的音乐时使用,因为程序不会在音乐播放过程中有假死的情况。

有没有同学注意到第二个对话框如果快速关闭的话音乐会中途停止?这是因为程序退出音乐就中断播放了。用户关了游戏,音乐也不能继续播放,应该停止,所以很合理

(9)我可以做一个小程序,别人在我小程序运行的时候一直听播放的音乐,用异步方式可以保证音乐在后台播放。可以只能播放一遍,能不能音乐来回来去的不断播放呢?答案是使用SND_LOOP标志。

Loop:循环

PlaySound("C:\\WINDOWS\\Media\\Windows XP关机.wav",

NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

(10)如果我做一个小游戏,那么希望向上边那样不断播放,可以到达一个关卡的时候希望停止原来的音乐怎么办?

PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP启动.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

PlaySound(TEXT("C:\\WINDOWS\\Media\\Windows XP关机.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

只能同时播放一段音乐,启动新的、旧的就被停了

(11)如果只是想停止目前的播放而不播放新音乐呢?

只要给PlaySound的第一参数传递NULL就可以停止目前的播放了。

PlaySound("C:\\WINDOWS\\Media\\Windows XP关机.wav",

NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

MessageBox(NULL,"点确定终止音乐","信息",MB_OK);

PlaySound(NULL,NULL,SND_FILENAME);

MessageBox(NULL,"音乐被终止","信息",MB_OK);

(12)关于PlaySound函数更多的介绍见:http://zhidao.baidu.com/question/41366091.html

9、关于API

(1)什么叫API(应用程序接口Application Interface的简称)?什么叫Win32

API?API就是操作系统提供的一堆库函数,没啥稀奇的。printf、scanf是C语言内置的函数,其他的非内置的库函数都叫API。

(2)我想找实现某个功能的API怎么办?以“关闭显示器”为例讲解自学过程。

(3)怎么我查看MessageBox函数其实是MessageBoxW、MessageBoxA两个函数的宏定义?Win32API中还有大量这种风格的函数。W结尾的是把字符当成Unicode处理的,A结尾的是把字符当成ASCII处理的。使用时不要直接调用W结尾的或者A结尾的。编译器会在编译时确定调用哪个。

(4)Win32API是语言无关的,这点是非常重要的。Win32API是操作系统提供的库函数,可以在C语言中调用,也可以在C++中调用,还可以在C#、Java、Delphi、Python、汇编等各种语言中调用,因此学会了我们这里的C语言Windows程序开发以后只要熟悉一下其他语言的语法就可以很快的用其他语言开发Windows程序,VC、C#、Delphi等语言中的程序界面、网络操作、文件操作等功能都是对Win32API的简单包装而已

  • 2
    点赞
  • 8
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: 要停止使用Python playsound播放的音频,可以使用以下代码: ```python import playsound # 播放音频 playsound.playsound('audio.mp3') # 停止播放音频 playsound._playsoundWinObj.stop() ``` 这将停止当前正在播放的音频文件。请注意,这仅适用于Windows操作系统。如果您正在使用其他操作系统,请查看playsound文档以获取更多信息。 ### 回答2: 找到问题的原因是很重要的,通常情况下,Python playsound停止播放的原因可能有以下几点: 1.文件路径错误:在使用playound时,可能会因为文件路径错误无法加载文件或者找不到文件,从而导致音乐无法播放,可以通过打印相关信息以及检查文件路径的正确性来解决。 2.多线程控制:多线程是Python语言中用于解决多个任务同时运行的机制,但是在有些情况下可能会导致playsound停止播放,需要通过控制多线程的方式来解决。 3.编码格式不对:有些音乐文件可能采用了特殊的编码格式,如果在playsound中无法识别或者无法解码该格式的音乐文件,就会导致音乐无法播放。 4.音量控制:有的时候,音量无法调节也可能导致音乐播放停止,需要通过打印相关信息以及检查音量调节的方法、播放器音量控制参数等。 5.程序错误:Python程序存在一定的错误率,有可能在播放音乐的时候发生错误,导致音乐播放停止,需要通过调整程序代码来解决问题。 总之,Python playsound停止播放有很多原因,需要我们仔细检查每个可能的原因,并采取相应的措施来解决问题。如果以上措施都无法解决,可以尝试更换播放器,比如VLC等。 ### 回答3: Pythonplaysound库是一个比较简单的播放音频文件的工具库,但是在使用过程中有时候可能会出现播放无法停止的问题。 出现这种情况的原因通常是由于操作系统的限制造成的,因为Python使用的是操作系统的音频驱动程序进行播放。因此,如果程序无法与操作系统的驱动程序进行通信,就可能会导致播放无法停止的问题。 解决这种问题的方法一般有以下几种: 1.使用playsound的stop()函数停止播放 在使用playsound播放音频时,可以使用stop()函数来停止音频的播放。例如: from playsound import playsound music_file = 'path/to/file.mp3' playsound(music_file) # 在合适的时间停止音乐的播放 playsound.stop() 2. 使用os.system("taskkill /im vlc.exe /f")命令终止播放 如果使用playsound的stop()函数无法解决问题,可以使用os.system()函数来终止播放。例如: import playsound import os music_file = 'path/to/file.mp3' playsound.playsound(music_file) # 在合适的时间终止播放 os.system("taskkill /im vlc.exe /f") 3. 使用vlc播放器代替playsound 如果以上两种方法都无法解决问题,可以考虑使用VLC播放器代替playsound播放音频文件,因为VLC播放器更加稳定,可以满足更多的需求。 可以使用Python的VLC模块来控制VLC播放器的播放,例如: import vlc music_file = 'path/to/file.mp3' # 创建VLC实例 player = vlc.MediaPlayer() # 播放文件 Media = vlc.Media(music_file) player.set_media(Media) player.play() # 在合适的时间停止播放 player.stop() 总之,以上三种方法可以解决Pythonplaysound无法停止播放的问题。如果出现这种情况,可以根据具体情况选择其中一种方法解决问题。同时,在实际开发过程中,还应该根据实际情况对代码进行优化,避免出现这种问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值