Как загрузить данные PCM в AudioKit?

Я новичок в AudioKit. Я прошел через примеры, которые очень поучительны и просты. Что я хочу сделать, так это подключить существующее приложение iOS, в котором у меня есть данные PCM, и передать их в AudioKit, чтобы я мог добавлять эффекты. Я думал, что смогу использовать для этого AKNode, но я не вижу, как загрузить простой массив.

Я также взглянул на AKMicrophone и AKstereoInput, думая, что смогу перезаписать их, но они, похоже, используют AVAudioNode.

Я думаю, что мне не хватает чего-то простого здесь? Как загрузить данные PCM в AudioKit? Спасибо!


person Omar Abdelwahed    schedule 18.08.2018    source источник


Ответы (1)


Дело в том, что узел должен иметь возможность предоставлять постоянный поток данных по мере того, как его запрашивают нижестоящие узлы. Итак, вам нужно создать узел-генератор. Вместо того, чтобы смотреть на микрофон, который захватывает эти данные с оборудования. Я бы начал с просмотра AKOscillatorDSP.mm и изменил его:

void YourDSP::process(AUAudioFrameCount frameCount, AUAudioFrameCount bufferOffset) {

    for (int frameIndex = 0; frameIndex < frameCount; ++frameIndex) {
        int frameOffset = int(frameIndex + bufferOffset);

        float temp = 0;
        for (int channel = 0; channel < _nChannels; ++channel) {
            float *out = (float *)_outBufferListPtr->mBuffers[channel].mData + frameOffset;

            *out = ... whatever your magic is ...
        }
    }
}
person Aurelius Prochazka    schedule 19.08.2018
comment
Это очень полезно, @Aurelius! Благодарю вас! Изменение этого кода похоже, что это сработает. Но я также понимаю, что, вероятно, более правильной интеграцией было бы использование AudioUnits и создание совершенно нового узла. Мое приложение уже использует AudioUnits. Я новичок здесь, но я думаю, что мог бы следовать за AKOscillator и AKOscillatorAudioUnit, чтобы создавать новые классы? Тогда мои списки аудиобуферов будут проходить нормально? - person Omar Abdelwahed; 20.08.2018
comment
Итак... Я слишком много думаю об этом. Поскольку мое приложение использует AudioUnit для вывода, это тривиально и просто работает. Я сделал быстрый тестовый проект, и все в порядке. (Я не совсем понимаю все это, но я доберусь туда.) - person Omar Abdelwahed; 20.08.2018
comment
Аурелиус, я реализовал то, что вы предложили, за исключением того, что я начал с создания новых подклассов AKDSPBase. Это работает хорошо! После очистки и дальнейшего тестирования в своем приложении я проверю, может ли оно стать хорошим дополнением к AudioKit. Спасибо еще раз за помощь! - person Omar Abdelwahed; 26.08.2018
comment
Определенно хотел бы получить это как вклад в AudioKit, сделайте запрос на включение! - person Aurelius Prochazka; 28.08.2018