1 #include"stdio.h"
  2 #include"windows.h"
  3 //#include"mmsystem.h"
  4 //#pragma comment(lib,"winmm.lib")
  5 
  6 //note1<播放音乐用到的PlaySound()函数在windows.h里,此外需要导入库winmm.lib(文件libwinmm.a 或libwinmm.so)>
  7 //note2<在VC++环境下导入库需添加#include"mmsystem.h"和#program comment(lib,"winmm.lib")两行>
  8 //note3<在用gcc进行编译的时候使用命令gcc music.c -o music -lwinmm以手动导入所需要的库>
  9 void soundOperate(char wavName[],char start_stop)
 10 {
 11     char * fp;
 12     char stopString[]="NULL";
 13     if(start_stop==0)
 14     {
 15         fp=stopString;
 16     }
 17     else
 18     {
 19         fp=wavName;
 20     }
 21     PlaySound(fp,NULL,SND_FILENAME|SND_ASYNC);
 22 }
 23 int main()
 24 {
 25     char musicName[]={"SongNiYiDuoShanChaHua.wav"};
 26     soundOperate(musicName,1);
 27     system("pause");
 28     while(getchar()=='\n')
 29     {
 30         puts("The music is running!\n");
 31     }
 32     soundOperate(musicName,0);
 33     
 34     while(getchar()=='\n')
 35     {
 36         puts("The music have been stoped!\n");
 37     }
 38     return 0;
 39 }
 40 /*
 41 PlaySound函数的声明为: 
 42 BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound); 
 43 
 44 参数pszSound是指定了要播放声音的字符串
 45 该参数可以是WAVE文件的名字
 46 是WAV资源的名字
 47 或是内存中声音数据的指针
 48 或是在系统注册表WIN.INI中定义的系统事件声音。
 49 如果该参数为NULL则停止正在播放的声音。
 50 
 51 参数hmod是应用程序的实例句柄,
 52 当播放WAV资源时要用到该参数,否则它必须为NULL。
 53 
 54 参数fdwSound是标志的组合,如下表所示。若成功则函数返回TRUE,否则返回FALSE。 
 55 播放标志以及含义: 
 56 SND_APPLICATION 
 57 用应用程序指定的关联来播放声音。 
 58 
 59 SND_ALIAS 
 60 pszSound参数指定了注册表或WIN.INI中的系统事件的别名。 
 61 
 62 SND_ALIAS_ID 
 63 pszSound参数指定了预定义的声音标识符。 
 64 
 65 SND_ASYNC 
 66 用异步方式播放声音,PlaySound函数在开始播放后立即返回。 
 67 
 68 SND_FILENAME 
 69 pszSound参数指定了WAVE文件名。 
 70 
 71 SND_LOOP 
 72 重复播放声音,必须与SND_ASYNC标志一块使用。 
 73 
 74 SND_MEMORY 
 75 播放载入到内存中的声音,此时pszSound是指向声音数据的指针。 
 76 
 77 SND_NODEFAULT 
 78 不播放缺省声音,若无此标志,则PlaySound在没找到声音时会播放缺省声音。 
 79 
 80 SND_NOSTOP 
 81 PlaySound不打断原来的声音播出并立即返回FALSE。 
 82 
 83 SND_NOWAIT 
 84 如果驱动程序正忙则函数就不播放声音并立即返回。 
 85 
 86 SND_PURGE 
 87 停止所有与调用任务有关的声音。若参数pszSound为NULL,就停止所有的声音,否则,停止pszSound指定的声音。 
 88 
 89 SND_RESOURCE 
 90 pszSound参数是WAVE资源的标识符,这时要用到hmod参数。 
 91 
 92 SND_SYNC 
 93 同步播放声音,在播放完后PlaySound函数才返回。 
 94 
 95 An Example:
 96 在C:\WINDOWS\MEDIA目录下有一个名为The Microsoft Sound.wav的声音文件,在Windows 95启动时会播放这个声音。
 97 下面我们用三种方法来调用PlaySound函数播出Windows 95的启动声音。 
 98 
 99 第一种
100 直接播出声音文件 
101 
102 PlaySound("c:\\win95\\media\\The Microsoft Sound.wav", NULL, SND_FILENAME | SND_ASYNC); 
103 
104 
105 第二种
106 把声音文件加入到资源中,然后从资源中播放声音
107 Visual C++支持WAVE型资源,用户在资源视图中单击鼠标右键并选择Import命令,
108 在文件选择对话框中选择The Microsoft Sound.wav文件,
109 该文件就会被加入到WAVE资源中
110 假定声音资源的ID为IDR_STARTWIN,下面的调用同样会输出启动声音
111 
112 PlaySound((LPCTSTR)IDR_STARTWIN, AfxGetInstanceHandle(), SND_RESOURCE | SND_ASYNC); 
113 
114 第三种
115 Windows启动的声音是由SystemStart定义的系统声音
116 可以用下面的方法播放启动声音: 
117 PlaySound("SystemStart",NULL,SND_ALIAS|SND_ASYNC); 
118 
119 
120 函数sndPlaySound的功能与PlaySound类似,但少了一个参数。函数的声明为: 
121 
122 BOOL sndPlaySound(LPCSTR lpszSound, UINT fuSound); 
123 
124 除了不能指定资源名字外,参数lpszSound与PlaySound的是一样的。参数fuSound是如何播放声音的标志,可以是SND_ASYNC、SND_LOOP、SND_MEMORY、SND_NODEFAULT、SND_NOSTOP和SND_SYNC的组合,这些标志的含义与PlaySound的一样。 
125 
126 sndPlaySound不能直接播放声音资源
127 用该函数播放WAVE文件,按下面方式调用: 
128 sndPlaySound(“MYSOUND.WAV”,SND_ASYNC);
129 */

.\SongNiYiDuoShanChaHua.wav :

posted on 2017-01-18 21:22  乐在其中流砥柱  阅读(530)  评论(0编辑  收藏  举报