class_docstr: A class for mapping control change numbers to specific controls.
  
  Args:
    cc_map: A dictionary containing mappings from signal names to control
        change numbers (or None). This dictionary will be updated by the class.
    midi_hub_: An initialized MidiHub to receive inputs from.
docstr: Enters a loop that receives user input to set signal controls.
docstr_tok: ["Enters","a","loop","that","receives","user","input","to","set","signal","controls","."]
code: def update_map(self):
      """Enters a loop that receives user input to set signal controls."""
      while True:
          print("")
          self._print_instructions()
          response = input("Selection: ")
          if response == "q":
              return
          try:
              signal = self._signals[int(response) - 1]
          except (ValueError, IndexError):
              print("Invalid response:", response)
              continue
          self._update_event.clear()
          self._midi_hub.register_callback(
              functools.partial(self._update_signal, signal),
              midi_hub.MidiSignal(type="control_change"),
          )
          print(
              "Send a control signal using the control number you wish to "
              "associate with `%s`." % signal
          )
          self._update_event.wait()
  
imports: import functools
  import re
  import threading
  import time
  from magenta.interfaces.midi import midi_hub
  from magenta.interfaces.midi import midi_interaction
  from magenta.models.drums_rnn import drums_rnn_sequence_generator
  from magenta.models.melody_rnn import melody_rnn_sequence_generator
  from magenta.models.performance_rnn import performance_sequence_generator
  from magenta.models.pianoroll_rnn_nade import pianoroll_rnn_nade_sequence_generator
  from magenta.models.polyphony_rnn import polyphony_sequence_generator
  from magenta.models.shared import sequence_generator_bundle
  import six
  import tensorflow.compat.v1
label_desc: Use image node_id 4 for calling the CCMapper obj's underlying member method code with example usage: obj.update_map() without return types