我正在尝试使用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'它会给我一个浮点数组)以便我可以操纵值(例如,通过一些过滤器)?
非常感谢任何输入!
答案 0 :(得分:4)
我不确定你为什么需要NSData对象。
将AudioFileGetProperty与kAudioFilePropertyDataFormat一起使用,您应该能够确定音频数据的类型(例如浮点数组)等,以及如何解释“theData”。