gpt4 book ai didi

c++ - AudioKit 的 AKNodeOutputPlot 如何提取数据?

转载 作者:可可西里 更新时间:2023-11-01 05:48:49 32 4
gpt4 key购买 nike

我是 AudioKit 框架的新手,我一直在尝试更多地了解它的 DSP 方面。在翻阅源代码时,我意识到 AKNodeOutputPlot 不会像其他人那样从节点中提取数据。

在 AKAmplitudeTracker 的 DSP 代码中,为每个 channel 计算一个 RMS 值,并将结果简短地写入输出缓冲区,但在 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;
}
}
}

这是有道理的,因为将 RMS 值输出到设备扬声器听起来很糟糕,但是当此节点用作 AKNodeOutputPlot 对象的输入时,将绘制 RMS 值。

input and rms plot

我假设 leftAmplitude 和 rightAmplitude 变量在某处被引用,但即使将它们归零,绘图也能正常工作。我有兴趣在不影响输出的情况下对信号做一些工作,所以我很乐意有人能帮我弄清楚 AKPlot 如何获取这些数据。

干杯

最佳答案

AKNodeOutputPlot 使用称为“点击”的东西:

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

还有一些其他水龙头不一定仅用于用户界面目的:

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

Tap 允许您检查通过另一个节点拉取的数据,而无需插入信号链本身。

关于c++ - AudioKit 的 AKNodeOutputPlot 如何提取数据?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47345831/

32 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com