3
我正在嘗試使用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「獲得編號值會給我一個浮點數組),以便我可以操縱這些值(例如通過一些過濾器)?
任何輸入,非常感謝!
嗨JonoB,謝謝你的回覆。沒有必要使用NSData。我只需要獲取浮點數組。你能告訴我一些使用kAudioFilePropertyDataFormat的例子嗎?一些代碼行將非常有幫助。 – saurb 2011-02-24 16:55:17
例如(沒有實際編譯/測試以下,但它應該給你的想法): 'AudioStreamBasicDescription theFileFormat; AudioFileGetProperty(audioFile,kAudioFilePropertyClientDataFormat,&thePropertySize,&audioFile); // AudioFileReadBytes,因爲您現在已經在做 ...; if(theFileFormat.mFormatFlags&kAudioFormatFlagIsFloat) { // Data is in float format。 float * dataAsFloat =(float *)theData; //您現在可以以浮點形式訪問您的數據,例如dataAsFloat [0]。 }' – 2011-02-25 04:12:40