Попытка воспроизвести звук через iPhone Simulator - PullRequest
2 голосов
/ 03 ноября 2008

Я пытаюсь воспроизвести звуковой файл из программы для iPhone.

Вот код:

NSString *path = [[NSBundle mainBundle] pathForResource:@"play" ofType:@"caf"];
NSFileHandle *bodyf = [NSFileHandle fileHandleForReadingAtPath:path];
NSData *body = [bodyf availableData];
NSLog( @"length of play.caf %d",[body length] );
NSURL *url = [NSURL fileURLWithPath:path isDirectory:NO];
NSLog( [url description] );
NSLog( @"%d", AudioServicesCreateSystemSoundID((CFURLRef)url, &soundID) );

Первый NSLog должен проверить, что у меня есть доступ к файлу (я сделал), второй NSLog должен показать URL файла, а третий NSLog возвращает -1500 «Произошла неуказанная ошибка.»

Для второго NSLog я получаю следующий вывод:

file: // localhost / Users / alan / Библиотека / Приложение 杮 慬 楴 敶 瑓 杮 / / / / iPhone iPhone iPhone iPhone iPhone iPhone iPhone iPhone iPhone iPhone iPhone 匠 匠 匠 匠 匠 匠 瑲 瑲 瑲 湯 湯 湯⁥ 楓 畭 慬 潴 ⽲ 獕 牥 䄯 灰 楬 慣 楴 湯 ⽳ 䙂 㕅 㡂 㤱 䌭 䐳 ⴸ 䐴 䙃 㠭 ㍃ⴷ 䍁 ㈶ 㠵 䙁 㤴 ㈰ 䰯 捯 瑡 䵥 ⹥ 灡 ⽰ 汰 祡 挮 晡 imulator / Пользовательский / Применения / BFE5B819 -C3D8-4DCF-8C37-AC6258AF4902 / LocateMe.app / play.caf

Это либо из-за моего неправильного понимания метода «описания», либо это усугубляет проблему.

Есть идеи, что не так?

Ответы [ 5 ]

3 голосов
/ 01 мая 2009

Кроме того, похоже, что симулятор iPhone не любит воспроизводить (systemSound) звуки длительностью более 5 секунд. У меня возникла та же проблема, что и в приложениях, которые почти всегда воспроизводили загрузку systemSound.

Одно из приложений, над которыми я работал на симуляторе, не воспроизводило звук, но устройство работало. Позже я обнаружил, что на симуляторе и способе обработки звуков есть какое-то странное ограничение. Я подал ошибку в Apple. Надеемся, что это будет решено с выпуском iPhone SDK 3.0.

3 голосов
/ 03 ноября 2008

Первый параметр NSLog - это строка формата; вы передаете [URL description] в качестве строки формата для второго использования NSLog. Это плохо, потому что, если описание URL содержит какие-либо символы %, тогда он будет печатать случайные вещи из стека.

Вместо этого напишите

NSLog(@"%@", URL);

Вам даже не нужно использовать -description здесь; NSLog вызовет его для вас автоматически, потому что %@ означает «объект», а не «NSString», и он достаточно умен, чтобы сделать правильную вещь для вас.

1 голос
/ 21 января 2009

Обновление по этому вопросу.

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

Я обнаружил, что мой файл .caf успешно воспроизводился при запуске приложения на устройстве.

Затем я попробовал разные варианты.

WAV-файл длительностью 60 секунд не работал на симуляторе и устройстве.

.wav-файл длиной 5 секунд будет работать на симуляторе, но не на устройстве.

Файл .aiff длиной 5 секунд работает на симуляторе и устройстве.

Было бы хорошо знать окончательно, что симулятор и устройство проверяют файл, когда он передается AudioServicesCreateSystemSoundID

0 голосов
/ 30 октября 2009

Используйте класс "AVAudioPlayer" для воспроизведения файлов .caf

0 голосов
/ 03 ноября 2008

Я попробовал то же самое с моим приложением, которое воспроизводит звуки просто отлично. Звуки не воспроизводятся в симуляторе, и когда я пытаюсь набрать NSLog URL, я получаю тот же мусор, что и вы, и EXC_BAD_ACCESS в верхней части. Когда я регистрирую URL на устройстве, URL в порядке, но я все равно получаю EXC_BAD_ACCESS. Когда я сбрасываю логи, воспроизводятся звуки и все работает. Если бы кто-то мог объяснить это поведение, я был бы благодарен. Что касается Вашей проблемы, я бы сбросил регистрацию и попробовал код на устройстве.

...