测试已测试 | ✓ |
语言语言 | SwiftSwift |
许可 | MIT |
发布时间最新发布 | 2016年5月 |
SPM支持 Swift Package Manager (SPM) | ✗ |
由 Aaron Rasmussen 维护。
这是一个围绕 Audio Toolbox 的 System Sound Services API 的包装器。
LVGSwiftSystemSoundServices
使得创建和播放系统声音变得简单。您可以使用提供的 SystemSound
类通过单行代码创建系统声音
let sound = try SystemSound(url: mySoundURL)
然后可以使用 play()
方法来播放声音
sound.play()
LVGSwiftSystemSoundServices
定义了一个协议,SystemSoundType
,其中包含了所有系统声音服务函数的默认实现。如果您想要使用 System Sound Services API 提供的所有工具,您可以通过提供一个 soundID
属性来自定义类型以符合 SystemSoundType
struct MySystemSound: SystemSoundType {
var soundID: SystemSoundID
}
下文详细讨论了创建和播放声音的各种工具。
苹果这样描述系统声音服务
您可以使用系统声音服务播放短(30 秒或更短)的声音。该接口不提供音量、定位、循环或定时控制,并且不支持同时播放:您只能同时播放一个声音。您可以使用系统声音服务提供可听见的警报。在某些 iOS 设备上,警报可以包括振动。
系统声音主要在您需要播放短声音,如警报声音,以响应用户交互时非常有用。它们还可以用于使 iOS 设备震动或在 OS X 上闪烁屏幕。
LVGSwiftSystemSoundServices
由以下组件组成
SystemSoundType
:一个协议,具有对 System Sound Services API 中定义的所有函数的默认扩展方法。SystemSound
:一个类,使得创建和播放系统声音变得简单,包括可以在声音播放完成之后执行操作的 delegate
协议。SystemSoundID
:对 SystemSoundID
的扩展,使其符合 SystemSoundType
协议。SystemSoundDelegate
:一个只有一个函数要求的协议,即 didFinishPlaying(_:)
。该协议用于实现 SystemSound
类的完成处理。SystemSoundProperty
:一个枚举,代表由系统声音服务定义的系统声音属性。该枚举用于替代系统声音服务 API 定义的属性常量。SystemSoundError
:一个 ErrorType
枚举,代表由系统声音服务定义的各种 OSStatus
错误代码。传统的 Swift 错误处理替代了系统声音服务函数返回的尴尬的 OSStatus
代码。SystemSound
SystemSound
类能够轻松创建和播放系统声音。您可以使用要播放的声音文件的 URL 来初始化 SystemSound
。
SystemSound
类有一个 delegate
属性,可以设置为一个符合 SystemSoundDelegate
协议的任何对象。此协议只有一个要求方法 didFinishPlaying(_:)
,在声音播放完成后会被调用。
以下示例简单展示了如何将基本 SystemSound
配置为视图控制器属性
class ViewController: UIViewController, SystemSoundDelegate {
var mySound: SystemSound?
override func viewDidLoad() {
// soundURL is a valid NSURL to a sound file
mySound = try? SystemSound(url: soundURL)
mySound?.delegate = self
}
func didFinishPlaying(sound: SystemSound) {
print("The sound has finished playing.")
}
}
一旦 SystemSound
与 URL 关联,可以使用 mySound?.play()
进行播放,或使用 mySound?.playAsAlert()
作为警报播放。当声音播放完成后,将调用 delegate
的 didFinishPlaying(_:)
方法。如果不需要这个功能,则无需设置 delegate
属性。
当使用 SystemSound
类时,您不需要担心在完成使用后如何处理系统声音。当 SystemSound
对象被销毁时,系统声音将被自动处理。
SystemSoundID
SystemSoundID
(实际上是 Uint32
的别名)已符合 SystemSoundType
。这意味着任何 Uint32
值都可以作为系统声音。您需要做的只是初始化它与要关联的声音文件的 URL。
var mySound = try! SystemSoundID(url: soundURL)
初始化后,您可以调用它上的可用 SystemSoundType
方法的任何方法。
// Play the sound
mySound.play()
// Play the sound as an alert
mySound.playAsAlert()
当您使用完毕后应该销毁系统声音。以下代码是视图控制器声明一个 soundID
属性,并在 viewDidLoad
中初始化它,在 deinit
方法中销毁它的示例。
class ViewController: UIViewController {
var soundID: SystemSoundID?
override func viewDidLoad() {
// soundURL is a valid NSURL to a sound file
soundID = try? SystemSoundID(url: soundURL)
}
deinit {
do {
try soundID.dispose()
} catch {
print("\(error)")
}
}
}
注意,如果使用 SystemSound
类而不是 SystemSoundID
,则无需处理声音。它将在 SystemSound
的 deinit
方法中自动处理。
系统声音允许您添加一个完成处理程序,在声音播放完成后会被调用。SystemSoundType 提供添加和删除完成处理程序的两个方法。
// Add a completion handler
public func addCompletion(
inRunLoop: NSRunLoop? = nil,
inRunLoopMode: String? = nil,
inClientData: UnsafeMutablePointer<Void> = nil,
inCompletionRoutine: AudioServicesSystemSoundCompletionProc) throws
// Remove a completion handler
public func removeCompletion()
如果您使用内置的 SystemSound
类,则没有完成处理程序。相反,使用 SystemSound
的 delegate
属性为系统声音分配一个代理。完成播放时调用代理的 didFinishPlaying(_:)
方法。
SystemSoundType
协议和 SystemSound
类都提供访问和设置系统声音属性的方法。
// Get and set the kAudioServicesPropertyIsUISound property
public func isUISound() throws -> Bool
public func isUISound(value: Bool) throws
// Get and set the kAudioServicesPropertyCompletePlaybackIfAppDies property
public func completePlaybackIfAppDies() throws -> Bool
public func completePlaybackIfAppDies(value: Bool) throws
SystemSoundType
有额外的获取属性大小和确定属性是否可写的方法。有关更多详细信息,请参阅 Cocoapods 网站上的文档。
LVGSwiftSystemSoundServices可通过CocoaPods获取。安装它,只需将以下行添加到您的Podfile中
pod "LVGSwiftSystemSoundServices"
letvargo, [email protected]
LVGSwiftSystemSoundServices遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。