最近需要从内存流中直接播放音频,想到了使用第三方音频播放库bass。在windows上可以很方便的使用相应动态库(具体参考万一的博客),但在iOS上却没有相应的使用介绍,准确的说是没有用于Firemonkey上的示例。在它官方论坛找到一个用于OSX的Demo,通过分析和测试,研究出了Firemonkey在iOS开发上使用第三方静态库的流程和方法。

下面以在Delphi XE10上使用bass的静态库libbass.a为例。

1、获取要使用的静态库libbass.a文件,将libbass.a文件放在工程能search到的目录下,一般就放在当前工程目录下。

2、获取相应的头文件bass.h,翻译为Pascal接口文件bass.pas,具体过程和方法请自行百度。这里因为官网有OSX的demo,里面有OSX的调用声明文件bass.pas,只需稍微修改开头部分即可增加支持iOS。因为delphi移动平台不支持AnsiChar,为了不修改其他地方,这里引入了网上的ByteStrings单元dcu,里面定义了支持移动平台的AnsiChar。

  1. unit BASS;
  2. interface
  3. {$IFDEF MSWINDOWS}
  4. uses
  5. Windows;
  6. {$ELSE}
  7. {$IFDEF MACOS}
  8. uses
  9. Macapi.Dispatch
  10. {$IFDEF NEXTGEN}
  11. ,System.ByteStrings
  12. {$ENDIF}
  13. ;
  14. {$ENDIF}
  15. {$ENDIF}
  16. // Functions
  17. const
  18. {$IFDEF MSWINDOWS}
  19. bassdll = 'bass.dll';
  20. {$ENDIF}
  21. {$IFDEF LINUX}
  22. bassdll = 'libbass.so';
  23. {$ENDIF}
  24. {$IFDEF MACOS}
  25. {$IFDEF IOS}    //增加支持iOS
  26. bassdll = 'libbass.a';
  27. {$ELSE}         //增加支持iOS
  28. bassdll = 'libbass.dylib';
  29. {$ENDIF}
  30. {$ENDIF}

3、如果就这样编译工程,编译器将报标识符未找到的错误,如下图所示。这是因为静态库libbass.a依赖iOS的AudioToolbox.framework。

4、SDK Manager中增加AudioToolbox.framework。

5、Project->Options->Delphi Compiler->Linker->Options passed to the LD linker 中增加“-framework AudioToolbox”。

6、现在可以编译发布带libbass.a的程序了。但如果程序代码中使用BASS_StreamCreateFile函数,编译器将报标识符未找到的错误,如下图所示。这是因为该函数使用了iOS的CFNetwork.framework。

7、同理,需要增加CFNetwork的引用。由于SDK中已经默认同步了CFNetwork,因此只需在第5步Link Option中再增加一个“-framework CFNetwork”即可。

 

8、至此,就可以编译发布使用BASS播放内存MP3的程序了。

PS:官网说bass依赖的framework有: AudioToolbox, SystemConfiguration, CFNetwork, Accelerate, CoreMIDI(如果使用了BassMiDi)。所以请自行增加SystemConfiguration,Accelerate的引用。

Demo源码下载

libbass.a: http://s.cdz.la/file/7690588

bass.pas: http://s.cdz.la/file/7690589

demo: http://s.cdz.la/file/7690592

http://blog.csdn.net/tht2009/article/details/50183721

Firemonkey使用iOS的第三方静态库(Link Binary With Libraries)的更多相关文章

  1. 在iOS中创建静态库

    如果您有不错的原创或译文,欢迎提交给我们,更欢迎其他朋友加入我们的翻译小组(联系qq:2408167315).  =========================================== ...

  2. Carthage 让项目支持及使用,第三方静态库转为动态库

    Carthage介绍 具体使用,可以查看官网的,文档地址 https://github.com/Carthage/Carthage.如果看不懂英文,可以看一下官文的翻译:https://www.jia ...

  3. 关于iOS上的静态库

    最近再进行项目的真机调试,然后发现了一个天坑.就此研究了一些iOS上的静态库的使用: 首先我们是直接拿一个可以运行的项目来制作静态库的,网上大部分都是先创建静态库然后再写内容,看看我的方法. 1.把子 ...

  4. iOS开发中静态库之".framework静态库"的制作及使用篇

    iOS开发中静态库之".framework静态库"的制作及使用篇 .framework静态库支持OC和swift .a静态库如何制作可参照上一篇: iOS开发中静态库之" ...

  5. iOS开发中静态库制作 之.a静态库制作及使用篇

    iOS开发中静态库之".a静态库"的制作及使用篇 一.库的简介 1.什么是库? 库是程序代码的集合,是共享程序代码的一种方式 2.库的类型? 根据源代码的公开情况,库可以分为2种类 ...

  6. iOS开发之静态库(五)—— 图片、界面xib等资源文件封装到静态框架framework

    编译环境:Macbook Air + OS X 10.9.2 + XCode5.1 + iPhone5s(iOS7.0.3) 一.首先将资源文件打包成bundle 由于bundle是静态的,所以可以将 ...

  7. 【iOS】编译静态库

    与java和.net一样,objc也由类库的概念,不过在在objc上一般叫库,库表示程序代码集合,可以共享给其他程序使用,库是编译后的二进制文件,因此不能看到源代码,多用于一些开放sdk(如百度地图s ...

  8. cmake的使用二:链接第三方静态库

    cmake的使用二:链接第三方静态库

  9. 【转】iOS编译OpenSSL静态库(使用脚本自动编译)

    原文网址:https://www.jianshu.com/p/651513cab181 本篇文章为大家推荐两个脚本,用来iOS系统下编译OpenSSL通用库,如果想了解编译具体过程,请参看<iO ...

随机推荐

  1. jar 打包后的文件执行时出现错误:RunJar jarFile [mainClass] args...

    修改别人的jar包中的配置文件,然后再打包后执行出错:RunJar jarFile [mainClass] args... 经过分析,是因为打包时需要设置mainClass,可以通过如下方法: jar ...

  2. Object-c KVC的使用和举例

    如果我们的对象需要使用KVC,必须符合object-c的非正式协议NSKeyValueCoding.我们可以简单的来理解KVC,即所有符合KVC机制的对象都看成一个字典(NSDictionary),对 ...

  3. setTimeout 虚假的“异步”

    看这篇http://www.laruence.com/2009/09/23/1089.html 所以实际上 setTimeout更像是任务按照队列执行  经过setTimeout设置后任务放在了队尾 ...

  4. 试用阿里云RDS的MySQL压缩存储引擎TokuDB

    以前就用过自己搭建MySQL服务器的两种存储引擎MyISAM和InnoDB(也用过一点Memory方式),在今年初转向阿里云关系型数据库服务RDS的时候,看到可调参数中有一个TokuDB,不过不太了解 ...

  5. AttributeError: 'module' object has no attribute 'Thread'

    $ python thread.py starting at: 2015-08-05 00:24:24Traceback (most recent call last):  File "th ...

  6. Microsoft Accelerator for Windows Azure Alum Azuqua 今天启动

     云最大的一个优势就是,它使开发人员比以往任何时候都更迅速.更灵活.在 Windows Azure 中开发应用程序时,工程师无需考虑架设服务器.规划容量或进行日常维护.相反,他们可以专注于提出假设 ...

  7. swjtu 1962 A+B(模拟)

    题目链接:http://acm.swjtu.edu.cn/JudgeOnline/showproblem?problem_id=1962 问题思路:考察编程基础的问题,涉及到字符串转为数字的问题. 代 ...

  8. android 支持分组和联系人展示的一个小样例

    先看效果图: 要实现这个效果,activity必须实现ExpandableListActivity @Override public void onCreate(Bundle savedInstanc ...

  9. Ext JS学习第十五天 Ext基础之 Ext.DomQuery

    此文同来记录学习笔记 •Ext.dom.Query 嗯,这个类一看就是到时做什么事儿的,不用我去过多的解释了.这个类一共提供了8个方法供开发人员去使用. •要说最常用的方法,无非就是Ext.query ...

  10. 离线安装.NET 3.5小记

    最近为系统新增一个功能,写完以后进行部署,发现在IIS7上部署没有问题,但是IIS6上部署会出现未知情况,具体表现为取不到数据,估计是IIS6和IIS7直接的差异导致程序异常退出. 为了重现异常,在本 ...