私はAudioKitフレームワークの新機能で、DSP側についてもう少し理解しようとしています。ソースコードの中で迷っているうちに、AKNodeOutputPlotは他の人と同じ方法でノードからデータを取得しないことに気付きました。AudioKitのAKNodeOutputPlotはどのようにデータを取得しますか?
AKAmplitudeTrackerのDSPコードでは、各チャネルの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への入力として使用されるときの値がプロットされています。
は私がleftAmplitudeとrightAmplitude変数がどこかで参照されていたが、彼らはゼロにされている場合でも、プロットはうまく動作することを想定しました。私は、出力に影響を与えずに信号を処理することに興味があるので、誰かがAKPlotがどのようにこのデータを取得しているかを理解するのを助けてくれるのが大好きです。
乾杯