В настоящее время я создаю приложение, которое читает аудио с микрофона моего iPhone, а затем обрабатывает и визуализирует. Конечно, сначала я начинаю с аудиоматериала, но у меня есть одна небольшая проблема.AudioQueue Recording Audio Sample
Я определяю свою частоту дискретизации 44100 Гц и определяю свой буфер для хранения 4096 выборок. Что есть. Однако, когда я печатаю эти данные, скопируйте их в MATLAB, чтобы проверить точность проверки, частота выборки, которую я должен использовать, - это половина моей iPhone определенной скорости или 22050 Гц, чтобы она была правильной.
Я думаю, что он имеет какое-то отношение к следующему коду и как он помещает 2 байта в пакет, а когда я прохожу через буфер, буфер выплескивает весь пакет, который мой код предполагает одиночный номер. Поэтому мне интересно, как разбить эти пакеты и прочитать их как индивидуальные номера.
- (void)setupAudioFormat {
memset(&dataFormat, 0, sizeof(dataFormat));
dataFormat.mSampleRate = kSampleRate;
dataFormat.mFormatID = kAudioFormatLinearPCM;
dataFormat.mFramesPerPacket = 1;
dataFormat.mChannelsPerFrame = 1;
// dataFormat.mBytesPerFrame = 2;
// dataFormat.mBytesPerPacket = 2;
dataFormat.mBitsPerChannel = 16;
dataFormat.mReserved = 0;
dataFormat.mBytesPerPacket = dataFormat.mBytesPerFrame = (dataFormat.mBitsPerChannel/8) * dataFormat.mChannelsPerFrame;
dataFormat.mFormatFlags =
kLinearPCMFormatFlagIsSignedInteger |
kLinearPCMFormatFlagIsPacked;
}
Если то, что я описал, неясно, пожалуйста, дайте мне знать. Благодаря!
EDIT
Добавление кода, который я использовал для вывода на печать данных
float *audioFloat = (float *)malloc(numBytes * sizeof(float));
int *temp = (int*)inBuffer->mAudioData;
int i;
float power = pow(2, 31);
for (i = 0;i<numBytes;i++) {
audioFloat[i] = temp[i]/power;
printf("%f ",audioFloat[i]);
}
Как вы проходите через буфер и печатаете каждый образец? Отправьте этот код, чтобы узнать, есть ли проблема. – hotpaw2
Я предполагаю, что вы получаете поток стерео данных, например. 16 бит от левого канала, затем 16 бит от правого канала. – Davyd
Добавлен код печати. Дайте мне знать, если это очистит что-либо до – MZimmerman6