Через некоторое время, развиваясь с аудиоустройством, я знаю, что есть некоторая ошибка, которая хорошо известна разработчикам, которые работают со звуковыми буферами на низком уровне.Размер звукового буфера неверен на mac
Ошибка в том, что размер буфера на маке неверен и отображает 512 вместо 1024, где одно и то же программное обеспечение на iDevice показывает 1024.
Вопрос в том, есть ли способ решить это, поэтому я могу получить на Mac также 1024 бит буфера? его немного сложно работать, потому что имитация отличается от устройства.
Это функция обратного вызова, где я проверить буфер с микрофонным входа:
static OSStatus recordingCallback(void *inRefCon,
AudioUnitRenderActionFlags *ioActionFlags,
const AudioTimeStamp *inTimeStamp,
UInt32 inBusNumber,
UInt32 inNumberFrames,
AudioBufferList *ioData)
{
AudioBuffer buffer;
buffer.mNumberChannels = 1;
buffer.mDataByteSize = inNumberFrames * 2;
buffer.mData = NULL;
AudioBufferList bufferList;
bufferList.mNumberBuffers = 1;
bufferList.mBuffers[0] = buffer;
OSStatus status;
status = AudioUnitRender(audioUnit,
ioActionFlags,
inTimeStamp,
inBusNumber,
inNumberFrames,
&bufferList);
int16_t *q = (int16_t *)(&bufferList)->mBuffers[0].mData;
// inNumberFrames, is 512 on a mac ,and 1024 on a device
(выход обратного вызова динамика таким же, кстати = 512 бит).
Часть установки аудиоблоку:
AudioStreamBasicDescription audioFormat;
audioFormat.mSampleRate = 44100.00;//44100.00;
audioFormat.mFormatID = kAudioFormatLinearPCM;
audioFormat.mFormatFlags = kAudioFormatFlagIsSignedInteger | kAudioFormatFlagIsPacked;
audioFormat.mFramesPerPacket = 1;
audioFormat.mChannelsPerFrame = 1;
audioFormat.mBitsPerChannel = 16;
audioFormat.mBytesPerPacket = 2;
audioFormat.mBytesPerFrame = 2;
Ну я нашел здесь, что кто-то сказать, вы должны установить на макинтош (сетчатка шахтные) частоту дискретизации в миди инструмента, я проверить но его 44100 там. chanels 24 бит, я пытался с 16 битами, но никакого хорошего результата. все еще размер буфера 512 бит на моем mac. У меня есть дисплей Retina макинтош 2012.
Я делаю тяжелый DSP на буфере, так, например, если я делаю преобразование БПФ по сигналу, разрешение отличается от 512 до 1024 выборок. и в отношении вашего ответа есть способ ограничить размер буфера во времени. но все же его патч, потому что тот же код должен запускаться на устройстве и Mac, и поскольку everyting происходит в реальном времени, я не могу манипулировать кодом, чтобы делать неприятные вещи. нет никакой причины, что размер буфера должен отличаться для mac и iDevice. там должен быть способ изменить это. – Curnelious
См. Я бы сделал что-то вроде проверки inFramesToProcess, если он меньше 1024, а затем сохранит его в буфере ivar. Когда буфер ivar заполнен 1024 образцами, сделайте БПФ. Вот простой пример такого буфера: http://www.kvraudio.com/forum/viewtopic.php?t=144034 –
На самом деле я пробовал это, я аккумулирую буфер, я его сохраняю, но как-то fft получает много нулей. Я думаю, что Mac работает с разрешением других образцов и другими амплитудами. – Curnelious