Преобразование ввода AVAudioRecorder в буфер с плавающей точкой - PullRequest
6 голосов
/ 04 ноября 2011

Заранее извиняюсь за нюби этого вопроса, это мое первое исследование звуковой стороны программирования на iOS.

Я использую класс AVAudioRecorder для записи ввода через микрофон, используя следующий словарь настроек.

NSMutableDictionary *settings = [[NSMutableDictionary alloc] init];
[settings setValue:[NSNumber numberWithInt:kAudioFormatLinearPCM] forKey:AVFormatIDKey];
[settings setValue:[NSNumber numberWithFloat:11025.0] forKey:AVSampleRateKey];
[settings setValue:[NSNumber numberWithInt: 1] forKey:AVNumberOfChannelsKey];
[settings setValue:[NSNumber numberWithInt:16] forKey:AVLinearPCMBitDepthKey];
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsBigEndianKey];
[settings setValue:[NSNumber numberWithBool:NO] forKey:AVLinearPCMIsFloatKey];

Это работает абсолютно нормально, проблема возникает, однако, когда я пытаюсь использовать библиотеку echonest-codegen, чтобы сгенерировать отпечаток пальца, чтобы идентифицировать музыку, которая воспроизводится.

Не волнуйтесь, если вы никогда не использовали его раньше, в основном я должен запустить эту функцию:

Codegen * pCodegen = new Codegen(const float* pcm[], int number_of_samples, int samples_offset);

Где const float * pcm [] - буфер сэмплов. Мне нужно преобразовать мои данные в «буфер поплавков». Я был нацелен на документы ExtAudioFile, но они не имеют большого смысла. Кто-нибудь может указать мне правильное направление? Я совершенно потерян!

Большое спасибо!

1 Ответ

1 голос
/ 13 августа 2013

Вы можете легко получить аудиосэмпл с помощью Audio Queue Services Самая большая проблема, которую я здесь вижу, заключается в том, что аудиобуферы имеют (я полагаю) типа char * (byte), я не знаю, зачем вам это нужнопоплавок *

...