OpenCV+PlaySound()

一、PlaySound()

  1. 介绍:
    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)显示音量滑块控制系统通知的声音。设置该标志将下控制音量滑块。如果没有设置该标志,声音是分配到默认的音频会议的应用进程。
}
  1. 使用方法
    第一种方法是直接播出声音文件,相应的代码为:
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")

参考链接:https://baike.baidu.com/item/PlaySound

  • 1
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值