Несколько звуков в приложении iPhone? - PullRequest
3 голосов
/ 07 января 2009

Я получил возможность проигрывать один звук в приложении для iPhone, которое я запустил, но теперь я хочу воспроизвести несколько звуков на основе кнопки. Создание отдельного набора файлов .m и .h для каждого звукового сопровождения, а затем включение их всех, кажется не самым эффективным способом решения этой проблемы с точки зрения кодирования ... опять же, я только начинаю с какао и только что завершил свое первое приложение.

Любая помощь приветствуется. Ключ здесь состоит из нескольких звуков, каждый из которых запускается своей кнопкой или изображением. Спасибо.

Ответы [ 5 ]

8 голосов
/ 07 января 2009

Если файлы в формате MP3 или AAC, то вы можете воспроизводить только по одному за раз. Это ограничение основного звука на iPhone.

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

NSString *path = [[NSBundle mainBundle] pathForResource:@"dream" ofType:@"m4a"];  
AVAudioPlayer* theAudio=[[AVAudioPlayer alloc] initWithContentsOfURL:[NSURL fileURLWithPath:path] error:NULL];  
theAudio.delegate = self;  
[theAudio play];

Чтобы преобразовать MP3 в нечто вроде IMA4 (который вы можете воспроизводить более одного одновременно), вы должны выполнить следующее (в терминале, в леопарде):

/usr/bin/afconvert -f caff -d ima4 sound.mp3 sound.caf

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

4 голосов
/ 07 января 2009

Если у вас есть доступ к сети разработчиков iPhone, то есть множество примеров кода, которые показывают вам, как воспроизводить аудио .

Все, что вам нужно сделать, это создать один класс с функцией с именем

-(void)Play:(NSString*)sSoundFile {
    // play sound file here
}
2 голосов
/ 07 января 2009

У меня нет непосредственного опыта разработки для iPhone, но теоретически вы могли бы создать один большой звуковой файл со всеми вашими звуками в нем? Каждый звук может быть отделен достаточным количеством тишины для индивидуального доступа по индексу времени. Конечно, недостатком является то, что вам придется загружать весь файл в память, если вы не сможете найти способ загрузки кусков в режиме произвольного доступа ...

1 голос
/ 06 февраля 2009

@ rustyshelf - это работает в симуляторе? Я использую этот код и использую #import, но ни audioPlayerDidFinishPlaying, ни audioPlayerDecodeErrorDidOccur никогда не вызывали. Очень раздражает попытка отладки.

0 голосов
/ 12 января 2012

http://www.icodeblog.com/2009/05/04/iphone-game-programming-tutorial-part-4-basic-game-audio/

в этом примере в ios5 нужно поставить CFURLRef soundurl = (__ bridge CFURLRef) [NSURL fileURLWithPath: objstring];

вместо

CFURLRef soundurl = (CFURLRef) [NSURL fileURLWithPath: objstring];

Хардик Мамтора

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...