Звук на симуляторе, но не на устройстве - PullRequest
6 голосов
/ 06 января 2010

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

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

Ответы [ 5 ]

5 голосов
/ 04 декабря 2012

Точно так же, как sidenote - у меня была точно такая же проблема, и я потратил, вероятно, около часа на преобразование файлов в правильный формат и т. Д. И все же проблема заключалась в переключении «без звука» на iPad. Так что, хотя громкость была выше, и я мог слышать другие звуки на iPad, потому что переключатель отключения звука был включен, он не воспроизводил системные звуки.

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

5 голосов
/ 16 ноября 2010

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

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

Из документов Apple: http://developer.apple.com/library/ios/#documentation/AudioToolbox/Reference/SystemSoundServicesReference/Reference/reference.html

2 голосов
/ 06 января 2010

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

Обновление:

Из обзора Apple Core Audio Документ

Аудио-сеансовые услуги

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

Класс AVAudioPlayer

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

0 голосов
/ 06 января 2010

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

0 голосов
/ 06 января 2010

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

...