2011-02-24 87 views
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「獲得編號值會給我一個浮點數組),以便我可以操縱這些值(例如通過一些過濾器)?

任何輸入,非常感謝!

回答

4

我不知道爲什麼你需要NSData對象。

使用AudioFileGetProperty和kAudioFilePropertyDataFormat,您應該能夠確定音頻數據的類型(例如浮點數組)等,因此應該如何解釋「theData」。

+0

嗨JonoB,謝謝你的回覆。沒有必要使用NSData。我只需要獲取浮點數組。你能告訴我一些使用kAudioFilePropertyDataFormat的例子嗎?一些代碼行將非常有幫助。 – saurb 2011-02-24 16:55:17

+0

例如(沒有實際編譯/測試以下,但它應該給你的想法): '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

相關問題