Настроить список буферов для хранения не чередующихся аудиоданных?
Я получил обратный вызов, из которого я пытаюсь захватить звук с удаленного устройства ввода-вывода в звуковую диаграмму. Внутри моего обратного вызова у меня есть AudioBufferList
в AudioUnitRender
функция, которая мне нужна для хранения данных без чередования из двух каналов.
Вот фрагмент кода для контекста:
//audiounit render function inside of a callback
OSStatus status;
status = AudioUnitRender(THIS.ioUnit,
ioActionFlags,
inTimeStamp,
0,
inNumberFrames,
&bufferList);
//want to initialize and configure bufferList to store non-interleaved data from both channels
...
//write audio data to disk
OSStatus result;
if (*ioActionFlags == kAudioUnitRenderAction_PostRender) {
result = ExtAudioFileWriteAsync(THIS.extAudioFileRef, inNumberFrames, &bufferList);
if(result) printf("ExtAudioFileWriteAsync %ld \n", result);}
return noErr;
Кто-нибудь знает как это сделать?
Благодарю.
2 ответа
Вы должны сделать float**
массив и инициализировать его лениво в вашем обратном вызове рендеринга, чтобы иметь тот же размер буфера, как вы передали (перераспределяя его по мере необходимости). Оттуда вы можете просто скопировать в нужный канал и использовать эти данные в другом канале (я предполагаю, что вы производите какой-то эффект, который должен взаимодействовать между каналами).
К сожалению, это обязательно будет глобальной переменной, но из-за ограничений AudioUnits в iOS вам, вероятно, придется с этим смириться.
Ваш список буферов должен быть инициализирован с
myBufferList.mNumberBuffers = 2;
Для рабочего примера, проверьте пример MixerHost от Apple.