PlaySound的同步播放与异步播放
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等音频格式 |
- 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的同步播放与异步播放相关推荐
- android 歌词同步 换行,HTML5音乐播放器同步显示歌词
歌词文件的格式 实现之前,当然得了解一下歌词文件的格式了.常规歌词文件的格式基本是一句一行,每行由两部分组成,前面是中括号括起来的时间轴,后面紧跟歌词,像下面这样:[ti:记兰生襄铃] [ar:HIT ...
- Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲)
Android 入门第九讲01-音频(本地音乐播放,暂停,继续播放,获取播放时间,快进到指定位置,变速播放,播放data/data/目录下的音频文件,播放网络歌曲) 准备 1.储存在raw文件夹 2. ...
- Audio播放音频 --- 建立播放通道
Audio播放音频 - 建立播放通道 简介 虽然文章标题是<建立播放通道>,其实播放通道早在AudioPolicyManager解析configuration配置文件时,openoutpu ...
- 什么都能播放的媒体播放器——Potplayer
什么都能播放的媒体播放器--Potplayer "它体积小巧.界面简洁.解码功能强大.它是视屏播放器的不二之选!" --来自一个朋友 "Pot Player is by ...
- Android音乐播放器开发(5)—播放界面(播放、暂停、上一首、下一首,顺序播放、随机播放、拖拽进度条…)
1. 说明 源码已同步到Gitee仓库,Github仓库,觉得还不错的话帮忙点个"star"吧,非常感谢. Android播放器专栏其它文章: 服务端:Android音乐播放器开发 ...
- 【网络编程】同步IO、异步IO、阻塞IO、非阻塞IO
IO分两阶段: 1.数据准备阶段:在该阶段,根据是否等待数据准备,将IO分成阻塞和非阻塞: 2.内核空间复制回用户进程缓冲区阶段:在该阶段,只要程序需要等待复制完成,才能往下运行(尽管这个时间很短), ...
- asio boost 异步错误处理_boost::ASIO的同步方式和异步方式
http://blog.csdn.net/zhuky/article/details/5364574 http://blog.csdn.net/zhuky/article/details/536468 ...
- 第106天:Ajax中同步请求和异步请求
同步请求和异步请求的区别 1.同步是指:发送方发出数据后,等接收方发回响应以后才发下一个数据包的通讯方式. 用户填写所有信息后,提交给服务器,等待服务器的回应(检验数据),是一次性的.信息错误又要重新 ...
- FPGA之道(15)组合逻辑与时序逻辑、同步逻辑与异步逻辑的概念
组合逻辑电路与时序逻辑电路 数字电路根据逻辑功能的不同特点,可以分成两大类:一类叫做组合逻辑电路,简称组合电路或组合逻辑:另一类叫做时序逻辑电路,简称时序电路或时序逻辑. 如果数字电路满足任意时刻的输 ...
- 三种复位方式: 同步复位、异步复位、异步复位同步释放
一.特点: 同步复位:顾名思义,同步复位就是指复位信号只有在时钟上升沿到来时,才能有效.否则,无法完成对系统的复位工作.用Verilog描述如下: always @ (p ...
最新文章
- 新同事说工厂模式有啥用,别学了
- windows 服务开发教程
- 关于excel导入到封装成工具类jar包和web版门店收银网络无法无法连接上的解决方法...
- Spark你需要知道这些
- 线上redis一般安在linux_redis的zset有多牛?请把耳朵递过来
- 1122 Hamiltonian Cycle (25 分)【难度: 一般 / 知识点: 模拟 哈密顿回路】
- 还有什么不能做?——细谈在C#中读写Excel系列文章之一
- ElasticSearch探索之路(六)实战:环境搭建、REST、CRUD、Search
- python和按键精灵自动化测试_按键精灵对APP自动化测试(下)
- Java程序员最喜爱的编辑器之一(Sublime Text 3)
- Mysql学习总结(78)——MySQL各版本差异整理
- Animation中的scale、rotate、translate、alpha
- Python学习笔记——Python版本的选择
- NVIDIA cuDNN 下载
- Chrome下可用的的Kubernetes Dashboard证书的制作
- 美国共享单车数据分析
- Water Sensor水位传感器学习笔记
- 收音机设计与制作漫谈(转)
- 【新书推荐】图神经网络导论,清华大学刘知远老师著作
- 网站弹窗广告进行宣传推广效果怎么样