Finch 1.0.3

Finch 1.0.3

测试已测试
语言语言 Obj-CObjective C
许可证 MIT
发布最后发布2018年5月

Tomáš Znamenáček维护。



Finch 1.0.3

  • Tomáš Znamenáček

关于

Finch是一个简单的基于OpenAL的iOS声音效果播放器。为什么写Finch而不是坚持使用Apple的AVAudioPlayer,详见我在Stack Overflow上的问题。目标是简单的:(1) 无需烦恼地播放声音效果,(2) 不要像AVAudioPlayer那样在play方法中滞后。Finch不是为了播放背景音乐而设计的。如果您想播放背景音乐,可以选择使用AVAudioPlayer。Finch可以在背景音乐上播放声音效果。

安装

Finch是一个静态库。您最好的选择是使用Xcode 4的“工作空间”功能,将Finch项目添加到您项目的项目中,将适当的目标链接到libFinch。唯一剩下的事情就是注意头文件。这有点麻烦(见另一个SO问题),但从本质上来说,您可以将在您的项目中的文件夹中(例如Support)放入Finch,并将用户头搜索路径设置为该文件夹及其以下(Support/**)。

如果您对上面提供的说明不确定,请参阅Jonah Williams的Xcode 4静态库教程。

使用

在链接库并导入头文件之后,您可以开始使用代码了

#import "FISoundEngine.h"

NSError *error = nil;
FISoundEngine *engine = [FISoundEngine sharedEngine];
FISound *sound = [engine soundNamed:@"finch.wav" maxPolyphony:4 error:&error];
if (!sound) {
    NSLog(@"Failed to load sound: %@", error);
} else {
    [sound play];
}

如果没有使用 maxPolyphony 参数加载声音,每次只会播放一个“声音”。如果在声音播放完毕之前调用 play,它将从头再次播放。

-----------------> time
ra
  ra
    rapid fire!

如果您想叠加多个声音实例,请将 maxPolyphony 参数设置为需要叠加的声音的最大数量。

-----------------> time
rapid fire!
  rapid fire!
    rapid fire!

请注意,Finch 目前还不支持压缩音频。您应该使用采样率 为 44.1 kHz 的 8 位或 16 位单声道或立体声 little-endian WAV 文件,这是安全的。项目中有一个示例目标,您可以查看它以了解更多信息。

音频中断处理

您的应用程序的音频会话可能会在任何时候被中断,无论是由于来电、开始播放 iPod 播放列表或其他任何原因。在这种情况下,您必须正确挂起音频会话并在中断结束后稍后再恢复它。这有点困难,因为声音系统对您的挂起和恢复代码非常挑剔。

Finch 目前支持使用 FISoundEngine 类的 suspended 属性挂起和恢复。当您收到系统发来的中断通知或回调时,您可以将此属性设置为 YES,然后在中断结束时将其翻转回 NO。不过,有一个小小的陷阱——当您的应用程序收到中断结束的通知时,您的应用程序仍然可能在后台运行,因此它不能立即恢复声音会话。您必须等待应用程序再次激活,然后才能恢复声音引擎。关于如何实现这一点,请参见示例项目中应用程序代理。 (请注意,音频会话代理、回调和通知在不同版本的 iOS 之间可能有所不同。)

更多信息可以通过查阅 AVAudioSession 类的文档来获得。

黑客行为

FISoundEngineFISound 类实际上是在实现 OpenAL 基本操作的管道类之上的一层薄层。想了解更多,请查看 Xcode 项目,如果您需要做自己的事情,这很简单。一些可能对您有用的链接:

许可

代码在 MIT 许可证 下提供。基本上您可以随心所欲地使用此软件,只要您保留版权声明和许可文本。

作者 & 支持

代码由 Tomáš Znamenáček 编写,[email protected].
Finch 图片版权 © asukawashere.

如果你有一个可能对其他人也感兴趣的问题,你可以在 Stack Overflow 上提问,并将你的问题链接发给我。这比私下讨论更好,因为你可以从其他人那里获得答案,一旦问题得到回答,其他人也可以从答案中受益。