LVGSwiftSystemSoundServices 1.0.1

LVGSwiftSystemSoundServices 1.0.1

测试已测试
语言语言 SwiftSwift
许可 MIT
发布时间最新发布2016年5月
SPM支持 Swift Package Manager (SPM)

Aaron Rasmussen 维护。



LVGSwiftSystemSoundServices

这是一个围绕 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() 作为警报播放。当声音播放完成后,将调用 delegatedidFinishPlaying(_:) 方法。如果不需要这个功能,则无需设置 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,则无需处理声音。它将在 SystemSounddeinit 方法中自动处理。

添加完成处理程序

系统声音允许您添加一个完成处理程序,在声音播放完成后会被调用。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 类,则没有完成处理程序。相反,使用 SystemSounddelegate 属性为系统声音分配一个代理。完成播放时调用代理的 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 网站上的文档。

需求

  • Mac OS X 10.10或更高版本
  • iOS 8.0或更高版本

安装

LVGSwiftSystemSoundServices可通过CocoaPods获取。安装它,只需将以下行添加到您的Podfile中

pod "LVGSwiftSystemSoundServices"

作者

letvargo, [email protected]

许可协议

LVGSwiftSystemSoundServices遵循MIT许可协议。有关更多信息,请参阅LICENSE文件。