Как AKNodeOutputPlot от AudioKit извлекает данные?

Я очень плохо знаком с платформой AudioKit, и я пытался понять немного больше о стороне DSP к нему. Пока копаясь в исходном коде, я понял, что AKNodeOutputPlot не извлекает данные из узла так, как это делают другие.

В коде DSP для AKAmplitudeTracker вычисляется среднеквадратичное значение для каждого канала, и результат кратко записывается в выходной буфер, но в конце цикла for узел, по существу, обходит, устанавливая вывод на исходный вход:

void process(AUAudioFrameCount frameCount, AUAudioFrameCount bufferOffset) override {

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

int frameOffset = int(frameIndex + bufferOffset);

for (int channel = 0; channel < channels; ++channel) {
float *in  = (float *)inBufferListPtr->mBuffers[channel].mData  + frameOffset;
float temp = *in;
float *out = (float *)outBufferListPtr->mBuffers[channel].mData + frameOffset;
if (channel == 0) {
if (started) {
sp_rms_compute(sp, leftRMS, in, out);
leftAmplitude = *out;
} else {
leftAmplitude = 0;
}
} else {
if (started) {
sp_rms_compute(sp, rightRMS, in, out);
rightAmplitude = *out;
} else {
rightAmplitude = 0;
}
}
*out = temp;
}
}
}

Это имеет смысл, поскольку вывод среднеквадратичного значения на динамики устройства будет звучать ужасно, но когда этот узел используется в качестве входных данных для объекта AKNodeOutputPlot, отображаются среднеквадратичные значения.

входной и среднеквадратичный график

Я предположил, что на переменные leftAmplitude и rightAmplitude ссылались где-то, но даже если они обнуляются, график работает просто отлично. Я заинтересован в том, чтобы поработать над сигналом, не влияя на вывод, поэтому мне бы очень хотелось, чтобы кто-нибудь помог мне понять, как АКПлот собирает эти данные.

ура

3

Решение

AKNodeOutputPlot работает с тем, что называется «тапом»:

https://github.com/AudioKit/AudioKit/blob/master/AudioKit/Common/User%20Interface/AKNodeOutputPlot.swift

Есть также несколько других нажатий, которые не обязательно предназначены только для пользовательского интерфейса:

https://github.com/AudioKit/AudioKit/tree/master/AudioKit/Common/Taps

Отводы позволяют проверять данные, проходящие через другой узел, без вставки в саму цепочку сигналов.

1

Другие решения

Других решений пока нет …