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;
}

PlaySound的同步播放与异步播放相关推荐

  1. android 歌词同步 换行,HTML5音乐播放器同步显示歌词

    歌词文件的格式 实现之前,当然得了解一下歌词文件的格式了.常规歌词文件的格式基本是一句一行,每行由两部分组成,前面是中括号括起来的时间轴,后面紧跟歌词,像下面这样:[ti:记兰生襄铃] [ar:HIT ...

  2. Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)

    Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...

  3. Audio播放音频 --- 建立播放通道

    Audio播放音频 - 建立播放通道 简介 虽然文章标题是<建立播放通道>,其实播放通道早在AudioPolicyManager解析configuration配置文件时,openoutpu ...

  4. 什么都能播放的媒体播放器——Potplayer

    什么都能播放的媒体播放器--Potplayer "它体积小巧.界面简洁.解码功能强大.它是视屏播放器的不二之选!" --来自一个朋友 "Pot Player is by ...

  5. Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)

    1. 说明 源码已同步到Gitee仓库,Github仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. Android播放器专栏其它文章: 服务端:Android音乐播放器开发 ...

  6. 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO

    IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞: 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行(尽管这个时间很短), ...

  7. asio boost 异步错误处理_boost::ASIO的同步方式和异步方式

    http://blog.csdn.net/zhuky/article/details/5364574 http://blog.csdn.net/zhuky/article/details/536468 ...

  8. 第106天:Ajax中同步请求和异步请求

    同步请求和异步请求的区别 1.同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的.信息错误又要重新 ...

  9. FPGA之道(15)组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念

    组合逻辑电路与时序逻辑电路 数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑:另一类叫做时序逻辑电路,简称时序电路或时序逻辑. 如果数字电路满足任意时刻的输 ...

  10. 三种复位方式: 同步复位、异步复位、异步复位同步释放

    一.特点:    同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效.否则,无法完成对系统的复位工作.用Verilog描述如下:             always @ (p ...

最新文章

  1. 新同事说工厂模式有啥用,别学了
  2. windows 服务开发教程
  3. 关于excel导入到封装成工具类jar包和web版门店收银网络无法无法连接上的解决方法...
  4. Spark你需要知道这些
  5. 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来
  6. 1122 Hamiltonian Cycle (25 分)【难度: 一般 / 知识点: 模拟 哈密顿回路】
  7. 还有什么不能做?——细谈在C#中读写Excel系列文章之一
  8. ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search
  9. python和按键精灵自动化测试_按键精灵对APP自动化测试(下)
  10. Java程序员最喜爱的编辑器之一(Sublime Text 3)
  11. Mysql学习总结(78)——MySQL各版本差异整理
  12. Animation中的scale、rotate、translate、alpha
  13. Python学习笔记——Python版本的选择
  14. NVIDIA cuDNN 下载
  15. Chrome下可用的的Kubernetes Dashboard证书的制作
  16. 美国共享单车数据分析
  17. Water Sensor水位传感器学习笔记
  18. 收音机设计与制作漫谈(转)
  19. 【新书推荐】图神经网络导论,清华大学刘知远老师著作
  20. 网站弹窗广告进行宣传推广效果怎么样

热门文章

  1. matlab gui 毕业论文,MATLAB GUI课件设计
  2. 百度AI-语音识别图片搜索(Java)
  3. 在 WindowMobile 上的模拟LED 显示屏插件(转)
  4. factoryio-2.3.1虚拟仿真实验室软件
  5. 阿里云服务器搭建java环境详细步骤4
  6. Win10 设置 Windows聚焦 变为图片
  7. 牛顿法求函数零点和极值点
  8. java计数器生成流水号_CODESOFT打印流水号
  9. gitLab 修改文件夹名称
  10. python+django+mysql校园失物招领系统毕业设计毕设开题报告