Я пытаюсь микшировать звук из нескольких аудиоисточников с помощью Audio Units. Структура довольно проста: у меня есть два входа, аудиоблок микшера и общий выход. Проблема в том, что буферы выходного AudioUnit заполняются только нулями.
- Входные данные передаются через AURenderCallbackStruct непосредственно в микшер.
- Подтип микшера — kAudioUnitSubType_MultiChannelMixer.
- Подтип вывода — kAudioUnitSubType_GenericOutput для извлечения микшированного звука вручную, не воспроизводя его. . Выход подключается через AudioUnitConnection, чтобы избежать использования устаревшего AUGraph. AVAudioSession нельзя использовать для совместимости с ReplayKit.
Код: Выделить всё
private func setupAudioUnits() {
// Setting up mixer unit
var mixerComponentDescription = AudioComponentDescription(
componentType: kAudioUnitType_Mixer,
componentSubType: kAudioUnitSubType_MultiChannelMixer,
componentManufacturer: kAudioUnitManufacturer_Apple,
componentFlags: 0,
componentFlagsMask: 0)
let mixerComponent = AudioComponentFindNext(nil, &mixerComponentDescription)
AudioComponentInstanceNew(mixerComponent!, &mixerAudioUnit)
guard let mixerAudioUnit else { fatalError() }
var streamFormat = outputFormat.streamDescription.pointee
AudioUnitSetProperty(mixerAudioUnit,
kAudioUnitProperty_StreamFormat,
kAudioUnitScope_Output,
0,
&streamFormat,
UInt32(MemoryLayout.size))
AudioUnitInitialize(mixerAudioUnit)
var busCount = UInt32(inputs)
AudioUnitSetProperty(mixerAudioUnit,
kAudioUnitProperty_ElementCount,
kAudioUnitScope_Input,
0,
&busCount,
UInt32(MemoryLayout.size))
// Setting up mixer's inputs
for input in 0..
Источник: [url]https://stackoverflow.com/questions/78085762/audiounitrender-produces-empty-audio-buffers[/url]