播放声音文件 PlaySound函数应用

1.关闭用playsound函数的WAV文件

PlaySound(0,NULL,0);即可

// test2.cpp : Defines the entry point for the application.
//
#include "stdafx.h"
#include <mmsystem.h>
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)
{
   // TODO: Place code here.
    PlaySound(TEXT("C://WINNT//Media//tada.wav"),NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
// http://zhidao.baidu.com/question/41366091.html
// http://www.rupeng.com/forum/thread-250-1-1.html
MessageBox(NULL , TEXT("你是笨蛋") ,TEXT("测试") ,MB_OK|MB_OKCANCEL);
// SendMessage(HWND_BROADCAST,   WM_SYSCOMMAND,   SC_MONITORPOWER,   2);
    //关闭显示器
return 0;
}

播放声音文件
(1)用途:游戏里播放音乐;自己动手给女友做音乐贺卡(图片、滚动的字母、温馨的音乐)
(2)可以使用PlaySound()函数播放声音文件,该函数原型位于#include <mmsystem.h>中, 因此要使用PlaySound,首先需要添加对这个头文件的引用。
提示:mm就是MultiMedia的简写,多媒体
(3)函数原型为: BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);
返回值表示是否播放成功。
参数pszSound是要播放声音的文件名,只支持WAV等格式的文件;去mp3.baidu.com用“wav”为关键词可以搜到很多wav音乐,也可以用工具将其他格式的转换为wav格式的。
参数hmod是应用程序的实例句柄,一般传递NULL就可以;
参数fdwSound是标志的组合掩码,可选值有SND_FILENAME、SND_ASYNC、SND_SYNC等。SND_FILENAME表示pszSound参数指定的是文件名(pszSound还可以指定资源、内存音乐、系统音乐等等);SND_ASYNC:用异步方式播放声音,PlaySound函数在开始播放后立即返回;SND_SYNC:同步播放声音,在播放完后PlaySound函数才返回;SND_LOOP一遍遍的重复播放声音,必须与SND_ASYNC标志一块使用。
(4)使用举例:
PlaySound(TEXT("C://WINDOWS//Media//Windows XP 启动.wav"),NULL,SND_FILENAME|SND_SYNC);
注意的问题:文件名中的反斜线要用“//”,因为C语言中“/”默认是转义符,如果要表示“/”则需要使用“//”,对这点不明白的请回去翻一下C语言的书;对中文字符串要使用TEXT宏。
(5)为啥构建不通过?
#include <mmsystem.h>只是保证编译通过,还要设定link。
解决方案:工程上点击右键,选“工程设置”,连接,添加“winmm”库。
解决此问题时参考的文章:http://hi.baidu.com/big_foot/blog/item/4822fcd11a7f7cd6562c84e7.html。它虽然描述的是VC中解决此问题的方式,但是记住“一通百通”这个道理,C-Free中添加Link库的方式和VC非常相似,只是操作步骤不同而已。

附录:VC中添加Link库的方式:
project->setting->Link 下的 Object/library modules 里加入winmm.lib即可”,他这里用的是英文版,中文版应该是主菜单的【工程】→【设置】→【连接】,将“winmm.lib”加入到“对象/库模块”中。
(6)接上面的问题:关于link库
一个程序由源代码变成exe文件有两步:编译Compile;连接Link。编译是把c文件编译成.o、.obj文件,而连接则是把这些.o、.obj、.lib等文件连接到一起成为exe文件。这点不清楚的请回去查看C语言的教材。
那什么是*.lib文件呢?大家以前用TC开发程序的时候用的都是C语言内置的函数,所以不存在使用非内置函数的情况。但是在开发大程序的时候要大量用到非内置的函数,比如PlaySound、MessageBox等等。在使用这些函数的时候需要使用两部分,一部分是*.h头文件,它定义了函数的参数和返回值,另一部分是*.lib文件,是用来进行程序链接用的。C程序的构建分为编译(Compile)和连接(Link)两个过程,Compile是把源代码编译成*.obj文件,每个源码文件都对应一个*.obj文件,而连接则是把这些*.obj文件以及使用到的非内置函数的*.lib文件连接成一个*.exe文件。所以无论是忘了include *.h文件,还是丢了*.lib文件,都会构建出错。从上面的报错信息可以看出来是Compile成功,但是Link失败。一定要记得C程序编译的这两个过程,面试、笔试的时候常考。
(7)同步播放音乐
PlaySound("C://WINDOWS//Media//Windows XP 关机.wav",NULL,SND_FILENAME|SND_SYNC);
(8)体会同步播放和异步播放的差异:

PlaySound("C://WINDOWS//Media//Windows XP 关机.wav",NULL,SND_FILENAME|SND_SYNC);

MessageBox(NULL,"同步播放完毕","信息",MB_OK);

PlaySound("C://WINDOWS//Media//Windows XP 关机.wav",NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,"异步播放立即返回","信息",MB_OK);
      同步模式:音乐播放过程中函数不返回,播放完成才返回
      异步播放在做游戏等需要播放时间较长的音乐时使用,因为程序不会在音乐播放过程中有假死的情况。
有没有同学注意到第二个对话框如果快速关闭的话音乐会中途停止?这是因为程序退出音乐就中断播放了。用户关了游戏,音乐也不能继续播放,应该停止,所以很合理
(9)我可以做一个小程序,别人在我小程序运行的时候一直听播放的音乐,用异步方式可以保证音乐在后台播放。可以只能播放一遍,能不能音乐来回来去的不断播放呢?答案是使用SND_LOOP标志。
Loop:循环
PlaySound("C://WINDOWS//Media//Windows XP 关机.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);
(10)如果我做一个小游戏,那么希望向上边那样不断播放,可以到达一个关卡的时候希望停止原来的音乐怎么办?

PlaySound(TEXT("C://WINDOWS//Media//Windows XP 启动.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);

PlaySound(TEXT("C://WINDOWS//Media//Windows XP 关机.wav"),NULL,SND_FILENAME|SND_ASYNC);

MessageBox(NULL,TEXT(""),TEXT(""),MB_OK);
只能同时播放一段音乐,启动新的、旧的就被停了
(11)如果只是想停止目前的播放而不播放新音乐呢?
      只要给PlaySound的第一参数传递NULL就可以停止目前的播放了。

PlaySound("C://WINDOWS//Media//Windows XP 关机.wav",
NULL,SND_FILENAME|SND_ASYNC|SND_LOOP);

MessageBox(NULL,"点确定终止音乐","信息",MB_OK);

PlaySound(NULL,NULL,SND_FILENAME);

MessageBox(NULL,"音乐被终止","信息",MB_OK);
(12)关于PlaySound函数更多的介绍见:http://zhidao.baidu.com/question/41366091.html
9、关于API
(1)什么叫API(应用程序接口Application Interface的简称)?什么叫Win32 API?API就是操作系统提供的一堆库函数,没啥稀奇的。printf、scanf是C语言内置的函数,其他的非内置的库函数都叫API。
(2)我想找实现某个功能的API怎么办?以“关闭显示器”为例讲解自学过程。
(3)怎么我查看MessageBox函数其实是MessageBoxW、MessageBoxA两个函数的宏定义?Win32API中还有大量这种风格的函数。W结尾的是把字符当成Unicode处理的,A结尾的是把字符当成ASCII处理的。使用时不要直接调用W结尾的或者A结尾的。编译器会在编译时确定调用哪个。

关闭用playsound函数的WAV文件相关推荐

  1. 用API函数播放wav文件声音不连续的解决方法

    作为一个多媒体技术方面的初学者,我从wav文件的播放开始了解媒体播放的流程. 于是从建立两个线程开始,线程1用来将文件中的数据读到Buffer中去,以后称为读线程,线程2用来将Buffer中的数据送到 ...

  2. 大型WAV文件的播放

    大型WAV文件的播放 在多媒体软件的设计中经常要处理声音文件,用Windows提供的API函数sndPlaySound可以实现小型WAV文件的播放.但是当WAV文件大于可用内存时,sndPlaySou ...

  3. PlaySound函数的使用介绍

    目录 1用法 2 参数 3头文件与静态文件 4 音乐路径 1用法 PlaySound是windows中用来播放声音的API函数, 函数接口如下:  BOOL PlaySound(LPCSTR pszS ...

  4. 合并两个 Wav 文件流的函数 - 回复 刘文强 的问题

    为什么80%的码农都做不了架构师?>>>    问题来源: http://www.cnblogs.com/del/archive/2008/10/25/1069523.html#13 ...

  5. C语言——文件的打开和关闭(fopen,fclose函数)

    文章目录 一.为什么使用文件 二.什么是文件 2.1 程序文件 2.2 数据文件 2.3 文件名 三.文件的打开和关闭 3.1文件指针 3.2 文件的打开和关闭 一.为什么使用文件 一般我们写程序时, ...

  6. VC中使用低级音频函数WaveX播放声音文件

    文章摘要: 本文讨论并实现了在VC++中使用低级音频函数WaveX播放声音文件的方法. -------------------------------------------------------- ...

  7. playsound函数Linux使用,函数PlaySound和sndPlaySound的用法

    一.PlaySound函数的声明为: BOOL PlaySound(LPCSTR pszSound,HMODULE hmod,DWORD fdwSound); 1.参数pszSound:是指定了要播放 ...

  8. VC++程序中用PlaySound函数加入自定义声音

    (转)VC++编程中,我们可以为自己的程序加入音乐,比如当我们按下一个按钮时或者启动程序时,播放一小段音乐. PlaySound函数的声明为: BOOL PlaySound(LPCSTR pszSou ...

  9. 语音识别1: 音频信号采集、并存入 wav文件

    1 说明 语音识别的基本操作是:1)能够录音 2)能够将录音文件存储.以下将列出此操作,并逐条语句讲解. 2 音频录制代码 import pyaudio import wave from tqdm i ...

最新文章

  1. 012_CSS相邻兄弟选择器
  2. GitLab的安装及使用教程
  3. 物联网通信协议介绍对比
  4. python r语言培训_r语言和python学哪个
  5. COM组件的运行机制
  6. 正面管教PHP沙龙,正面管教沙龙体会
  7. java vbs_VBS基础篇 - vbscript Dictionary对象
  8. HDFS文件导出本地合并为一个文件
  9. javascript挑战编程技能-第九题:数据结构
  10. 360Stack裸金属服务器部署实践
  11. 力扣762.二进制表示中质数个计算置位
  12. AD域首次登陆修改密码设置
  13. 【GCC调试程序C语言问题】对‘ceil’未定义的引用/已经包含头文件仍然提示未定义的引用
  14. DELL 灵越系列笔记本 1427 更换显示屏
  15. python程序设计实用教程答案_Python程序设计实用教程
  16. python绘制风玫瑰图_python绘制风向玫瑰图和污染物玫瑰图
  17. 苹果手机用计算机打不开,苹果手机更新ios11后,照片在电脑上打不开怎么办?...
  18. WIN2003 装不上mssql2000
  19. 利用计算机建立动画中的 画面 由,计算机图形术在三维动画中的应用.doc
  20. html 水印插件,jquery图片水印插件

热门文章

  1. A20修改串口设备文件
  2. android 好玩的ui,让安卓更好玩 这些Launchers值得拥有
  3. 【转】000.DICOM:DICOM标准学习路线图(初稿)!!!!!!!!!!!!
  4. 【转】CANOPEN总线的相关问题点整理分享*****
  5. 【转】ABP源码分析四十七:ABP中的异常处理
  6. 【转】使用FiddlerCore来测试WebAPI
  7. iis到w3wp的数据流及工作原理
  8. jar 退出run_Java终止线程的三种方式
  9. 【JS 逆向百例】X球投资者社区 cookie 参数 acw_sc__v2 加密分析
  10. 二叉排序树查找的c语言程序,C语言二叉排序(搜索)树实例