• PlaySound的同步播放与异步播放


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

    • 声明如下:
    #include 
    #include 
    
    #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 
    #include 
    
    #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 
    #include 
    
    #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 
    #include 
    
    #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 
    #include 
    
    #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 
    #include 
    
    #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 
    #include 
    
    #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
    #pragma comment(lib,"winmm.lib")
    

    3.1 播放一次

        //DoMusic.cpp

    #include "stdafx.h"
    #include 
    #include 
    
    #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 
    #include 
    
    #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 
    #include 
    
    #pragma comment(lib, "winmm.lib")
    
    int main()
    {
        mciSendString(TEXT("close .\\World.mp3 repeat"), NULL, 0, NULL);
        system("pause");
        return 0;
    }
    
  • 相关阅读:
    r语言tidyverse教程:5 字符串处理stringr
    一文学懂List附带超详细ArrayList,Vector,LinkedList底层源码解析
    GAMP源码阅读(上)主要类型、后处理流程、RINEX文件读取、卫星位置钟差计算
    python爬取数据再次出错
    C++类模板实例化与专门化
    c++入门(命名空间, c++输入输出, 缺省参数)
    华为开发者大会HDC2022:HMS Core 持续创新,与开发者共创美好数智生活
    九章云极DataCanvas多模态大模型平台实践与思考
    从0到一配置单节点zookeeper
    【云原生之Docker实战】使用docker部署ubuntu系统测试环境
  • 原文地址:https://blog.csdn.net/sanqima/article/details/127116934