Я очень плохо знаком с платформой 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 ссылались где-то, но даже если они обнуляются, график работает просто отлично. Я заинтересован в том, чтобы поработать над сигналом, не влияя на вывод, поэтому мне бы очень хотелось, чтобы кто-нибудь помог мне понять, как АКПлот собирает эти данные.
ура
AKNodeOutputPlot работает с тем, что называется «тапом»:
Есть также несколько других нажатий, которые не обязательно предназначены только для пользовательского интерфейса:
https://github.com/AudioKit/AudioKit/tree/master/AudioKit/Common/Taps
Отводы позволяют проверять данные, проходящие через другой узел, без вставки в саму цепочку сигналов.
Других решений пока нет …