class_docstr: Conditional Random Field Beat Detection.
  
  Tracks the beats according to the previously determined global tempo using
  a conditional random field (CRF) model.
  
  Parameters
  ----------
  interval_sigma : float, optional
      Allowed deviation from the dominant beat interval per beat.
  use_factors : bool, optional
      Use dominant interval multiplied by factors instead of intervals
      estimated by tempo estimator.
  num_intervals : int, optional
      Maximum number of estimated intervals to try.
  factors : list or numpy array, optional
      Factors of the dominant interval to try.
  
  References
  ----------
  .. [1] Filip Korzeniowski, Sebastian Böck and Gerhard Widmer,
         "Probabilistic Extraction of Beat Positions from a Beat Activation
         Function",
         Proceedings of the 15th International Society for Music Information
         Retrieval Conference (ISMIR), 2014.
  
  Examples
  --------
  Create a CRFBeatDetectionProcessor. The returned array represents the
  positions of the beats in seconds, thus the expected sampling rate has to
  be given.
  
  >>> proc = CRFBeatDetectionProcessor(fps=100)
  >>> proc  # doctest: +ELLIPSIS
  <madmom.features.beats.CRFBeatDetectionProcessor object at 0x...>
  
  Call this BeatDetectionProcessor with the beat activation function returned
  by RNNBeatProcessor to obtain the beat positions.
  
  >>> act = RNNBeatProcessor()('tests/data/audio/sample.wav')
  >>> proc(act)
  array([0.09, 0.79, 1.49])
class_docstr_tok: ["Conditional","Random","Field","Beat","Detection",".","Tracks","the","beats","according","to","the","previously","determined","global","tempo","using","a","conditional","random","field","(","CRF",")","model",".","Parameters","--","--","--","--","--","interval_sigma",":","float",",","optional","Allowed","deviation","from","the","dominant","beat","interval","per","beat",".","use_factors",":","bool",",","optional","Use","dominant","interval","multiplied","by","factors","instead","of","intervals","estimated","by","tempo","estimator",".","num_intervals",":","int",",","optional","Maximum","number","of","estimated","intervals","to","try",".","factors",":","list","or","numpy","array",",","optional","Factors","of","the","dominant","interval","to","try",".","References","--","--","--","--","--","..","[","1","]","Filip","Korzeniowski",",","Sebastian","B\u00f6ck","and","Gerhard","Widmer",",","``","Probabilistic","Extraction","of","Beat","Positions","from","a","Beat","Activation","Function","''",",","Proceedings","of","the","15th","International","Society","for","Music","Information","Retrieval","Conference","(","ISMIR",")",",","2014",".","Examples","--","--","--","--","Create","a","CRFBeatDetectionProcessor",".","The","returned","array","represents","the","positions","of","the","beats","in","seconds",",","thus","the","expected","sampling","rate","has","to","be","given",".",">",">",">","proc","=","CRFBeatDetectionProcessor","(","fps=100",")",">",">",">","proc","#","doctest",":","+ELLIPSIS","<","madmom.features.beats.CRFBeatDetectionProcessor","object","at","0x","...",">","Call","this","BeatDetectionProcessor","with","the","beat","activation","function","returned","by","RNNBeatProcessor","to","obtain","the","beat","positions",".",">",">",">","act","=","RNNBeatProcessor","(",")","(","'tests\/data\/audio\/sample.wav","'",")",">",">",">","proc","(","act",")","array","(","[","0.09",",","0.79",",","1.49","]",")"]
code: def __init__(
      self,
      interval_sigma=INTERVAL_SIGMA,
      use_factors=USE_FACTORS,
      num_intervals=NUM_INTERVALS,
      factors=FACTORS,
      **kwargs,
  ):
      super(CRFBeatDetectionProcessor, self).__init__(**kwargs)
      # save parameters
      self.interval_sigma = interval_sigma
      self.use_factors = use_factors
      self.num_intervals = num_intervals
      self.factors = factors
      # get num_threads from kwargs
      num_threads = min(
          len(factors) if use_factors else num_intervals,
          kwargs.get("num_threads", 1),
      )
      # init a pool of workers (if needed)
      self.map = map
      if num_threads != 1:
          import multiprocessing as mp
  
          self.map = mp.Pool(num_threads).map
  
imports: from __future__ import absolute_import, division, print_function
  import sys
  import numpy
  from ..audio.signal import signal_frame, smooth
  from ..ml.nn import average_predictions
  from ..processors import OnlineProcessor, ParallelProcessor, Processor, SequentialProcessor
label_desc: Use image node_id 1 to create a new CRFBeatDetectionProcessor object from inherited base classes: BeatTrackingProcessor with example: obj = CRFBeatDetectionProcessor(interval_sigma, use_factors, num_intervals, factors)