2015-05-26 2 views
0

Приложение, которое я создаю, представляет собой инструмент с десятью кнопками, каждый из которых связан с отдельным AVAudioPlayer. Когда я пытаюсь выделить и инициализировать память для каждого AVAudioPlayer в методе ViewDidLoad, я не получаю ошибок, однако чувствительность каждой кнопки отстает, и есть значительное время задержки до того, как одна и та же кнопка будет снова запущена/снова услышана. Я исправил эту ситуацию, выполнив код ниже, однако я не уверен, что это правильный способ обработки памяти, особенно потому, что у меня есть 10 из этих методов.Правильное использование AVAudioPlayer

- (IBAction)note1:(id)sender { 
      url1 = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"note1" ofType:@"wav"]]; 
    unit1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url1 error:nil]; 
    [unit1 play]; 
} 

ответ

0

Одна вещь, вы можете попробовать,

prepareToPlay Вызов метода AVAudioPlayer перед воспроизведением этого файла.

0

Проблема с текущим кодом является то, что вы создаете новый экземпляр AVAudioPlayer каждый раз, когда вы вызываете -note1: Вы можете попробовать это улучшение:

- (IBAction)note1:(id)sender { 
    if (!url1) 
     url1 = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"note1" ofType:@"wav"]]; 

    if (!unit1) 
     unit1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url1 error:nil]; 

    [unit1 play]; 
} 

Однако лучшим способом является инициализирует ваш AVAudioPlayers на одном месте, когда ваш UIViewController загружен:

- (void) initializePlayers { 
    url1 = [NSURL fileURLWithPath:[[NSBundle mainBundle]pathForResource:@"note1" ofType:@"wav"]]; 
    unit1 = [[AVAudioPlayer alloc] initWithContentsOfURL:url1 error:nil]; 
} 

- (void) viewDidLoad { 
    [self initializePlayers]; 
} 

- (IBAction)note1:(id)sender { 
    [unit1 play]; 
} 
+0

благодарит за вашу помощь! Инициализированный в ViewDidLoad и внутри метода кнопки, использовал «unit1.currentTime = 0;» – Scott

0

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

NSURL* url = [[NSBundle mainBundle] URLForResource:@"Rondo_Alla_Turka_Short" withExtension:@"aiff"]; 
NSAssert(url, @"URL is valid."); 
NSError* error = nil; 
self.player = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error]; 
if(!self.player) 
{ 
    NSLog(@"Error creating player: %@", error); 
} 
Смежные вопросы