2010-01-06 6 views
6

Я использую следующие играть файл m4a:Звук на тренажере, но не устройство

NSString *path = [[[NSBundle mainBundle] resourcePath] stringByAppendingPathComponent: fileName]; 
SystemSoundID soundID; 
NSURL *filePath = [NSURL fileURLWithPath:path isDirectory:NO]; 
AudioServicesCreateSystemSoundID((CFURLRef)filePath, &soundID); 
AudioServicesPlaySystemSound(soundID); 

Он отлично работает на тренажере, но я ничего не слышу на устройстве. Звуковые файлы, которые я использую, остаются в комплекте. там

file://localhost/var/mobile/Applications/418945F3-3711-4B4D-BC65-0D78993C77FB/African%20Adventure.app/Switch%201.m4a 

проблема с путем к файлу или любой вещью другой мне нужно сделать для устройства: Вот что Filepath выглядит как из устройства?

+0

Разве ваш объем отклонен? –

+0

Громкость установлена ​​почти макс. – user230949

+4

Убедитесь, что ваш телефон не находится в тихом режиме! Я потратил 2 часа, чтобы узнать это ... – Mathieu

ответ

0

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

+0

filePath не ноль. Он имеет значение, которое я разместил в OP. Я не вижу никаких ошибок. – user230949

+0

Вы проверили результаты OSStatus, и оба они noErr? –

+0

Как проверить результаты OSStatus? – user230949

0

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

+0

Звуки воспроизводятся на iPod от iPhone. – user230949

+0

iTunes перекодирует звук, чтобы он мог воспроизводиться на устройстве, попробуйте сыграть через Safari. –

2

Возможно, вы захотите использовать 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 в свой проект, если вы еще этого не сделали. Также импортируйте файл заголовка.

#import <AVFoundation/AVFoundation.h>

Update:

от компании Apple Core Audio Обзор Document

Audio Session Услуги

Audio Session Services позволяет управлять аудио сессий в вашем приложении, координируя поведение звука в приложении с помощью фонового приложения катионов на iPhone или iPod touch. Службы Audio Session состоят из подмножества функций, типов данных и констант, объявленных в заголовочном файле AudioServices.h в AudioToolbox.framework.

AVAudioPlayer Класс

Класс AVAudioPlayer предоставляет простой интерфейс Objective-C для воспроизведения звуков. Если ваше приложение не требует стереофонического позиционирования или точной синхронизации, и если вы не воспроизводите звук, записанный в сетевом потоке, Apple рекомендует использовать этот класс для воспроизведения. Этот класс объявляется в файле заголовка AVAudioPlayer.h в AVFoundation.framework.

+0

Спасибо. Я попробую. Почему AudioServices не воспроизводят звуки? Или, зачем использовать один над другим? – user230949

+0

Теперь я использую AVAudioPlayer на основе пользовательского события (т. Е. Нажмите кнопку). Я выпускаю, если не ноль, создаю экземпляр и играю. Кажется, что есть небольшая задержка, так как я каждый раз создаю экземпляр. Есть ли более эффективный способ? – user230949

+0

@ user230949: Вы можете создать звуковой объект, подобный [этой оболочке для 'SystemSoundID'] (http://stackoverflow.com/a/9802540/1431728), только вы создаете оболочку для' AVAudioPlayer'. – JohnK

5

У меня также были проблемы с этим. Наконец, я понял, что это потому, что AudioServices может воспроизводить только аудио со следующими ограничениями.

Звуковые файлы, которые вы играете, используя эту функцию должны быть: - Не более 30 секунд длительностью - В линейной PCM или IMA4 (IMA/ADPCM) формат - упакована в .caf, .aif или .wav файл

от компании Apple документы: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/SystemSoundServicesReference/Reference/reference.html

5

Подобно тому, как заметка на полях - у меня была точно такая же проблема, и провел, вероятно, около часа на конвертирование файлов в нужный формат, и т.д .. Однако проблема заключалась в том, что «mut e "на iPad. Так что даже если громкость была поднята, и я слышал другие звуки на iPad, потому что переключатель отключения звука был включен, он не воспроизводил системные звуки.

Чтобы добавить к путанице, это приложение использует текст в речь, а громкость, исходящая от диктовки, была прекрасной, это были только звуки, исходящие от AudioServicesPlaySystemSound(), которые не воспроизводились.

Смежные вопросы