0
    NSString *docsDir;
    NSArray *dirPaths;
    //
    dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    docsDir = [dirPaths objectAtIndex:0];
    NSString *databasePath = [[NSString alloc] initWithString: [docsDir stringByAppendingPathComponent:@"test.aif"]];
    NSURL *fileURL = [NSURL URLWithString:databasePath];
    //
    AudioStreamBasicDescription asbd;
    memset(&asbd, 0, sizeof(asbd));
    asbd.mSampleRate = 44100;
    asbd.mFormatID = kAudioFormatLinearPCM;
    asbd.mFormatFlags = kAudioFormatFlagIsBigEndian | kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
    asbd.mChannelsPerFrame = 1;
    asbd.mFramesPerPacket = 1;
    asbd.mBitsPerChannel = 16;
    asbd.mBytesPerFrame = 2;
    asbd.mBytesPerPacket = 2;
    //
    AudioFileID audioFile;
    OSStatus audioErr = noErr;
    audioErr = AudioFileCreateWithURL((CFURLRef)fileURL,
                                      kAudioFileAIFFType,
                                      &asbd,
                                      kAudioFileFlags_EraseFile,
                                      &audioFile);
    NSLog(@"%ld",audioErr);

我用iphone模拟器运行代码,日志打印是-50,我查了苹果的文档,但是找不到错误代码-50,我不知道“-50”是什么意思,那是什么问题?我在哪里可以得到错误代码?谢谢。

更新:我将代码“ NSURL *fileURL = [NSURL URLWithString:databasePath];”更改为“ CFURLRef fileURL = ( CFURLRef)[NSURL fileURLWithPath:databasePath];”,是的,它不返回错误代码-50,并返回成功代码0,但几秒钟后,它会返回错误代码1886547263,我发现它的意思是“失败”打开或创建用于写作的音频文件”。

4

2 回答 2

2

您可以使用macerror查找一些错误代码:

$ macerror -50
Mac OS error -50 (paramErr): error in user parameter list
于 2013-06-08T20:37:32.017 回答
0

-50 是kAudio_ParamError

我不相信您可以按照您的方式将 NSURL 类型转换为 CFURL。这是我的做法(使用你的变量):

dirPaths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
docsDir = [dirPaths objectAtIndex:0];
NSString *pathForTheFile= [docsDir stringByAppendingPathComponent:@"test.aif"];
CFURLRef fileURL = (__bridge CFURLRef)[NSURL fileURLWithPath:pathForTheFile];

然后,在您对 AudioFileCreateWithURL 的调用中:

audioErr = AudioFileCreateWithURL(fileURL,
                                  kAudioFileAIFFType,
                                  &asbd,
                                  kAudioFileFlags_EraseFile,
                                  &audioFile);
于 2013-06-08T21:35:06.777 回答