Звуки накладываются друг на друга с помощью AVAudioPlayer

Хорошо, извините, если я покажусь нубом, но я новичок в xcode. Я сейчас делаю звуковую плату, и у меня есть все кнопки, чтобы работать и воспроизводить звуки с них.

Однако, если воспроизводится один звук, когда я нажимаю другую кнопку, вместо того, чтобы останавливать исходный звук, он просто воспроизводится поверх него, поэтому я блуждал, знает ли кто-нибудь, как это исправить?

Вот код, который я использую для кнопок:

- (IBAction)playsound {
    NSString *path = [[NSBundle mainBundle] pathForResource:@"Gold" ofType:@"mp3"];
    AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];
    myAudio.delegate = self;
    myAudio.volume = 2.0;
    myAudio.numberOfLoops = 0;
    [myAudio play];
}

Я был бы очень признателен, если бы кто-то мог мне помочь.

Спасибо.


person Troy Henshall    schedule 24.02.2011    source источник


Ответы (2)


Если другой звук все еще воспроизводится, вам нужно сказать ему остановиться. Вы, вероятно, захотите изучить вызов метода stop на другом AVAudioPlayer. Итак, что-то вроде того, где у вас есть:

[myAudio play];

... вставьте вызов метода непосредственно перед этим, чтобы остановить другой звук.

[myOtherAudioThatsPlaying stop];
[myAudio play];

Возможно, имеет смысл также просмотреть документацию по AVAudioPlayer. .

person bobtiki    schedule 05.09.2011

Хотя ответ бобтики формально правильный, имеет смысл вызывать метод stop только в том случае, если вы хотите сделать что-то полезное со звуком после его остановки, например, начать воспроизводить его снова. Поскольку вы просто хотите избавиться от него, я рекомендую просто освободить проигрыватель, что автоматически остановит воспроизведение звука. Итак, вместо

AVAudioPlayer* myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];

добавьте переменную экземпляра в свой класс:

AVAudioPlayer* myAudio;

тогда просто используйте

  myAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];

Каждый раз, когда воспроизводится новый звук, myAudio назначается новый указатель, а старый AVAudioPlayer просто освобождается.

person Mojo66    schedule 19.01.2014