如何使用音频文件服务获取音频文件的原始数据?

时间:2011-02-24 06:24:05

标签: iphone core-audio

我正在尝试使用AudioToolBox框架中的音频文件服务从wav文件中获取原始数据。具体来说,我正在使用AudioFileReadBytes()调用来获取字节。这是我的相关代码:

NSString *audioFilePath = [[NSString stringWithCString:argv[1]
                                              encoding:NSUTF8StringEncoding]
                           stringByExpandingTildeInPath];          
NSURL *audioURL = [NSURL fileURLWithPath:audioFilePath];               

AudioFileID audioFile;                                               
OSStatus theErr = noErr;
UInt64 fileDataSize = 0;
AudioStreamBasicDescription theFileFormat;
UInt32 thePropertySize = sizeof(theFileFormat);
theErr = AudioFileOpenURL((CFURLRef)audioURL, kAudioFileReadPermission, 0, &audioFile); 

thePropertySize = sizeof(fileDataSize);
theErr = AudioFileGetProperty(audioFile, kAudioFilePropertyAudioDataByteCount, &thePropertySize, &fileDataSize);

//Read data into buffer
UInt32 dataSize = fileDataSize;
void* theData = malloc(dataSize);
if (theData) {
    AudioFileReadBytes(audioFile, false, 0, &dataSize, theData);
            // create an NSData object to hold the buffer data
    NSData* nsdata = [NSData dataWithBytesNoCopy:theData length:dataSize]; //?
}

现在问题是:在我创建NSData对象(nsdata)之后,如何从中获取编号值(就像我在Matlab中'wavread'它会给我一个浮点数组)以便我可以操纵值(例如,通过一些过滤器)?

非常感谢任何输入!

1 个答案:

答案 0 :(得分:4)

我不确定你为什么需要NSData对象。

将AudioFileGetProperty与kAudioFilePropertyDataFormat一起使用,您应该能够确定音频数据的类型(例如浮点数组)等,以及如何解释“theData”。