Звучит, играя друг над другом с помощью AVAudioPlayer - PullRequest
0 голосов
/ 24 февраля 2011

Хорошо, извините, если я выгляжу как нуб, но я новичок в 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];
}

Буду очень признателен, если кто-нибудь сможет мне помочь.

Спасибо.

Ответы [ 2 ]

1 голос
/ 05 сентября 2011

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

[myAudio play];

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

[myOtherAudioThatsPlaying stop];
[myAudio play];

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

0 голосов
/ 19 января 2014

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

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

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

AVAudioPlayer* myAudio;

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

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

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

...