Потоковое с AVAudioplayer - PullRequest
       53

Потоковое с AVAudioplayer

7 голосов
/ 15 марта 2011

Для загрузки звукового файла в моем приложении есть следующий код:

- (id) init:(NSString*)a_filename ext:(NSString*)a_ext 
{
    ...

    NSString *t_soundFilePath = [CFileLoader getPathForResource:filename WithExtension:ext];
    NSURL *t_fileURL = [[[NSURL alloc] initFileURLWithPath: t_soundFilePath] autorelease];

    player = [[AVAudioPlayer alloc] initWithContentsOfURL: t_fileURL error: nil];
    [player prepareToPlay];
    ...

    }

Все звуки, которые я загружаю, находятся в моем комплекте, поэтому я хотел бы знать, транслирует ли метод "initwithcontentsofurl" звуковой файл или все файлы кэшируются.

В моем приложении много спрайтов, поэтому я хочу минимизировать пространство памяти, используемое для звуков.

спасибо за помощь

Ответы [ 4 ]

7 голосов
/ 24 июля 2012

Я использовал AVPlayer (не AVAudioPlayer) для потоковой передачи фонового звука.

6 голосов
/ 15 марта 2011

Звуки, которые воспроизводятся с помощью AVAudioPlayer, передаются в реальном времени из хранилища. Недостаток в том, что вы можете иногда заметить небольшое отставание, когда оно должно начаться. Если вы используете OpenAL, звуки загружаются полностью в память.

В документации ObjectAL есть хорошее обсуждение такого рода вещей - библиотека, предназначенная для упрощения воспроизведения звуков и эффектов на iPhone.

6 голосов
/ 15 марта 2011

Если вы хотите передавать потоковое аудио в своем приложении, вы можете использовать следующий плеер вместо AVAudioPlayer

https://github.com/mattgallagher/AudioStreamer

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

Надеюсь, это поможет вам.

4 голосов
/ 29 октября 2013

"Класс AVAudioPlayer не обеспечивает поддержку потокового аудио на основе HTTP-URL. URL, используемый с initWithContentsOfURL: должен быть URL файла (файл: //). То есть локальный путь ".

https://developer.apple.com/library/ios/qa/qa1634/_index.html

Но вы можете обойти эту проблему - например, асинхронно записывать в локальный файл и запускать AVAudioPlayer с этим URL-адресом файла, это будет работать.

...