Вопрос

Я пытаюсь воспроизвести звуковой файл из программы для 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 / Library / Application & # 25970; & # 26996; & # 25974; & # 29779; & # 26994; & # 26478; &pport / iPhone & # 33952; & # 41083; & # 1932; & # 256; & # 12165; & # 29525; & # 29285; & # 12147; & # 27745; & # 28257; & # 19503; & # 25193; & # 24946; & # 31090; & # 16687; & # 28784; & # 26988; & # 24931; & # 26996; & # 28271; & # 21280; & # 28789; & # 28528; & # 29810; & # 26927; & # 26704; & # 28271; & # 8293; & # 26963; & # 30061; & # 24940; & # 28532; & # 12146; & # 29525; & # 29285; & # 16687; & # 28784; & # 26988; & # 24931; & # 26996; & # 28271; & # 12147; & # 17986; & # 13637; & # 14402; & # 14641; & # 17197; & # 17459; & # 11576; & # 17460; & # 17987; & # 14381; & # 13123; & # 11575; & # 17217; & # 12854; & # 14389; & # 17985; & # 14644; & # 12848; & # 19503; & # 25455; & # 29793; & # 19813; & # 11877; & # 28769; & # 12144; & # 27760; & # 31073; & # 25390; & # 26209; imulator / пользователь / Применения / BFE5B819-C3D8-4DCF-8C37-AC6258AF4902 / LocateMe.app / play.caf

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

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

Это было полезно?

Решение 3

Обновленная информация об этом.

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

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

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

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

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

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

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

Другие советы

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

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

NSLog(@"%@", URL);

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

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

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

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

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

Лицензировано под: CC-BY-SA с атрибуция
Не связан с StackOverflow
scroll top