PlaySound的同步播放与异步播放

83 篇文章 0 订阅
27 篇文章 1 订阅

    PlaySound是Windows平台独有的API函数,仅支持.wav格式的音频文件播放,使用的库文件为winmm.lib,该库文件是Windows自带的库文件,只需要申明即可,不需要手动添加。

  • 声明如下:
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")
  • 它分为同步方式、异步方式2种。
  • 1)同步方式
//1) MBCS编码
PlaySound("hello.wav", NULL, SND_SYNC | SND_FILENAME | SND_NOSTOP);

//2) Unicode编码
PlaySound(L"hello.wav", NULL, SND_SYNC | SND_FILENAME | SND_NOSTOP);

//3) 兼容MBCS编码与Unicode编码
PlaySound(TEXT("hello.wav"), NULL, SND_SYNC | SND_FILENAME | SND_NOSTOP);
  • 2)异步方式
//1) MBCS编码
PlaySound("hello.wav", NULL, SND_ASYNC | SND_FILENAME | SND_NOSTOP);

//2) Unicode编码
PlaySound(L"hello.wav", NULL, SND_ASYNC | SND_FILENAME | SND_NOSTOP);

//3) 兼容MBCS编码与Unicode编码
PlaySound(TEXT("hello.wav"), NULL, SND_ASYNC | SND_FILENAME | SND_NOSTOP);

    这里以一个控制台应用程序DoPlay为例来进行说明,使用的开发工具为 Visual Studio 2005
    点击Visual Studio工具栏的[File] --》新建 --》Visual C++ —》Win32 --》Win32控制台应用程序 --》名称:DoPaly

1 同步播放sync

1.1 使用多字节字符集(MBCS)编码

    //DoPlay.cpp

#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    PlaySound("hello.wav", NULL, SND_SYNC |SND_FILENAME | SND_NOSTOP);
    system("pause");
    return 0;
}

1.2 使用Unicode字符集编码

    //DoPlay.cpp

#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    PlaySound(L"hello.wav", NULL, SND_SYNC |SND_FILENAME | SND_NOSTOP);
    system("pause");
    return 0;
}

1.3 兼容MBCS与Unicode

    //DoPlay.cpp

#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    PlaySound(TEXT("hello.wav"), NULL, SND_SYNC |SND_FILENAME | SND_NOSTOP);
    system("pause");
    return 0;
}

2 异步播放Async

2.1 使用多字节字符集(MBCS)编码

    //DoPlay.cpp

#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    PlaySound("hello.wav", NULL,SND_ASYNC |SND_FILENAME | SND_NOSTOP);
    system("pause");
    return 0;
}

2.2 使用Unicode字符集编码

    //DoPlay.cpp

#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    PlaySound(L"hello.wav", NULL,SND_ASYNC |SND_FILENAME | SND_NOSTOP);
    system("pause");
    return 0;
}

2.3 兼容MBCS与Unicode

    //DoPlay.cpp

#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    PlaySound(TEXT("hello.wav"), NULL, SND_ASYNC |SND_FILENAME | SND_NOSTOP);
    system("pause");
    return 0;
}

3 附录

  • 由于PlaySound()函数仅支持.wav格式的音频文件播放,支持的格式种类太单一。
  • 若要支持mp3、ogg、flac、oga、ac3、aac、wav等音频文件的播放,请使用mciSendString()函数
函数音频格式
PlaySound()仅支持.wav音频格式
mciSendString()支持mp3、ogg、flac、oga、ac3、aac、wavc等音频格式

   

  1. mciSendString的函数声明如下:
BOOL mciSendString(“Command1 FILE Command2”,NULL,0,NULL);

形参“Command1 FILE Command2”里的3个变量是逻辑&&与的关系,其可能的组合如下:

  • “Command1 FILE”
  • “Command1 FILE Command2”

   
2) mciSendString函数需要的头文件如下:

#include<windows.h>
#pragma comment(lib,"winmm.lib")

3.1 播放一次

    //DoMusic.cpp

#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    mciSendString(TEXT("play .\\World.mp3"), NULL, 0, NULL);
    system("pause");
    return 0;
}

3.2 重复播放

    //DoMusic.cpp

#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    mciSendString(TEXT("play .\\World.mp3 repeat"), NULL, 0, NULL);
    system("pause");
    return 0;
}

3.3 结束播放

    //DoMusic.cpp

#include "stdafx.h"
#include <windows.h>
#include <mmsystem.h>

#pragma comment(lib, "winmm.lib")

int main()
{
    mciSendString(TEXT("close .\\World.mp3 repeat"), NULL, 0, NULL);
    system("pause");
    return 0;
}
  • 1
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 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: Python的playsound库是一个比较简单的播放音频文件的工具库,但是在使用过程中有时候可能会出现播放无法停止的问题。 出现这种情况的原因通常是由于操作系统的限制造成的,因为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() 总之,以上三种方法可以解决Python中playsound无法停止播放的问题。如果出现这种情况,可以根据具体情况选择其中一种方法解决问题。同时,在实际开发过程中,还应该根据实际情况对代码进行优化,避免出现这种问题。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值