Попытка воспроизвести звук через iPhone Simulator
-
06-07-2019 - |
Вопрос
Я пытаюсь воспроизвести звуковой файл из программы для 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