在用Delphi开发FMX程序的时候,有时我们需要程序能够发出提示声,例如:当用户读卡成功的时候发出一声清脆的鸟叫声,提示读卡成功;当用户切换页面的时候发出一声柔和的翻书声,提示用户,当程序处于非活动状态的时候提示用户一声程序已经失活等等。总之,让FMX开发的APP能够随愿所控的发出我们期望的提示声(或者音乐)是一个需求。本文介绍一种同时支持FMX的四种平台(iOS、Android、Windows、macos)声音控制方法。

第一步:准备好音频资源文件,需要 .wav 文件(一个一个的音频文件,根据需要提供);

第二步:引入基础音频发声控制( uAudioManager.pas)单元;

第三步:初始化音频资源,就是把第一步准备的资源文件初始化好,然后就可以在程序中任意使用;

提示以下演示步骤是在 Delphi 11.1 环境下,其它版本类似!

一、准备音频资源文件:

我在本文中准备了4种音频文件,分别是:

序号 音频文件 说明
0 OCRSound.wav 读卡成功声音,索引:0
1 ShutterSound.wav 快门声音,索引:1
2 KeySound.wav 键盘按键声音,索引:1
3 BirdSound.wav 页面切换声音(鸟叫),索引:2

为了方便,四个音频文件都在原程序中的目录\Sound下。

二、新建一个delphi的演示工程文件,选择空程序,命名为:Delphi_Sound.dpr

第一步:创建空白新工程文件

第二步:将音频文件添加到程序资源中,选择 Project -> Resources and Images 菜单

选择【Add...】按键

切记右下角文件类型选择 Any file(*),否则看不到音频文件

逐个文件加入到程序的资源中。注意将资源标识更改成文件名,中间的.替换成下划线,因为资源标识中不允许出现小点。

至此,资源文件已经添加到了程序中,以后程序中将会始终包含这四个文件。

第三步:添加程序释放资源函数

在程序的主窗体中增加释放资源的函数:ReleaseFile_FromResource

procedure TForm1.ReleaseFile_FromResource(ResFileName, ReleaseFile: string;isOverride: Boolean);
varResName: string;ResStream: TResourceStream;
begin// 如果不需要覆盖,而且已经存在,则直接退出if FileExists(ReleaseFile) thenif not isOverride thenExit;// 资源文件名称ResName := ResFileName;// 如果资源文件不存在,则直接退出if FindResource(HInstance, PChar(ResName), RT_RCDATA) = 0 thenExit;// 释放资源文件ResStream := TResourceStream.Create(HInstance, ResName, RT_RCDATA);tryResStream.SaveToFile(ReleaseFile);finallyResStream.Free;end;
end;

第四步:引入 uAudioManager.pas 单元文件

该文件是播放声音的基础单元,属于 Delphi 官方出品!

usesSystem.IOUtils,  //这个单元也需要uAudioManager,   //引入该单元

第五步:释放程序的中资源文件到本地目录中,同时添加到播放目录

  //1. 释放声音资源G_AudioM := TAudioManager.Create;AddSound('OCRSound_wav','OCRSound.wav');      //OCR 识别成功声音: 0AddSound('Shutter_wav','ShutterSound.wav');   //快门声音: 1AddSound('KeySound_wav','KeySound.wav');      //按键声音: 2AddSound('BirdSound_wav','BirdSound.wav');    //鸟叫声音-切换界面: 3

第六步:分别选择不同的平台编译(Windows、Android、IOS、MACOS)。

  

总结:

1. 需要使用uAudioManager.pas单元。这个单元中定义了TAudioManager对象;

2. 增加声音资源文件:TAudioManager.AddSound(FileName);

3. 播放声音,可以根据索引号,也可以根据文件名称:TAudioManager.PlaySound(索引号或者文件名)

4. 关于资源文件,可以在 Project -> Resources and Images 菜单中增加,也可以在 Project -> Deployment 菜单中增加,区别是,前者只是简单的将资源包含在可执行文件中,后者不但包含在可执行文件中,同时会在执行时释放在对应的目录中;另外前者对于所有平台都可以,后者对于Windows程序的Normal方式不起作用,只有在Application Store模式下有效,当前大家使用的基本上都是Normal方式,所以本文选择了前者。实际上根据情况可以选择不同的资源加载方式。

下载:

1. 源文件(包含声音资源文件)下载(需要5分,无积分可联系作者发给你);

2. 执行程序下载(包含windows EXE文件和Android 的APK文件)

有技术问题或者无法下载联系:

【Delphi】让APP“鸡鸣鸟叫”(同时支持ios\android\windows\macos)相关推荐

  1. android浏览器 icloud,iCloud.com现在支持iOS/Android原生浏览器了

    原标题:iCloud.com现在支持iOS/Android原生浏览器了 日前,苹果为其 iCloud.com 网站进行更新,现已适用于 iOS 和 Android 移动浏览器.尽管苹果并没有对外宣布这 ...

  2. android支付宝插件,GitHub - DmcSDK/cordova.plugin.alipay: cordova 支付宝支付插件,支持IOS Android。...

    cordova.plugin.alipay cordova 支付宝支付插件 cordova plugin add https://github.com/DmcSDK/cordova.plugin.al ...

  3. 高仿书旗小说 Flutter版,支持iOS、Android

    高仿书旗小说 Flutter版,支持iOS/Android Github地址 github.com/huanxsd/flu- screen shot for iOS screen shot for A ...

  4. js获取微信状态栏高度_人人商城打包app教程 方法 hbuilder打包支持支付宝微信原生支付...

    使用hbuilder打包人人商城app 方法支持微信支付宝原生支付 介绍 人人商城打包使用hbuilder打包app需要的文件,目前支持微信原生支付,支付宝原生支付,原生退出app ,还没有写分享和原 ...

  5. 《移动App测试的22条军规》—App测试综合案例分析23.7节测试微信App对于操作系统特性的支持程度...

    本节书摘来自异步社区<移动App测试的22条军规>一书中的App测试综合案例分析,第23.7节测试微信App对于操作系统特性的支持程度,作者黄勇,更多章节内容可以访问云栖社区"异 ...

  6. Flutter 淘宝 App,支持 iOS、Android

    GZXTaoBaoAppFlutter 项目地址:GanZhiXiong/GZXTaoBaoAppFlutter  简介:Flutter 淘宝 App,支持 iOS.Android 更多:作者   提 ...

  7. Html5+APICloud插件支持IOS和安卓原生APP开发

    支持IOS和Android的真机或模拟机调试,发布调试版本,发布应用安装包等,即使只会前端的人员也可以做出一个像模像样的APP应用. 插件下载地址:http://www.apicloud.com/de ...

  8. 好用app开屏广告组件XHLaunchAd -支持静态/动态图片广告/mp4视频广告

    特性: 1.支持静态/动态图片广告. 2.支持mp4视频广告. 3.支持全屏/半屏广告. 4.支持网络及本地资源. 5.兼容iPhone和iPad. 6.支持广告点击事件. 7.支持自定义跳过按钮,添 ...

  9. linux镜像文件太大不好下载_这是什么神仙系统?支持安卓程序 + Windows 程序 + Linux 程序...

    说到操作系统相信大家都很熟悉 Windows.Linux.安卓.macOS 但是很多人都忽略了谷歌出品的 Chrome OS 系统,因为谷歌服务在国内需要 404 工具才能使用,导致这个系统关注度不高 ...

最新文章

  1. ros自带package在哪里_【ROS】创建ROS功能包(ROS package)
  2. Wince 隐藏TASKBAR的方法
  3. 全球经济美国中国日本英国欧元区德国法国意大利西班牙
  4. 【图像处理】MATLAB:退化函数及多种复原方法
  5. 修改可选项文件实现自动连接数据库服务器
  6. node.js async流程控制器--queue(队列)
  7. java中避免空指针_在Java中避免空检查
  8. Mac OS 被XCode搞到无法正常开机怎么办?
  9. Django框架(展示图书信息简易版)
  10. mysql导出可执行文件_实例讲解MYSQL注入中导出可执行文件至启动项原理(三)...
  11. (0)PCIE接口目录(学无止境)
  12. 软件测试Homework03
  13. Extjs4.2里Grid显示日期类型数据
  14. opencv中step[i],step1(i),elemsize,elemsize1
  15. WebKit介绍及总结(一)
  16. (数据结构)栈(LIFO结构)——概念、进栈、出栈、先进后出的特性
  17. clustalw序列比对_几个多序列比对软件:Muscle,ClustalW和T
  18. 顶刊实证复现!排污权交易机制是否提高了企业全要素生产率 ——来自中国上市公司的证据
  19. 众昂矿业赋能新能源暨氟化工产业高峰论坛圆满举行
  20. 汇编语言中xor指令_XOR寄存器,寄存器(汇编程序)

热门文章

  1. 裁判文书上诉理由分类统计
  2. 宝利通终端产品常见音频故障应急排查及处理办法
  3. 硬件视频会议设备在与云视频会议对接时,如何提高利用率
  4. mysql 超长字段_Mysql命令行插入字段超长不报错,而jdbc报错问题分析
  5. 分析说明多媒体在计算机网络上的应用,多媒体技术在计算机网络中应用探讨.doc...
  6. 确保AI项目成功的6条原则
  7. 客户管理系统,电销企业应该怎么选?
  8. HP打印机驱动查找安装以及完成打印
  9. 金融学习之十七——使用Tushare绘制系统风险存在性
  10. 计算机平面是学,计算机平面设计学什么