2017-11-17 15 views
3

私は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への入力として使用されるときの値がプロットされています。

input and rms plot

は私がleftAmplitudeとrightAmplitude変数がどこかで参照されていたが、彼らはゼロにされている場合でも、プロットはうまく動作することを想定しました。私は、出力に影響を与えずに信号を処理することに興味があるので、誰かがAKPlotがどのようにこのデータを取得しているかを理解するのを助けてくれるのが大好きです。

乾杯

答えて

1

AKNodeOutputPlotは "タップ" と呼ばれるもので動作します:

だけで、ユーザインターフェースのために、必ずしもではないいくつかの他のタップでもありますhttps://github.com/AudioKit/AudioKit/blob/master/AudioKit/Common/User%20Interface/AKNodeOutputPlot.swift

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

タップを使用すると、別のノードで引っ張られるデータを検査できます信号チェーン自体に挿入されることなく、

関連する問題