一、PlaySound()
- 介绍:
PlaySound()是Windows用于播放音乐的API函数(方法)。在vs2010以上版本需要加入#pragma comment(lib, “winmm.lib”)才能使用PlaySound。
BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound)。
/*@pszSound:pszSound是指定了要播放声音的字符串,该参数可以是WAVE文件的名字,或是WAV资源的名字,或是内存中声音数据的指针,
或是在系统注册表WIN.INI中定义的系统事件声音。如果该参数为NULL则停止正在播放的声音。
@hmod:参数hmod是应用程序的实例句柄,除非pszSound的指向一个资源标识符(即fdwSound被定义为SND_RESOURCE),否则必须设置为NULL。
@fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE
*/
enum fdwSound
{
SND_APPLICATION//用应用程序指定的关联来播放声音。
SND_ALIAS//pszSound参数指定了注册表或WIN.INI中的系统事件的别名。
SND_ALIAS_ID//pszSound参数指定了预定义的声音标识符。
SND_ASYNC//用异步方式播放声音,PlaySound函数在开始播放后立即返回。
SND_FILENAME//pszSound参数指定了WAVE文件名。
SND_LOOP//重复播放声音,必须与SND_ASYNC标志一块使用。
SND_MEMORY//播放载入到内存中的声音,此时pszSound是指向声音数据的指针。
SND_NODEFAULT//不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。
SND_NOSTOP//PlaySound不打断原来的声音播出并立即返回FALSE。
SND_NOWAIT//如果驱动程序正忙则函数就不播放声音并立即返回。
SND_PURGE//停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。
SND_RESOURCE//pszSound参数是WAVE资源的标识符,这时要用到hmod参数。
SND_SYNC//同步播放声音,在播放完后PlaySound函数才返回。
SND_SYSTEM//如果这个标志被设置,声音是分配到音频会议系统通知的声音。系统音量控制程序(sndvol)显示音量滑块控制系统通知的声音。设置该标志将下控制音量滑块。如果没有设置该标志,声音是分配到默认的音频会议的应用进程。
}
- 使用方法
第一种方法是直接播出声音文件,相应的代码为:
PlaySound(TEXT("audio.wav"),NULL,SND_FILENAME|SND_ASYNC);
//注意参数中的路径使用两个连续的反斜杠转义代表一个反斜杠。
第二种方法是把声音文件加入到资源中,然后从资源中播放声音。
Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,然后在文件选择对话框中选择The audio.wav文件,则该文件就会被加入到WAVE资源中。假定声音资源的ID为IDR_STARTWIN,则下面的调用同样会输出声音:
PlaySound((LPCTSTR)IDR_STARTWIN,AfxGetInstanceHandle(),SND_RESOURCE|SND_ASYNC);
//上面的(LPCTSTR)可能需改成(LPCWSTR)
3.实例
#include<iostream>
#include<opencv2/opencv.hpp>
#include<opencv2/highgui/highgui.hpp>
#include<opencv2/video/video.hpp>
#include<windows.h> //for PlaySound
#include<Mmsystem.h>//for PlaySound
#pragma comment(lib,"winmm.lib")//for PlaySound
/*使用PlaySound函数时需要在#include<windows.h>后面加上(注意:不能加在前面):
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")
*/
using namespace cv;
using namespace std;
int main()
{
system("color 3A");
PlaySound(TEXT("C:\\Users\\Desktop\\audio.wav"),
NULL, SND_FILENAME | SND_ASYNC);
/* SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回。
*wav文件在播放前将被装入内存,所以不能太大。只能同时播放一个声音。
*后一个声音会关闭前一个声音。
*/
VideoCapture capture;
capture.open("C:\\Users\\Desktop\\video.mp4");
if (!capture.isOpened())
{
cerr << "opencv failed!" << endl;
}
double frameNum_COUNT = capture.get(CAP_PROP_FRAME_COUNT);
double frameNum_WIDTH = capture.get(CAP_PROP_FRAME_WIDTH);
double frameNum_HEIGHT = capture.get(CAP_PROP_FRAME_HEIGHT);
double frameNum_FPS = capture.get(CAP_PROP_FPS);
cout << frameNum_COUNT << endl;//输出总帧数
cout << frameNum_WIDTH << endl;//视频宽度
cout << frameNum_HEIGHT << endl;//视频高度
cout << frameNum_WIDTH << "x" << frameNum_HEIGHT << endl;//分辨率
cout << frameNum_FPS << endl;//视频帧率
while (true)
{
Mat frame;
capture >> frame;
namedWindow("【变形金刚预告片】", WINDOW_NORMAL);
imshow("【变形金刚预告片】", frame);
if ((char)waitKey(30) == 27)
{
destroyAllWindows();
break;
}
}
return 0;
}
使用PlaySound函数时需要在#include<windows.h>后面加上(注意:不能加在前面):
应为下列形式:
#include<windows.h>
#include <mmsystem.h>
#pragma comment(lib, "WINMM.LIB")