Звуковые файлы AVAudioPlayer, воспроизводимые из синхронизации при смешивании - iPhone - PullRequest
3 голосов
/ 06 июня 2011

Я пытаюсь воспроизвести 6 отдельных звуковых файлов .mp3, используя экземпляры AVAudioPlayer. Звуки воспроизводятся в одно и то же время, но, кажется, они воспроизводятся несинхронно или на немного разных скоростях. Кто-нибудь знает, почему это может быть?

Вот как я инициализирую звук:

 NSURL *musicurl = [[NSURL alloc] initFileURLWithPath:[[NSBundle mainBundle] pathForResource: @"SoundLoop" ofType: @"mp3"]];
music = [[AVAudioPlayer alloc] initWithContentsOfURL: musicurl error: nil];
[musicurl release];
music.numberOfLoops = -1; // Loop indefinately
music.currentTime = 0; // start at beginning
music.volume = 1.0;
music.meteringEnabled = YES;

и вот мой код AudioSession:

AVAudioSession *audioSession = [AVAudioSession sharedInstance];
audioSession.delegate = self;
[[AVAudioSession sharedInstance] setCategory:AVAudioSessionCategoryPlayback error:nil];     
[[AVAudioSession sharedInstance] setPreferredHardwareSampleRate:44100 error:nil];
[[AVAudioSession sharedInstance] setPreferredIOBufferDuration:30 error:nil];

UInt32 sessionCategory = kAudioSessionCategory_MediaPlayback;
Float32 hardvol = 1.0;
AudioSessionSetProperty(kAudioSessionProperty_AudioCategory, sizeof(sessionCategory), &sessionCategory);
AudioSessionSetProperty(kAudioSessionProperty_CurrentHardwareOutputVolume, sizeof(hardvol), &hardvol);
UInt32 doSetProperty = 1;
AudioSessionSetProperty(kAudioSessionProperty_OverrideCategoryMixWithOthers, sizeof(doSetProperty), &doSetProperty);
[[AVAudioSession sharedInstance] setActive:YES error: nil]; 

Может ли это иметь какое-либо отношение к скорости звука? или что я использую .mp3?

Спасибо.

Ответы [ 2 ]

5 голосов
/ 12 июня 2011

Я нашел решение этой проблемы с помощью метода playAtTime: класса AVAudioPlayer:

   NSTimeInterval shortStartDelay = 0.5;            // seconds
    NSTimeInterval now = player.deviceCurrentTime;

    [player playAtTime:now + shortStartDelay];  //these players are instances of AVAudioPlayer
    [player2 playAtTime:now + shortStartDelay];
    [player3 playAtTime:now + shortStartDelay];

Использование этого позволит всем звукам воспроизводиться асинхронно и синхронно.

1 голос
/ 06 июня 2011

Вам следует ознакомиться с Руководством по программированию MultiMedia.Раздел «Использование аудио» содержит массу полезной информации.http://developer.apple.com/library/ios/#documentation/AudioVideo/Conceptual/MultimediaPG/Introduction/Introduction.html

Похоже, это относится к вашей проблеме:

При использовании аппаратного декодирования устройство может воспроизводить только один экземпляр одного из поддерживаемых форматов навремя.Например, если вы воспроизводите стереофонический звук MP3 с использованием аппаратного кодека, второй одновременный звук MP3 будет использовать программное декодирование.Точно так же вы не можете одновременно воспроизводить звук AAC и ALAC с использованием аппаратного обеспечения.Если приложение iPod воспроизводит звук AAC или MP3 в фоновом режиме, оно требует аппаратного кодека;Затем ваше приложение воспроизводит аудио AAC, ALAC и MP3 с помощью программного декодирования.

Чтобы воспроизводить несколько звуков с наилучшей производительностью или эффективно воспроизводить звуки, когда iPod воспроизводит фон, используйте линейный PCM (без сжатия) илиIMA4 (сжатое) аудио.

Вот еще один момент, в котором утверждается, что то, что вы делаете, должно быть возможным, но похоже, что Apple бросает предостережение с линией «наиболее эффективное использование нескольких процессоров».Я бы подумал, что если процессор будет перегружен, что может привести к тому, что он не будет работать идеально во времени.

Начиная с iOS 3.0, почти все поддерживаемые аудиоформаты могут использоваться для одновременного воспроизведения, а именно: всете, которые могут быть воспроизведены с использованием программного декодирования, как описано в таблице 1-1.Для максимально эффективного использования нескольких процессоров используйте линейный звук PCM (несжатый) или IMA4 (сжатый).

С точки зрения отладки, вы должны начать с двух звуковых звуков и посмотреть, есть ли проблема,Затем пройдите до 6 и выясните, есть ли определенная точка, в которой проблема начинает возникать.Я также нашел бы (или сделал) некоторые звуковые дорожки в форматах, которые рекомендует Apple (PCM или IMA4), и провел бы те же испытания с ними.Выполнение этих двух вещей должно помочь вам сузить суть проблемы.

...