2015-01-20 2 views
0

мне удалось загрузить аудио файл на проигрыватель и воспроизводить его с помощью следующего метода:Xcode предварительно загружает много аудиофайлов в один AVAudioPLayer?

- (void) play:(NSString*)loop{ 

NSString* resourcePath = [[NSBundle mainBundle] pathForResource:loop 
                  ofType:@"mp3"]; 



player = [[AVAudioPlayer alloc] initWithContentsOfURL: 
      [NSURL fileURLWithPath:resourcePath]]; 

    player.delegate = self; 
    [player play]; 
    player.numberOfLoops = 1; 
    player.currentTime = 0; 
    player.volume = 1.0; 
} 
} 

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

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

У меня около 200 звуков в моем приложении, и один способ - загрузить каждый звук в свой AVAudioPLayer в viewDidLoad, но я сомневаюсь, что это считается хорошим кодом.

На Android я использую SoundPool для этой проблемы, и он отлично работает, но я не думаю, что на iOS есть эквивалент.

ответ

0

теперь я сумел сделать это с помощью AudioServicesPlaySystemSound()

Я использую метод, который загружает все звуки в огромном массиве

- (void)prepSounds{ 
    NSString *soundPath = 
    [[NSBundle mainBundle] pathForResource:@"bl3" 
            ofType:@"mp3"]; 
    NSURL *soundPathURL = [NSURL fileURLWithPath:soundPath]; 
    AudioServicesCreateSystemSoundID(
            (__bridge CFURLRef)soundPathURL, &soundID[0]); 
    AudioServicesPlaySystemSound(soundID[0]); 

} 

где soundID[] является массивом SystemSoundID объявлен в заголовке.

Теперь я могу просто запустить звук через AudioServicesPlaySystemSound(soundID[0]), где 0 относится к первому загруженному звуку. Задержка близка к 0 (я бы догадался 5 мс)

Однако это работает только для звуков не более 30 секунд.

Если вам нужна помощь, просто прокомментируйте здесь, я рад помочь.

Смежные вопросы