I wrote Chirp because, frankly, although using AVFoundation is incredibly easy, it’s not easy enough — especially for new developers.
Chirp turns the following code:
if let soundURL = NSBundle.mainBundle().URLForResource("boop", withExtension: "wav") {
var mySound: SystemSoundID = 0
AudioServicesCreateSystemSoundID(soundURL, &mySound)
AudioServicesPlaySystemSound(mySound);
}Into:
Chirp.sharedManager.playSound("boop")With Chirp, you do not need to keep track of SystemSoundIDs yourself. This is a huge bonus!
Chirp has 3 main functions
- prepareSound(…)
- playSound(…)
- removeSound(…)
And these are the only functions you should need to prepare (load into memory), play, and remove (cleanup from memory) sounds in your app!
Example
prepareSound(…)
/* MyViewController.swift */override func viewDidLoad() {
super.viewDidLoad()
// Load sounds into memory
Chirp.sharedManager.prepareSound("boop") // default extension is .wav
Chirp.sharedManager.prepareSound("ding.mp3") // so other extensions you must name explicitly
}
playSound(…)
func submitButtonTouched(button: UIButton) {
// Since the sound is already loaded into memory, this will play immediately
Chirp.sharedManager.playSound("boop") // example function that might get called when you touch a button
submitForm()
}
playSound(…)
func submissionDidFinish(success: Bool) {
if success {
// This will also play immediately because you loaded the sound into memory in ViewDidLoad()
Chirp.sharedManager.playSound("ding.mp3")
} else {
// This sound was not preloaded into memory, and therefore will not play. Remember to prepare sounds first!
Chirp.sharedManager.playSound("oops.mp3")
}
}removeSound(…)
deinit {
// Cleanup is really simple!
Chirp.sharedManager.removeSound("boop")
Chirp.sharedManager.removeSound("ding.mp3")
Chirp.sharedManager.removeSound("oops.mp3") // If you never loaded the sounds, e.g. viewDidLoad wasn't called, or submission never failed or succeeded,
// that's ok, because these will function as no-ops
}
I hope you find this library helpful. Please feel free to leave me feedback here, and report any issues you may find on the Github repo
Enjoy!