Настройка песочницы приложения перед сборкой

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

Я работаю над приложением iOS для воспроизведения звука из потока, который я размещаю на своем сервере. Прежде чем заняться получением данных из HTTP-потока, я решил начать с использования Audio Queue Services для воспроизведения файла с моего телефона. Насколько я понимаю, если вы хотите одновременно воспроизводить несколько аудиопотоков, вам нужно использовать Audio Queue, а не AVPlayer или любой другой сервис.

У меня проблема в том, что я не могу настроить свой CFURLRef, потому что не могу найти свой файл.

AudioBufferPlayer *player = (AudioBufferPlayer*) inUserData;

if (player.playing) {

    NSString *path = @"/Users/acopp/Library/Application Support/iPhone Simulator/5.1/Applications/F9CA1197-A661-4B2F-9B42-68A991F61B19/";
    const char *filePath = [path cStringUsingEncoding:[NSString defaultCStringEncoding]];
    CFURLRef audioFileURL = CFURLCreateFromFileSystemRepresentation(NULL, (const UInt8*)filePath, strlen(filePath), false);

    OSStatus result = AudioFileOpenURL(audioFileURL, kAudioFileReadPermission, kAudioFileCAFType, player.mAudioFile); 

    UInt32 numBytesReadFromFile;
    UInt32 numPackets = player.mNumPacketsToRead;

    AudioFileReadPackets(
                         *(player.mAudioFile),
                         false,
                         &numBytesReadFromFile,
                         NULL,
                         player.mCurrentPacket,
                         &numPackets,
                         inBuffer->mAudioData
                         );

    if (numPackets > 0) {
        inBuffer->mAudioDataByteSize = numBytesReadFromFile;
        AudioQueueEnqueueBuffer(inAudioQueue, inBuffer, 0, NULL);
        player.mCurrentPacket += numPackets;
    }

Я получаю сообщение об ошибке EXC_BAD_ACCESS в моих AudioFileReadPackets, и мой результат OSStatus в этот момент установлен на -50, поэтому я думаю, что мой вызов AudioFileOpenURL не работает.

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

@"/Users/acopp/Library/Application Support/iPhone Simulator/5.1/Applications/F9CA1197-A661-4B2F-9B42-68A991F61B19/"

Мои четыре варианта: Demo3, Documents, Library и temp. Ни в одном из них нет моего файла quick.caf, который я добавил в свой проект.

TL, DR. Если я что-то не упустил, я думаю, что спрашиваю, как добавить аудиофайлы в песочницу перед сборкой, чтобы я мог протестировать свой код на симуляторе iPhone.


person andrewcopp    schedule 16.07.2012    source источник


Ответы (2)


Файлы, которые вы добавляете в свой проект, попадают в каталог Bundle вашего приложения, а не в Documents или Library/Caches. Для симулятора этот пакет приложений обычно находится в каталоге Xcode Build или DerivedData, а не в области поддержки приложений симулятора.

Один из простых способов получить правильный путь — создать во время первого запуска приложения небольшой фиктивный файл в папке «Песочницы» приложения «Документы» или «Библиотека/Кэши» с уникальным именем. Выйдите из приложения, удалите этот код создания файла, а затем используйте Spotlight на Mac, чтобы найти фиктивный файл. Замените на что хотите. Затем запустите приложение, считывая код из того же пути, который используется для создания фиктивного файла.

person hotpaw2    schedule 17.07.2012

Ты можешь использовать :

    NSString *bundlePath = [[NSBundle mainBundle] bundlePath];

чтобы получить доступ к вашим файлам, включенным в ваш проект.

person soh-la    schedule 18.07.2012