Как использовать Audio File Services для получения необработанных данных аудио файла? - PullRequest
3 голосов
/ 24 февраля 2011

Я пытаюсь использовать Audio File Services из инфраструктуры 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), как мне получить из него пронумерованные значения (например, если я делаю 'wavread' вMatlab даст мне массив с плавающей точкой), чтобы я мог манипулировать значениями (например, проходить через какой-либо фильтр)?

Любые входные данные очень ценятся!

1 Ответ

4 голосов
/ 24 февраля 2011

Я не уверен, зачем вам вообще нужен объект NSData.

Используя AudioFileGetProperty с kAudioFilePropertyDataFormat, вы сможете определить тип аудиоданных (например, массив с плавающей точкой) и т. Д. И, следовательно, как интерпретировать «theData».

...