code: def __init__(
      self,
      frameSize=panningFrameSize,
      hopSize=panningHopSize,
      sampleRate=analysisSampleRate,
  ):
      super(PanningExtractor, self).__init__()
  
      demuxer = StereoDemuxer()
      fc_left = FrameCutter(
          frameSize=frameSize,
          hopSize=hopSize,
          startFromZero=False,
          silentFrames="noise",
      )
  
      fc_right = FrameCutter(
          frameSize=frameSize,
          hopSize=hopSize,
          startFromZero=False,
          silentFrames="noise",
      )
      w_left = Windowing(
          type="hann", size=frameSize, zeroPadding=frameSize
      )
      w_right = Windowing(
          type="hann", size=frameSize, zeroPadding=frameSize
      )
      spec_left = Spectrum()
      spec_right = Spectrum()
      pan = Panning(
          sampleRate=sampleRate,
          averageFrames=43,  # 2 seconds*sr/hopsize
          panningBins=512,
          numCoeffs=20,
          numBands=1,
          warpedPanorama=True,
      )
  
      # left channel:
      demuxer.left >> fc_left.signal
      fc_left.frame >> w_left.frame >> spec_left.frame
      spec_left.spectrum >> pan.spectrumLeft
  
      # right channel:
      demuxer.right >> fc_right.signal
      fc_right.frame >> w_right.frame >> spec_right.frame
      spec_right.spectrum >> pan.spectrumRight
  
      # define inputs:
      self.inputs["signal"] = demuxer.audio
  
      # define outputs:
      self.outputs["panning_coefficients"] = pan.panningCoeffs
  
file_path: essentia/src/examples/python/outdated/streaming_extractor/panning.py
imports: import sys, os
  import essentia, essentia.standard, essentia.streaming
  from essentia.streaming import *
label_desc: Use image node_id 1 to create a new PanningExtractor object from inherited base classes: essentia.streaming with example: obj = PanningExtractor(frameSize, hopSize, sampleRate)