1

我在 iOS 中使用以下代码将 mp3 文件转换为字节数组。但是,在进入 while 循环时,它会给出 err = -40 (OSError = -40) 。任何人都可以请帮忙。或者请告诉我如何将 mp3/wav 文件转换为字节数组。参考 -如何将 WAV/CAF 文件的样本数据转换为字节数组?

 NSString *urlHere = [[NSBundle mainBundle] pathForResource:@"r2d2" ofType:@"mp3"];
 CFURLRef url = (CFURLRef)[NSURL fileURLWithPath:urlHere];


AudioFileID audioFile;
OSStatus err = AudioFileOpenURL(url, kAudioFileReadPermission, 0, &audioFile);
// get the number of audio data bytes
UInt64 numBytes = 0;
UInt32 dataSize = sizeof(numBytes);
err = AudioFileGetProperty(audioFile, kAudioFilePropertyAudioDataByteCount, &dataSize, &numBytes);

unsigned char *audioBuffer = (unsigned char *)malloc(numBytes);

UInt32 toRead = numBytes;
UInt64 offset = 0;
unsigned char *pBuffer = audioBuffer;
while(true) {
    err = AudioFileReadBytes(audioFile, true, offset, &toRead, &pBuffer);
    if (kAudioFileEndOfFileError == err) {
        // cool, we're at the end of the file
        break;
    } else if (noErr != err) {
        // uh-oh, some error other than eof
        break;
    }
    // advance the next read offset
    offset += toRead;
    // advance the read buffer's pointer
    pBuffer += toRead;
    toRead = numBytes - offset;
    if (0 == toRead) {
        // got to the end of file but no eof err
        break;
    }
}
4

1 回答 1

1

I had the exact same problem. All you need to do is to remove the & sign next to the pBuffer variable, since it is already a pointer:

err = AudioFileReadBytes(audioFile, true, offset, &toRead, pBuffer);
于 2013-10-25T18:22:23.123 回答