Исходя из опыта, AVAudioPlayer довольно хорошо работает при воспроизведении нескольких звуков одновременно или очень быстро один за другим. Лучший способ его использования - просто создать один метод, который вы вводите в NSString
, чтобы воспроизвести какой-либо звук с именем, содержащимся в этом NSString
... таким образом, вы создадите новый проигрыватель для каждого звукового файла. что ты играешь. Будьте осторожны при освобождении выделенных игроков, если только вы не знаете, что с ними покончено.
Если у вас нет очень больших звуковых файлов, для буферизации которых может потребоваться короткая секунда (вам придется самостоятельно выяснить, можете ли вы жить с любой задержкой или нет), у меня никогда не возникало проблем с медленной , Если это медленно, вы, вероятно, делаете что-то против рекомендаций Apple относительно декодирования определенных файлов (то есть для нескольких звуков одновременно, Apple рекомендует формат CAF, так как он аппаратно декодируется, а не программно декодируется): http://developer.apple.com/iphone/library/documentation/AVFoundation/Reference/AVAudioPlayerClassReference/Reference/Reference.html
Обновление
Вот как я кодирую свои файлы с помощью сценария оболочки. Поместите это в файл с именем batchit.sh
в своем собственном каталоге. Затем поместите в этот каталог любые файлы .WAV, которые вы хотите закодировать как файл .CAF. Откройте Terminal
на вашем Mac, cd
для этого каталога и введите sh batchit.sh
и дайте ему это сделать. Пакетное преобразование всех файлов ... Вот код:
for f in *; do
if [ "$f" != "batchit.sh" ]
then
/usr/bin/afconvert -f caff -d ima4 $f
echo "$f converted"
fi
done
Обратите внимание, что я ничего не делал в методе audioPlayerDidFinishPlaying
, который является методом делегата AVAudioPlayer
. Вам нужно будет добавить код для правильного освобождения игроков после того, как каждый из них закончил играть (эй, я не могу сделать всю работу за вас :), чтобы вся память была распределена правильно. В противном случае вы в конечном итоге закончите, если будете бесконечно продолжать создавать игроков, не освобождая их. Поскольку кажется, что у вас тяжелый день ... см. Ниже большой совет.
Это вся помощь, которую я могу оказать. Ты должен учиться и зарабатывать остальное
- (void)audioPlayerDidFinishPlaying:(AVAudioPlayer *)player successfully:(BOOL)flag {
// do something here if you want.. you know like maybe release the old players by uncommenting the line below :)
//[player release];
}