2 mp3 звучит одновременно в iphone? - PullRequest
2 голосов
/ 17 февраля 2011

Можем ли мы одновременно воспроизводить 2 звука mp3 на iphone? Поддерживает ли iphone эту функцию?

Ответы [ 2 ]

5 голосов
/ 17 февраля 2011

Используйте интерфейсы в службах Audio Queue (AudioToolbox / AudioQueue.h). Создайте один объект аудио-очереди для каждого звука, который вы хотите воспроизвести. Затем укажите время одновременного запуска первого аудиобуфера в каждой аудио-очереди, используя функцию AudioQueueEnqueueBufferWithParameters.

Следующие ограничения относятся к одновременным звукам в iPhone OS в зависимости от формата аудиоданных:

Аудио AAC, MP3 и ALAC (Apple Lossless): вы можете воспроизводить несколько звуков формата AAC, MP3 и ALAC одновременно; воспроизведение нескольких звуков этих форматов потребует ресурсов ЦП для декодирования.

Линейный PCM и IMA / ADPCM (аудио IMA4): Вы можете воспроизводить несколько линейных звуков формата PCM или IMA4 одновременно без проблем с ресурсами ЦП.

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

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

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

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

Для получения дополнительной информации посетите Воспроизведение / запись аудио

1 голос
/ 17 февраля 2011

Да, но это раздражает как s *** (для пользователя).

(вроде (псевдокод)) (мне лень искать имена / библиотеки методов)

-(void)playSounds{
    NSAutoreleasePool *pool = [[NSAutoreleasePool alloc]init];
    [self playSound1];
    [self playSound2];
    [pool release];
}

-(void)playSound1{
    NSString *path = [[NSBundle mainBundle] pathForResource:@"file1" <br>                                                      ofType:@"m4a"];  
    AVAudioPlayer* player= [[AVAudioPlayer alloc] initWithContentsOfURL:<br>                                                 [NSURL fileURLWithPath:path]<br>                                                                  error:NULL];  
    player.delegate = self;  
    [player play];
}

-(void)playSound2{
     SString *path = [[NSBundle mainBundle] pathForResource:@"file2" <br>                                                      ofType:@"m4a"];  
    AVAudioPlayer* player= [[AVAudioPlayer alloc] initWithContentsOfURL:<br>                                                 [NSURL fileURLWithPath:path]<br>                                                                  error:NULL];  
    player.delegate = self;  
    [player play];
}

Обратите внимание, что это действительно быстро и грязно.Если вам нужна точность, вам, вероятно, придется уведомить, когда игроки будут готовы, и написать функцию, которая запускает их сразу.

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