class_docstr: Base class for handling interaction between MIDI and SequenceGenerator.
  
  Child classes will provided the "main loop" of an interactive session between
  a MidiHub used for MIDI I/O and sequences generated by a SequenceGenerator in
  their `run` methods.
  
  Should be started by calling `start` to launch in a separate thread.
  
  Args:
    midi_hub: The MidiHub to use for MIDI I/O.
    sequence_generators: A collection of SequenceGenerator objects.
    qpm: The quarters per minute to use for this interaction. May be overriden
       by control changes sent to `tempo_control_number`.
    generator_select_control_number: An optional MIDI control number whose
       value to use for selection a sequence generator from the collection.
       Must be provided if `sequence_generators` contains multiple
       SequenceGenerators.
    tempo_control_number: An optional MIDI control number whose value to use to
       determine the qpm for this interaction. On receipt of a control change,
       the qpm will be set to 60 more than the control change value.
    temperature_control_number: The optional control change number to use for
        controlling generation softmax temperature.
  
  Raises:
    ValueError: If `generator_select_control_number` is None and
        `sequence_generators` contains multiple SequenceGenerators.
docstr: Returns the temperature based on the current control value.
  
  Linearly interpolates between `min_temp` and `max_temp`.
  
  Args:
    min_temp: The minimum temperature, which will be returned when value is 0.
    max_temp: The maximum temperature, which will be returned when value is
        127.
    default: The temperature to return if control value is None.
  
  Returns:
    A float temperature value based on the 8-bit MIDI control value.
docstr_tok: ["Returns","the","temperature","based","on","the","current","control","value",".","Linearly","interpolates","between","`","min_temp","`","and","`","max_temp","`",".","Args",":","min_temp",":","The","minimum","temperature",",","which","will","be","returned","when","value","is","0.","max_temp",":","The","maximum","temperature",",","which","will","be","returned","when","value","is","127.","default",":","The","temperature","to","return","if","control","value","is","None",".","Returns",":","A","float","temperature","value","based","on","the","8-bit","MIDI","control","value","."]
code: def _temperature(self, min_temp=0.1, max_temp=2.0, default=1.0):
      """Returns the temperature based on the current control value.
  
      Linearly interpolates between `min_temp` and `max_temp`.
  
      Args:
        min_temp: The minimum temperature, which will be returned when value is 0.
        max_temp: The maximum temperature, which will be returned when value is
            127.
        default: The temperature to return if control value is None.
  
      Returns:
        A float temperature value based on the 8-bit MIDI control value.
      """
      val = self._midi_hub.control_value(
          self._temperature_control_number
      )
      if val is None:
          return default
      return min_temp + (val / 127.0) * (max_temp - min_temp)
  
imports: import abc
  import threading
  import time
  import note_seq
  from note_seq.protobuf import generator_pb2
  from note_seq.protobuf import music_pb2
  import tensorflow.compat.v1
label_desc: Use image node_id 4 for calling the MidiInteraction obj's underlying member method code with example usage: obj._temperature(min_temp, max_temp, default) and returns: unknown, default