AudioFileOpenURL вызывает ошибку -43 не может открыть файл на симуляторе, но не на устройстве - PullRequest
0 голосов
/ 13 апреля 2011

Я использую AudioFileOpenURL для доступа к аудиофайлу.Он отлично работает на моем устройстве, но не в симуляторе.Вот где выдается ошибка:

        XThrowIfError(AudioFileOpenURL (sndFile, kAudioFileReadPermission, 0/*inFileTypeHint*/, &mAudioFile), "can't open file");

Любые возможные идеи, почему это может быть?


РЕДАКТИРОВАТЬ 1

Здесьмои распечатки sndFile на симуляторе, а затем на устройстве:

 SIMULATOR
 2011-04-13 12:20:10.259 iMC[51887:207] CreateQueueForFile       /var/folders/u6/u6pKbm2MFriwajkdt-OQME+++TI/-Tmp-/LoopExtended.wav
 2011-04-13 12:20:10.322 iMC[51887:207] sndFile  file://localhost/var/folders/u6/u6pKbm2MFriwajkdt-OQME+++TI/-Tmp-/LoopExtended.wav
 Error: can't open file (-43)
2011-04-13 12:20:10.323 iMC[51887:207] URL:                      /var/folders/u6/u6pKbm2MFriwajkdt-OQME+++TI/-Tmp-/LoopExtended.wav 




DEVICE 
2011-04-13 12:21:07.829 iMC[3061:307] CreateQueueForFile        /private/var/mobile/Applications/16194CBB-F0B3-4D39-9655-8FD67C247D74/tmp/LoopExtended.wav
2011-04-13 12:21:07.846 iMC[3061:307] sndFile   file://localhost/private/var/mobile/Applications/16194CBB-F0B3-4D39-9655-8FD67C247D74/tmp/LoopExtended.wav
2011-04-13 12:21:07.859 iMC[3061:307] URL:                      /private/var/mobile/Applications/16194CBB-F0B3-4D39-9655-8FD67C247D74/tmp/LoopExtended.wav 

РЕДАКТИРОВАТЬ 2

void AQPlayer::CreateQueueForFile(CFStringRef inFilePath) 
{   

// printf("CreateQueueForFile called \n ");

NSString *local_recordFilePath_NSString = (NSString *)inFilePath;
NSLog(@"CreateQueueForFile %@", local_recordFilePath_NSString );



CFURLRef sndFile = NULL; 

try {                   
    if (mFilePath == NULL)
    {
        mIsLooping = false;

        sndFile = CFURLCreateWithFileSystemPath(kCFAllocatorDefault, inFilePath, kCFURLPOSIXPathStyle, false);
        if (!sndFile) { printf("can't parse file path\n"); return; }

        NSLog(@"sndFile   %@", sndFile);


        XThrowIfError(AudioFileOpenURL (sndFile, kAudioFileReadPermission, 0/*inFileTypeHint*/, &mAudioFile), "can't open file");



        UInt32 size = sizeof(mDataFormat);

        // printf("SIZE    %i\n ", size);
        XThrowIfError(AudioFileGetProperty(mAudioFile, 
                                       kAudioFilePropertyDataFormat, &size, &mDataFormat), "couldn't get file's data format");
        mFilePath = CFStringCreateCopy(kCFAllocatorDefault, inFilePath);
    }
    SetupNewQueue();        
}
catch (CAXException e) {
    char buf[256];
    fprintf(stderr, "Error: %s (%s)\n", e.mOperation, e.FormatError(buf));
}
if (sndFile)
    CFRelease(sndFile);
 }

РЕДАКТИРОВАТЬ3

CFStringRef local_recordFilePath;   

local_recordFilePath = (CFStringRef)[NSTemporaryDirectory() stringByAppendingPathComponent: @"LoopExtended.wav"];



player->CreateQueueForFile(local_recordFilePath);

1 Ответ

1 голос
/ 13 апреля 2011

Используйте это вместо.( ОБНОВЛЕНО )

 CFStringRef local_recordFilePath;   

    local_recordFilePath = (CFStringRef)[[[NSBundle mainBundle]resourcePath] stringByAppendingPathComponent: @"LoopExtended.wav"];



    player->CreateQueueForFile(local_recordFilePath);

Проблема заключалась в том, что NSTevenDirectory () возвращает путь к операционной системе, который можно использовать для приложения MacOS, а не для iOS.

Спасибо,

...