nick shmick
nick shmick

Reputation: 925

How to edit a SystemSoundID object volume?

Im using SystemSoundID to create a sound when a button was pressed, this way:

this is the object declaration:

SystemSoundID soundEffect;

this is in the viewDidLoad:

NSString *soundPath = [[NSBundle mainBundle]pathForResource:@"create_button_sound" ofType:@"mp3"];

NSURL *soundURL = [NSURL fileURLWithPath:soundPath];

AudioServicesCreateSystemSoundID(CFBridgingRetain(soundURL), &soundEffect);

And finally when the button was pressed:

AudioServicesPlaySystemSound(soundEffect);

What is the best way to control the sound of the effect? I want to make sure that if someone have his iphone volume level set to max so the sound wont be crazy loud..

thanks@@!

Upvotes: 0

Views: 669

Answers (1)

jnpdx
jnpdx

Reputation: 52645

According to this SO question (AudioServicesPlaySystemSound Volume? -- slightly out of date since Sounds is no longer under General), you're going to get stuck because of a global setting that can override volumes for system sounds.

The workaround is to use AVAudioPlayer instead, if that's a possibility.

Example:

    NSString *soundPath = [[NSBundle mainBundle]pathForResource:@"create_button_sound" ofType:@"mp3"];

    NSURL *soundURL = [NSURL fileURLWithPath:soundPath];
    AVAudioPlayer *mySoundPlayer =[[AVAudioPlayer alloc] soundURL error:&error];
    mySoundPlayer .volume=0.8f; //between 0 and 1
    [mySoundPlayer prepareToPlay];
    mySoundPlayer.numberOfLoops=0; //or more if needed

    [mySoundPlayer play];

Upvotes: 1

Related Questions