zoukankan      html  css  js  c++  java
  • 【转】windows播放函数PlaySound

    http://blog.csdn.net/qiuchenl/article/details/7774641

    在编写windows程序时,很多时候要用到播放音乐的函数,而windows下就提供了一个函数PlaySound

    首先说下这个函数的使用范围,PlaySound函数用于播放一个音频文件,且这个文件时wav格式(且只能是wav格式),如果你需要混音,比如同时播放两首音乐,那就超出了Playsound的能力,你需要用directsound的库

    下面看一下百度百科中PlaySound函数的原型(http://baike.baidu.com/view/1014003.htm):

      BOOL PlaySound(LPCSTR pszSound, HMODULE hmod,DWORD fdwSound);

    pszSound就是你要播放的文件路径,fdwSound就是你要选择的播放模式

    (1) PlaySound("ring.wav",NULL,SND_FILENAME|SND_SYNC);

    (2) PlaySound("ring.wav",NULL,SND_FILENAME|SND_ASYNC |SND_LOOP);

    以上是常用的两种播放形式,

    (1)中是播放目录下的ring.wav文件,但是该函数阻塞,当ring.wav播放完毕才返回

    (2)中的函数是循环播放,函数执行完立刻返回,也就是非阻塞式。

    由上面可以看出SND_SYNC参数表示同步播放,也就是阻塞型。SND_ASYNC 表示异步播放,非阻塞。SND_LOOP表示循环播放但是它必须和SND_ASYNC参数同时使用,如果是循环播放必然是异步的。

    在播放音频时,你可能会停止播放,PlaySound停止播放的办法就是播放另一音频,如果播放的音频为空,就会停止原来音频。如下:

    PlaySound(0,0,SND_FILENAME);

    这个方法很明显可以停止异步播放模式,形如(2),但是(1)中是阻塞式,如果在不影响其他其他工作时,使用(1)播放就要新开一个线程。这时如果你想在住线程中用PlaySound(0,0,SND_FILENAME);停止播放音频,就不会得到想要的结果。

    主线程()                                                              播放线程()

    {                                                                        {

           PlaySound(0,0,SND_FILENAME);                     PlaySound("ring.wav",NULL,SND_FILENAME|SND_SYNC);

    }                                                                       }

    这时主线程调用PlaySound(0,0,SND_FILENAME);不会停止播放而是阻塞在PlaySound函数,当播放线程中音频播放完毕,主线程函数才会继续执行。

    所以如果想用PlaySound(0,0,SND_FILENAME);停止播放另一线程的同步播放模式,不会得到想要的结果

  • 相关阅读:
    03_ if 练习 _ little2big
    uva 11275 3D Triangles
    uva 12296 Pieces and Discs
    uvalive 3218 Find the Border
    uvalive 2797 Monster Trap
    uvalive 4992 Jungle Outpost
    uva 2218 Triathlon
    uvalive 3890 Most Distant Point from the Sea
    uvalive 4728 Squares
    uva 10256 The Great Divide
  • 原文地址:https://www.cnblogs.com/Lthis/p/4461010.html
Copyright © 2011-2022 走看看