AVAudioSourceNode как установить формат

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

Однако я обнаружил, что AVAudioSourceNode выбирает собственные настройки формата.

engine.connect(srcNode, to: engine.mainMixerNode, format: stimulusFormat)

Я использую приведенную выше строку кода для подключения моего исходного узла к моему основному микшеру с использованием формата "timulusFormat ". Я установил этот формат, используя:

let stimulusFormat = AVAudioFormat(commonFormat: .pcmFormatFloat32,
        sampleRate: Double(sampleRate),
        channels: 1,
        interleaved: format.isInterleaved)

(с чередующимся параметром, запрашивающим, что ожидает увидеть результат). Однако всякий раз, когда я запрашиваю формат моего srcNode (AVAudioSourceNode), консоль возвращает

<AVAudioFormat 0x600002131810:  2 ch,  44100 Hz, Float32, non-inter>

поэтому ясно, что формат потока не установлен в строке кода подключения. Я также попытался изменить предпочтительную частоту дискретизации, однако это по-прежнему не меняет частоту дискретизации AVSourceNode. Все остальное в моем звуковом движке работает на частоте 48000 Гц, поэтому я не уверен, откуда он берет это число.

try AVAudioSession.sharedInstance().setCategory(.playAndRecord)
try AVAudioSession.sharedInstance().setPreferredSampleRate(Double(sampleRate))

Может ли кто-нибудь предложить способ определения формата потока?


person samp17    schedule 07.10.2019    source источник


Ответы (1)


Попробуйте с

engine.connect(srcNode, to: engine.mainMixerNode, format: srcNode.inputFormat(forBus: 0))
person pippoBoy    schedule 26.11.2019
comment
Если sourceNode не имеет указанного формата, и вы пытаетесь подключить его со ссылкой на его собственный формат, то не будет ли он использовать формат вывода движков в качестве формата по умолчанию? Таким образом, в этом случае, если образцы для sourceNode были предварительно сгенерированы, то при неправильном sampleRate эти образцы будут считываться быстрее или медленнее, создавая разные высоты тона. Я не обнаружил новых проблем, связанных с форматами AVFoundation, которые не дают правильных результатов, и сообщил им об этом. - person samp17; 27.11.2019