Я использую следующее для проигрывания m4a файла:
NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: fileName];
SystemSoundID soundID;
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO];
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID);
AudioServicesPlaySystemSound(soundID);
Это хорошо работает на средстве моделирования, но я ничего не слышу на устройстве. Файлы звуков я использую всех, остаются в пакете. Вот то, на что filePath похож от устройства:
file://localhost/var/mobile/Applications/418945F3-3711-4B4D-BC65-0D78993C77FB/African%20Adventure.app/Switch%201.m4a
Существует ли проблема с путем к файлу или какой-либо вещью, отличающейся, я должен сделать для устройства?
Вы можете использовать AVAudioPlayer вместо AudioServices.
Следующий код возьмет аудиофайл (.m4a) и проиграет аудиофайл 1 раз. Не забудьте выпустить "audioPlayer", когда закончите с ним.
NSString *urlAddress = [[NSBundle mainBundle] pathForResource:@"filename" ofType:@"m4a"];
NSURL *url = [NSURL fileURLWithPath:urlAddress];
NSError *error;
AVAudioPlayer *audioPlayer = [[AVAudioPlayer alloc] initWithContentsOfURL:url error:&error];
audioPlayer.numberOfLoops = 0;
if (audioPlayer == nil)
{
NSLog([error description]);
}
else
{
[audioPlayer play];
}
Надеюсь, этот пример поможет вам с воспроизведением аудио на реальном устройстве. Также было бы неплохо увеличить аудио на устройстве во время проигрывания файла.
Примечание: Если вы еще не сделали этого, вам нужно будет добавить фреймворк AVFoundation в ваш проект. Также как и импорт заголовочного файла.
#импорт
Обновление:
Из обзора основных аудио приложений Apple Документ
Служба аудиосеансов
Служба аудиосеансов позволяет вам управлять аудиосеансами в вашем приложении, координируя поведение звука в вашем приложении с фоновыми приложениями на iPhone или iPod touch. Служба Audio Session Services состоит из подмножества функций, типов данных и констант, объявленных в заголовочном файле AudioServices.h в AudioToolbox.framework.
Класс AVAudioPlayer
Класс AVAudioPlayer предоставляет простой интерфейс Objective-C для воспроизведения звуков. Если ваше приложение не требует позиционирования стерео или точной синхронизации, а также если вы не воспроизводите аудио, захваченное из сетевого потока, Apple рекомендует использовать этот класс для воспроизведения. Этот класс объявлен в заголовочном файле AVAudioPlayer.h в AVFoundation.framework.
.Начните с проверки ошибок при возврате. Является ли filePath нулевым? Возвращает ли какая-либо из функций AudioServices ошибку? Наиболее вероятная причина - чувствительность к регистру. Файловая система iPhone чувствительна к регистру, а Mac нет. Но первым шагом в отладке является просмотр ошибок, которые предоставляет система.
.Имитатор использует обычный QuickTime для воспроизведения, так что легко иметь медиа-активы, которые работают в симе, но выходят из строя на устройстве из-за пропущенных/не поддерживаемых кодеков. Тестирование заключается в том, можно ли вообще воспроизвести файл на устройстве, например, через Safari или приложение для iPod.
.