zoukankan      html  css  js  c++  java
  • Delphi多媒体设计之播放WAVE文件(API)

    多媒体程序设计是一个名不符实的词组,其道理就是多媒体程序设计包含着广泛的可能性,它尤其包括了Wave音频、MIDI音频、AVI视频和动画等。不要将多媒体程序设计与游戏程序设计混淆了。

    游戏设计自然包含多媒体。但是比起简单的声音视频应用程序,它包含多媒体就更多了。接下来我在Delphi多媒体设计中利用Delphi提供的工作做一些工作。

    Windows API播放Wave文件(Wave Audio with the Windows API)

    通常关于Windows API函数谈论不多,因为大多数时候,VCL提供了比API更好的工作方法。然而,在包房WAVE文件时,没有比Win32 API的PlaySound函数更简单的。利用这个函数处理WAVE文件时非常容易的。首先需要做的就是把MmSystem单元增加到用户单元的uses列表中,然后用适当的参数调用PlaySound:

      PlaySound('test.wav', 0, SND_FILENAME or SND_ASYNC);

    非常简单是不是?如大家所看到的,PlaySound的第一个参数是用来指定播放的音频文件,最后一个参数用来决定声音如何播放的标志。当播放硬盘上的WAVE文件时,指定SND_FILENAME作为最后一个参数。SND_ASYNC(异步播放)参数的意思是播放声音开始用户立刻获得其他操作权,如果不写这个参数,声音将会播放完成后用户获得操作权。

    为此,特别编写了一个简单的范例,点击按钮后,播放音乐,弹出对话框,提示你是否终止音乐,如下图:

    image


    PlaySound函数也可以播放系统声音和磁盘文件,要播放系统声音,指定声音别名作为第一个参数给PlaySound,而把SND_ALIAS最为标志参数,例如:

    PlaySound('WindowsLogon', 0, SND_ALIAS or SND_ASYNC);

    这段代码播放与Windows启动事件相关联的系统声音,具体的系统事件声音的别名可在注册表中查找。

    Note

    注册表中HKEY_CURRENT_USER\AppEvents下存储着系统事件声音设置,在下面还有“EventLabels”和“Schemes”两个子键。子键 EventLabels-储存了每个事件的标识及名称,而子键Schems则关联了每个事件和声音,它下边有“Apps”和“Name”两个子键, “Apps”子键下储存了系统事件的声音设定,一般每个事件下有两个子键“.Current”指当前的声音设置文件位置和“.Default”指默认的声音文件的位置。“Name”子键储存了声音配音方案的名称。

    image

    也为系统声音编写了小范例,如下图,点击按钮后,播放系统启动的声音。

    image


    如果所要求的声音未能找到,Windows将会发出缺省声音(若有缺省值则为叮声),可以通过制定SND_NODEFAULT标志来禁止Windows发出缺省声音。例如,若想要播放系统声音,但若找不到系统声音,不要发出缺省声音,可以试试这段代码:

    PlaySound('找不到', 0, SND_ALIAS or SND_ASYNC or SND_NODEFAULT);

    注意:SND_ALIAS、SND_ASYNC和SND_NODEFAULT之间用or连接。

    image


    Note

    Win32 API的MessageBeep函数也能通过索引值来发出系统声音。MessageBeep的调用很简单,只有一个参数,如下:

    MessageBeep(MB_OK);

    实例代码中,点击下列两个按钮,测试听听,学会MessageBeep的用法。

    image

    处理PlaySound函数时有两个其他的标志非常重要:

    • SND_ASYNC标志规定异步发声,当使用该标志时,声音开始播放,并马上返回控制调用程序。意思是,声音的播放,不影响应用程序的其他操作。
    • SND_SYNC标志规定同步发声,知道声音播放完毕后才返回给调用程序。该标志为PlaySound 函数缺省标志。

    还有许多其他的标志可用来控制怎样用PlaySound播放声音。详情请自行参看Win32联机帮助中PlaySound部分。


    以上代码均在Delphi 7中测试通过,示例代码下载:多媒体程序设计.rar
  • 相关阅读:
    mentohust 使用
    查找 GPU 计算能力
    在写代码过程中遇到的问题,以及当时的解决方法(如实记录)
    ubuntu14.04 解决屏幕亮度无法调节的问题
    Ubuntu14.04下安装 boost (boost_1.54 最简单的方法)
    在 Ubuntu下安装 labelImg (标数据用)
    在树莓派上配置MariaDB
    使用Telegraf + Influxdb + Grafana 监控SQLserver服务器的运行状况
    如何读懂SQL Server的事务日志
    ActiveMQ安装使用与spring整合配置教程
  • 原文地址:https://www.cnblogs.com/pchmonster/p/2583731.html
Copyright © 2011-2022 走看看