Пример #1
0
    def events_to_input(self, events, position):
        """Returns the input vector for the given position in the chord progression.

    Indices [0, 36]:
    [0]: Whether or not this chord is "no chord".
    [1, 12]: A one-hot encoding of the chord root pitch class.
    [13, 24]: Whether or not each pitch class is present in the chord.
    [25, 36]: A one-hot encoding of the chord bass pitch class.

    Args:
      events: A note_seq.ChordProgression object.
      position: An integer event position in the chord progression.

    Returns:
      An input vector, an self.input_size length list of floats.
    """
        chord = events[position]
        input_ = [0.0] * self.input_size

        if chord == NO_CHORD:
            input_[0] = 1.0
            return input_

        root = chord_symbols_lib.chord_symbol_root(chord)
        input_[1 + root] = 1.0

        pitches = chord_symbols_lib.chord_symbol_pitches(chord)
        for pitch in pitches:
            input_[1 + NOTES_PER_OCTAVE + pitch] = 1.0

        bass = chord_symbols_lib.chord_symbol_bass(chord)
        input_[1 + 2 * NOTES_PER_OCTAVE + bass] = 1.0

        return input_
  def encode_event(self, event):
    if event == NO_CHORD:
      return 0

    root = chord_symbols_lib.chord_symbol_root(event)
    quality = chord_symbols_lib.chord_symbol_quality(event)

    if quality == chord_symbols_lib.CHORD_QUALITY_MAJOR:
      return root + 1
    elif quality == chord_symbols_lib.CHORD_QUALITY_MINOR:
      return root + NOTES_PER_OCTAVE + 1
    else:
      raise ChordEncodingError('chord is neither major nor minor: %s' % event)
  def encode_event(self, event):
    if event == NO_CHORD:
      return 0

    root = chord_symbols_lib.chord_symbol_root(event)
    quality = chord_symbols_lib.chord_symbol_quality(event)

    if quality == chord_symbols_lib.CHORD_QUALITY_MAJOR:
      return root + 1
    elif quality == chord_symbols_lib.CHORD_QUALITY_MINOR:
      return root + NOTES_PER_OCTAVE + 1
    elif quality == chord_symbols_lib.CHORD_QUALITY_AUGMENTED:
      return root + 2 * NOTES_PER_OCTAVE + 1
    elif quality == chord_symbols_lib.CHORD_QUALITY_DIMINISHED:
      return root + 3 * NOTES_PER_OCTAVE + 1
    else:
      raise ChordEncodingError('chord is not a standard triad: %s' % event)
 def testChordSymbolRoot(self):
     root = chord_symbols_lib.chord_symbol_root('Dm9')
     self.assertEqual(2, root)
     root = chord_symbols_lib.chord_symbol_root('E/G#')
     self.assertEqual(4, root)
     root = chord_symbols_lib.chord_symbol_root('Bsus2')
     self.assertEqual(11, root)
     root = chord_symbols_lib.chord_symbol_root('Abmaj7')
     self.assertEqual(8, root)
     root = chord_symbols_lib.chord_symbol_root('D##5(add6)')
     self.assertEqual(4, root)
     root = chord_symbols_lib.chord_symbol_root('F(b7)(#9)(b13)')
     self.assertEqual(5, root)