I have AVFoundation
and AudioToolbox
frameworks added to my project. In the class from where I want to play a system sound, I #include <AudioToolbox/AudioToolbox.h>
and I call AudioServicesPlaySystemSound(1007);
. I'm testing in a device running iOS 8
, sounds are on and volume is high enough, but I don't hear any system sound when I run the app and AudioServicesPlaySystemSound(1007);
is called... what could I be missing?

- 12,319
- 23
- 93
- 186
-
2Did you check the silent switch?? – Jason Nam Sep 10 '15 at 03:58
-
@JasonNam yes, sound is on... – AppsDev Sep 10 '15 at 05:31
-
Do other audios sound well? – Jason Nam Sep 10 '15 at 05:45
-
@JasonNam Ring tones and Music play well... – AppsDev Sep 10 '15 at 06:06
6 Answers
With iOS10 playing audio like this doesn't work:
SystemSoundID audioID;
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL, &mySSID);
AudioServicesPlaySystemSound(audioID);
Use this instead:
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pathURL, &audioID);
AudioServicesPlaySystemSoundWithCompletion(audioID, ^{
AudioServicesDisposeSystemSoundID(audioID);
});

- 14,081
- 3
- 67
- 82
According to the documentation:
This function (
AudioServicesPlaySystemSound()
) will be deprecated in a future release. Use AudioServicesPlaySystemSoundWithCompletion instead.
Use the following code snippet to play sounds:
NSURL *fileURL = [[NSBundle mainBundle] URLForResource:filename withExtension:nil]; //filename can include extension e.g. @"bang.wav"
if (fileURL)
{
SystemSoundID theSoundID;
OSStatus error = AudioServicesCreateSystemSoundID((__bridge CFURLRef)fileURL, &theSoundID);
if (error == kAudioServicesNoError)
{
AudioServicesPlaySystemSoundWithCompletion(theSoundID, ^{
AudioServicesDisposeSystemSoundID(theSoundID);
});
}
}
Also, the completion block ensures that the sound play was completed before it is disposed of.
If this doesn't fix the issue, maybe your problem isn't code related but rather setting related (device on silent / simulator sounds muted from MAC System Preferences, make sure "Play user interface sound effects" is checked)

- 770
- 5
- 14
-
-
3This is from the SDK header file. Try using the deprecated method and XCode will show you the warning message. – Ameer Sheikh Sep 15 '16 at 14:54
This will play system sound.
But remember system sound will not play longer sound.
NSString *pewPewPath = [[NSBundle mainBundle] pathForResource:@"engine" ofType:@"mp3"];
NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_engineSound);
AudioServicesPlaySystemSound(_engineSound);

- 514
- 2
- 14
-
1Can u give some suggestion that how to play longer sound or repeated tone? I have to play repeated sound until the call is not picked. – Aditya May 02 '17 at 07:02
I have just tested the code on an iPad and iPhone running iOS 8, and it is working on the real devices.
For some very strange reason, it isn't working on iOS 8 simulator for any device, even though it works on iOS 7 and 7.1 simulators.
Otherwise below code works fine in all real devices.
NSString *pewPewPath = [[NSBundle mainBundle] pathForResource:@"engine" ofType:@"mp3"];
NSURL *pewPewURL = [NSURL fileURLWithPath:pewPewPath];
AudioServicesCreateSystemSoundID((__bridge CFURLRef)pewPewURL, &_engineSound);
AudioServicesPlaySystemSound(_engineSound);

- 130
- 3
- 13
for swift 3.x and xcode 8:
var theSoundID : SystemSoundID = 0
let bundleURL = Bundle.main.bundleURL
let url = bundleURL.appendingPathComponent("Invitation.aiff")
let urlRef = url as CFURL
let err = AudioServicesCreateSystemSoundID(urlRef, &theSoundID)
if err == kAudioServicesNoError{
AudioServicesPlaySystemSoundWithCompletion(theSoundID, {
AudioServicesDisposeSystemSoundID(theSoundID)
})
}

- 10,876
- 3
- 61
- 48
Here's how you do it in Swift 5.8 and Xcode 14:
let soundID: SystemSoundID = 1104 // kSystemSoundID_Tock
AudioServicesPlaySystemSoundWithCompletion(soundID) {
AudioServicesDisposeSystemSoundID(soundID)
}
⚠️ Make sure the device is not on silent mode!

- 1,230
- 1
- 22
- 35