多媒体程序设计是一个名不符实的词组,其道理就是多媒体程序设计包含着广泛的可能性,它尤其包括了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(异步播放)参数的意思是播放声音开始用户立刻获得其他操作权,如果不写这个参数,声音将会播放完成后用户获得操作权。

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


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”子键储存了声音配音方案的名称。

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


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

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

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


Note

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

MessageBeep(MB_OK);

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

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

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

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


以上代码均在Delphi 7中测试通过,示例代码下载:多媒体程序设计.rar

Delphi多媒体设计之播放WAVE文件(API)相关推荐

  1. Delphi多媒体设计之TMediaPlayer组件(二)

    Wave音频(Wave Audio) 播放Wave音频是最基本的多媒体操作之一,它可能是最普通的,同步播放Wave文件代码如下: ? 1 2 3 4 5 6 7 procedure TForm1.bt ...

  2. Delphi多媒体设计之TMediaPlayer组件(一)

    VCL为简单多媒体操作提供MediaPlayer组件.该组件位于选项板组件System中. 该组件可播放Wave文件.MIDI文件.AVI视频等等.如果只是简单的播放Wave文件,常常使用上一讲中的P ...

  3. C语言里的out函数,c语言 vc 用waveout函数写wave文件播放器

    用WaveOut函数写wave文件播放器 要炒菜的话,就得先准备工具,如锅.铲子.炉灶等.对程序来说,就是各种函数的应用.WaveOut函数在windowsAPI中属于低阶接口,用来播放的话需要用到下 ...

  4. python调用系统api_Python调用系统底层API播放wav文件的方法

    本文实例讲述了Python调用系统底层API播放wav文件的方法.分享给大家供大家参考,具体如下: 这里未使用其他库,只是使用 pywin32 调用系统底层 API 播放 wav 文件. 具体代码如下 ...

  5. ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件...

    原文:ArcGIS API for Silverlight 当DataGrid选中项时,地图聚焦弹出窗口,并可以播放音频文件 先看效果图,然后上代码: <UserControl x:Class= ...

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

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

  7. 使用微信API实现H5页面播放音频文件

    之前在处理H5页面播放音频文件的时候,总是需要搞一个https才能正常播放,一次无意浏览到了一个自动播放音频的页面,发现了使用微信Api可以不使用https也能播放音频文件.作为记录,简单页面实现如下 ...

  8. 在 Delphi 下使用 DirectSound (6): 按文件自己的格式(TWaveFormatEx)播放

    这必须手动建立主缓冲区. unit Unit1;interfaceusesWindows, Messages, SysUtils, Variants, Classes, Graphics, Contr ...

  9. C# 视频监控系列(11):H264播放器——封装API[HikPlayM4.dll]

    前言 当你认真的写完客户端和服务器端的时候可能不需要再继续往下看关于播放器的代码和说明,因为你已经掌握了如何转换VC++代码的技巧了,加上GOOGLE再来完成这个播放器应该算小菜了.但是作为我的系列, ...

最新文章

  1. TCP协议经典数据--TCP/IP高效编程 : 改善网络程序的44个技巧
  2. Sonya and Queries CodeForces - 714C
  3. Pricing debug - update
  4. java 执行外部命令 苹果_Java中执行外部命令
  5. VB中使用GDI+进行图像缩放的实例
  6. specs.4.8.gz_使用Specs2和客户端API 2.0进行富有表现力的JAX-RS集成测试
  7. 带研发团队后的日常思考1 初级管理者的困惑
  8. ospf避免环路_【HCIERamp;S面试】之OSPF四种特殊区域
  9. Java-获取本地都有哪些字体
  10. redux使用教程详细介绍
  11. 21朵水仙花算法java_水仙花数算法 - hi_jyf - OSCHINA - 中文开源技术交流社区
  12. 自学了三天的SeaJs学习,解决了前端的一些问题,与小伙伴们一起分享一下!...
  13. Git 和 SVN之间的五个基本区别
  14. idea 设置默认 jdk
  15. Android 2.3 版本中链接边框问题解决
  16. smarty缓存控制
  17. android 批量保存网页图片大小,360浏览器看图模式 一键保存“高清套图”
  18. VC++2010Express下载
  19. java compile_java中compile函数用法
  20. 【Mac小技巧】如何改变顶部状态栏的颜色

热门文章

  1. Spring源码分析:Bean加载流程概览及配置文件读取
  2. Java制作屏幕截图软件(还可以保存到剪切板内)
  3. day23 内置函数,匿名函数,递归
  4. vuex文档阅读学习1
  5. mine layer(2008 World Final C)
  6. 张广慧:云计算对游戏开发者的价值
  7. c# 解析Xml文件
  8. samba 服务器手动挂载自动挂载
  9. CCNA初学者应该知道的词
  10. Linux 命令(67)—— time 命令