无法使用AudioFileCreateWithURL()创建音频文件

时间:2013-06-24 17:06:26

标签: c++ core-audio

我正在尝试在磁盘上创建一个新文件,并使用OSX上的Core Audio框架对其进行记录。我现在的主要障碍是我似乎无法使用以下代码创建文件。我的目标是找出为什么下面的代码不起作用,以便我可以继续处理我的项目的其余部分。您可以在下面看到此代码的输出。

string fp = "…path…to…file.../file.wav"  
CFURLRef audioFileURL = CFURLCreateFromFileSystemRepresentation(
        NULL,
        (const UInt8 *)fp.c_str(),  // filename
        fp.length(),             // number of bytes in filename
        false               // this is a file, not a directory
);

if(audioFileURL == NULL){
    cout << endl << "audioFileURL == NULL :(";
}

OSStatus retErr = AudioFileCreateWithURL (                                
                        audioFileURL,                                        
                        df.mFormatID,                          
                        &aqData.mDataFormat,                                 
                        kAudioFileFlags_EraseFile,                           
                        &aqData.mAudioFile                                   
                        );
cout << endl << "\nAudioFileCreateWithURL error:" << retErr;

输出以下内容:

AudioFileCreateWithURL error:1954115647

我没有运气找出这个错误意味着什么。这里的任何帮助都是适用的。

1 个答案:

答案 0 :(得分:0)

Core Audio错误以数字或4字母代码的形式返回。我猜你显示的奇怪数字是代码的内存位置。

你需要这样的东西来确定和转换:

    static char *FormatError(char *str, OSStatus error)
    {
        // see if it appears to be a 4-char-code
        *(UInt32 *)(str + 1) = CFSwapInt32HostToBig(error);
        if (isprint(str[1]) && isprint(str[2]) && isprint(str[3]) && isprint(str[4])) {
            str[0] = str[5] = '\'';
            str[6] = '\0';
        } else
        // no, format it as an integer
        sprintf(str, "%d", (int)error);
        return str;
    }