Звук AVAudioPlayer на iPhone неожиданно останавливается: как отлаживать? - PullRequest
0 голосов
/ 30 мая 2009

Я реализую звуковой эффект, который воспроизводится, когда пользователь перетаскивает UISlider.

В предыдущем вопросе я использовал AudioServicesPlaySystemSound () , но этот тип звука не может быть остановлен. Мне нужно, чтобы звук остановился, когда пользователь не активно перетаскивает ползунок, но не выпустил его.

Теперь я создаю звук, используя объект AVAudioPlayer . Я инициализирую его в своем контроллере вида следующим образом:

@interface AudioLatencyViewController : UIViewController <AVAudioPlayerDelegate> {
AVAudioPlayer *player1;
}

@implementation AudioLatencyViewController
@property (nonatomic, retain) AVAudioPlayer *player1;
@synthesize player1;

-(void)viewDidLoad {

[super viewDidLoad];

// the sound file is 1 second long
NSString *soundFilePath = [[NSBundle mainBundle] pathForResource:@"tone1" ofType:@"caf"];
NSURL *fileURL = [[NSURL alloc] initFileURLWithPath:soundFilePath];

AVAudioPlayer *newPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:fileURL error:nil];

[fileURL release];
self.player1 = newPlayer;;
[newPlayer release];

[self.player1 prepareToPlay];
[self.player1 setDelegate:self];
}

У меня есть два способа управления звуком. Первый воспроизводит звук всякий раз, когда движется слайдер. Он связан с событием Значение UISlider в Интерфейсном Разработчике.

-(IBAction)sliderChanged:(id)sender;
{
    // only play if previous sound is done. helps with stuttering
    if (![self.player1 isPlaying]) {
        [self.player1 play];
    }
}

Второй метод останавливает звук, когда пользователь отпускает кнопку ползунка. Он связан с событием UISlider Touch Up Inside .

-(IBAction)haltSound;
{
    [self.player1 stop];
}

Это работает, когда ползунок перемещается, а затем быстро отпускается, но если удерживать кнопку нажатой более двух или трех секунд, звук повторяется (хорошо), а затем прерывается (плохо). С этого момента звук не будет воспроизводиться снова (очень плохо).

Я попытался установить звук для петли, используя:

[self.player1 setNumberOfLoops:30];

... но это приводит к зависанию приложения (плюс блокировка симулятора).

Что я могу сделать для устранения этой проблемы?

1 Ответ

0 голосов
/ 12 июля 2009

Когда пользователь держит UISlider, значение «Измененное» вызывается МНОГИЕ МНОГИЕ раз (в любое время, когда пользователь перемещает лишь небольшую сумму). Я бы использовал Touch Down вместо этого.

Возможно, вы все еще захотите использовать цикл для этого маршрута ...

Мне нравится идея воспроизведения звука, когда пользователь перемещает слайдер. Дайте мне знать, как это работает.

deggstand@gmail.com

...