tree: 10cae6c5922457701ad9473dbe1d193f080ed52e [path history] [tgz]
  1. JSQSystemSoundPlayer/
  2. LICENSE
  3. README.md
whiskbot-demo-app/Pods/JSQSystemSoundPlayer/README.md

JSQSystemSoundPlayer

Build Status Version Status license MIT

A fancy Obj-C wrapper for iOS System Sound Services.

This class is a light-weight, drop-in component to play sound effects, or other short sounds in your iOS app. To determine your audio needs, see Best Practices for iOS Audio. Or, read the tl;dr version:

When your sole audio need is to play alerts and user-interface sound effects, use Core Audio’s System Sound Services.

Your sound files must be:

  • No longer than 30 seconds in duration
  • In linear PCM or IMA4 (IMA/ADPCM) format
  • Packaged in a .caf, .aif, or .wav file

If this does not fit your needs, then this control is not for you! See AVAudioPlayer, instead.

JSQSystemSoundPlayer Screenshot

Features

  • Play sound effects and alert sounds with a single line of code
  • “Play” vibration (if available on device)
  • Block-based completion handlers
  • Integration with NSUserDefaults to globally toggle sound effects in your app
  • Sweet and efficient memory management
  • Caches sounds (SystemSoundID instances) and purges on memory warning
  • Works with Swift! (v2.0.0 and above)

Requirements

  • iOS 6.0+
  • ARC

Installation

pod 'JSQSystemSoundPlayer'

Otherwise, drag the JSQSystemSoundPlayer/ folder to your project, and add AudioToolbox.framework.

Getting Started

Playing sounds

[[JSQSystemSoundPlayer sharedPlayer] playSoundWithFilename:@"mySoundFile"
                                             fileExtension:kJSQSystemSoundTypeAIF
                                                completion:^{
                                                   // completion block code
                                                }];

And that's all!

String constants for file extensions provided for you:

  • kJSQSystemSoundTypeCAF
  • kJSQSystemSoundTypeAIF
  • kJSQSystemSoundTypeAIFF
  • kJSQSystemSoundTypeWAV

Toggle sounds effects settings on/off

Need a setting in your app‘s preferences to toggle sound effects on/off? JSQSystemSoundPlayer can do that, too! There’s no need to ever check the saved settings ([JSQSystemSoundPlayer sharedPlayer].on) before you play a sound effect. Just play a sound like in the example above. JSQSystemSoundPlayer respects whatever setting has been previously saved.

[[JSQSystemSoundPlayer sharedPlayer] toggleSoundPlayerOn:YES];

Specifying a bundle

Need to load your audio resources from a specific bundle? JSQSystemSoundPlayer uses the main bundle by default, but you can specify another.

NOTE: for each sound that is played JSQSystemSoundPlayer will always search the last specified bundle. If you are playing sound effects from multiple bundles, you will need to specify the bundle before playing each sound.

[JSQSystemSoundPlayer sharedPlayer].bundle = [NSBundle mainBundle];

Demo

Also see the included demo project: SoundPlayerDemo.xcodeproj

For a good time

while (1) {
    [[JSQSystemSoundPlayer sharedPlayer] playVibrateSound];
}

Documentation

Read the fucking docs, available here via @CocoaDocs.

Contribute

Please follow these sweet contribution guidelines.

Design

Why is this a Singleton? Singletons are garbage. I agree! But here's why this is a valid use case:

  1. This library manages the use of audio resources. Semantically, you only have 1 sound asset per sound effect. This is akin to [NSFileManager defaultManager]. You only have file system from which to read data.
  2. The singleton allows the caching of SystemSoundID instances.

Donate

Support the development of this free, open-source library!

Donations made via Square Cash

Credits

Created by @jesse_squires, a programming-motherfucker.

Apps using this library

License

JSQSystemSoundPlayer is released under an MIT License. See LICENSE for details.

Copyright © 2014 Jesse Squires.

Please provide attribution, it is greatly appreciated.