AVAudioPlayer doesn' t играют аудио в однажды в 15 раз

Я сталкиваюсь с действительно странной проблемой с AVAudioPlayer. Я инициализировал AVAudioPlayer, как дали ниже. Это играет аудио большую часть времени, но никакие аудио игры один раз в 15-20 раз. Игрок становится инициализированным правильно и нет никакой ошибки. Пожалуйста, помогите мне устранить проблему.

AVAudioPlayer *backgroundMusicPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:backgroundMusicURL error:&error];
self.backgroundMusicPlayer = backgroundMusicPlayer;
[backgroundMusicPlayer release];
[self.backgroundMusicPlayer setDelegate:self];
[self.backgroundMusicPlayer prepareToPlay];
[self.backgroundMusicPlayer play];
3
nl ja de
покажите свой код URL & получения данных звукового файла
добавлено автор Ravindra Bagale, источник
если вы r, не используя GCD тогда видите мой ответ
добавлено автор Ravindra Bagale, источник

1 ответы

Используйте GCD, чтобы загрузить аудиоданные . использование GCD, чтобы асинхронно загрузить данные песни в случай NSData и использования, что как подача к аудиоплеер. необходимо сделать это потому что, загрузив данные аудио файл, в зависимости от длины звукового файла, может занять много времени и если вы делаете это на главной нити, тогда вы бежите риск остановки опыта UI. Из-за этого необходимо использовать глобальная параллельная очередь, чтобы гарантировать, что ваш код не продолжается главные thread.if это находится на главной нити тогда проблема как вы, столкновение происходит. посмотрите этот пример кода

     dispatch_queue_t dispatchQueue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
        dispatch_async(dispatchQueue, ^(void)
     { 
    NSBundle *mainBundle = [NSBundle mainBundle];
        NSString *filePath = [mainBundle pathForResource:@"MySong" ofType:@"mp3"];
        NSData *fileData = [NSData dataWithContentsOfFile:filePath]; NSError *audioPlayerError = nil;
     self.audioPlayer = [[AVAudioPlayer alloc] initWithData:fileData error:&audioPlayerError];

        if (self.audioPlayer != nil)
    {
        self.audioPlayer.delegate = self;
        if ([self.audioPlayer prepareToPlay] && [self.audioPlayer play])
    {
        NSLog(@"Successfully started playing.");
        } 
    else 
    { 
    NSLog(@"Failed to play the audio file.");
     self.audioPlayer = nil;
        }
        } 
    else { NSLog(@"Could not instantiate the audio player.");
} });

ваша проблема также может быть, происходят из-за initWithContentsOfURL , если это не получает данные через тот URL тогда, это не играет аудио.

Другая проблема с вашим кодом, может выпускать объект audioPlayer. Если вы ассигнуете много объектов и никогда не освобождаете их по памяти. Это могло в конечном счете привести к низкой памяти.

3
добавлено
Спасибо Ravindra, проблема, который i' m столкновение (" - (пустота) audioPlayerDidFinishPlaying: (AVAudioPlayer *) игрок успешно: флаг (BOOL)"), становится названным. Но аудио на самом деле не играет.
добавлено автор Kamlesh Katariya, источник
и больше по я нашел, что иногда аудио игры искажали.
добавлено автор Kamlesh Katariya, источник
Я пытался использовать ваш код. Но тем не менее я столкнулся с проблемой. Все еще аудио искажен в когда-то.
добавлено автор Kamlesh Katariya, источник
Mobile Dev Jobs — вакансии и аналитика
Mobile Dev Jobs — вакансии и аналитика
6 187 участник(ов)

Публикуем вакансии и запросы на поиск работы по направлению iOS, Android, Xamarin и т.д. ВАЖНО: Правила публикации и правила канала: Ссылка – https://telegra.ph/Pravila-oformleniya-vakansij-i-rezyume-11-09-2

iOS Developers — русскоговорящее сообщество
iOS Developers — русскоговорящее сообщество
2 400 участник(ов)

Общаемся на темы, посвященным iOS-разработке, Swift, Objective-C, SDK, Rx, Cocoa и т.д.