Звук на средстве моделирования, но не устройстве

Я использую следующее для проигрывания 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

Существует ли проблема с путем к файлу или какой-либо вещью, отличающейся, я должен сделать для устройства?

6
задан user230949 6 January 2010 в 16:49
поделиться

3 ответа

Вы можете использовать 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.

.
2
ответ дан 9 December 2019 в 20:44
поделиться

Начните с проверки ошибок при возврате. Является ли filePath нулевым? Возвращает ли какая-либо из функций AudioServices ошибку? Наиболее вероятная причина - чувствительность к регистру. Файловая система iPhone чувствительна к регистру, а Mac нет. Но первым шагом в отладке является просмотр ошибок, которые предоставляет система.

.
0
ответ дан 9 December 2019 в 20:44
поделиться

Имитатор использует обычный QuickTime для воспроизведения, так что легко иметь медиа-активы, которые работают в симе, но выходят из строя на устройстве из-за пропущенных/не поддерживаемых кодеков. Тестирование заключается в том, можно ли вообще воспроизвести файл на устройстве, например, через Safari или приложение для iPod.

.
0
ответ дан 9 December 2019 в 20:44
поделиться
Другие вопросы по тегам:

Похожие вопросы: