Beispiel #1
0
  def process(self, input_example):
    tf.logging.info('Splitting %s',
                    input_example.features.feature['id'].bytes_list.value[0])

    wav_data = input_example.features.feature['audio'].bytes_list.value[0]

    ns = music_pb2.NoteSequence.FromString(
        input_example.features.feature['sequence'].bytes_list.value[0])

    Metrics.counter('split_wav', 'read_midi_wav_to_split').inc()

    if self._split == 'test':
      # For the 'test' split, use the full length audio and midi.
      split_examples = split_audio_and_label_data.process_record(
          wav_data,
          ns,
          ns.id,
          min_length=0,
          max_length=-1,
          sample_rate=self._sample_rate)

      for example in split_examples:
        Metrics.counter('split_wav', 'full_example').inc()
        yield example
    else:
      split_examples = split_audio_and_label_data.process_record(
          wav_data, ns, ns.id, self._min_length, self._max_length,
          self._sample_rate)

      for example in split_examples:
        Metrics.counter('split_wav', 'split_example').inc()
        yield example
  def process(self, input_example):
    tf.logging.info('Splitting %s',
                    input_example.features.feature['id'].bytes_list.value[0])

    wav_data = input_example.features.feature['audio'].bytes_list.value[0]

    ns = music_pb2.NoteSequence.FromString(
        input_example.features.feature['sequence'].bytes_list.value[0])

    Metrics.counter('split_wav', 'read_midi_wav_to_split').inc()

    if self._split == 'test':
      # For the 'test' split, use the full length audio and midi.
      split_examples = split_audio_and_label_data.process_record(
          wav_data,
          ns,
          ns.id,
          min_length=0,
          max_length=-1,
          sample_rate=self._sample_rate)

      for example in split_examples:
        Metrics.counter('split_wav', 'full_example').inc()
        yield example
    else:
      split_examples = split_audio_and_label_data.process_record(
          wav_data, ns, ns.id, self._min_length, self._max_length,
          self._sample_rate)

      for example in split_examples:
        Metrics.counter('split_wav', 'split_example').inc()
        yield example
def split_wav(input_example, min_length, max_length, sample_rate,
              output_directory, process_for_training, load_audio_with_librosa):
    """Splits wav and midi files for the dataset."""
    tf.logging.info('Splitting %s',
                    input_example.features.feature['id'].bytes_list.value[0])

    wav_data = input_example.features.feature['audio'].bytes_list.value[0]

    ns = music_pb2.NoteSequence.FromString(
        input_example.features.feature['sequence'].bytes_list.value[0])

    Metrics.counter('split_wav', 'read_midi_wav_to_split').inc()

    if not process_for_training:
        split_examples = split_audio_and_label_data.process_record(
            wav_data,
            ns,
            ns.id,
            min_length=0,
            max_length=-1,
            sample_rate=sample_rate,
            load_audio_with_librosa=load_audio_with_librosa)

        for example in split_examples:
            Metrics.counter('split_wav', 'full_example').inc()
            yield example
    else:
        try:
            split_examples = split_audio_and_label_data.process_record(
                wav_data,
                ns,
                ns.id,
                min_length=min_length,
                max_length=max_length,
                sample_rate=sample_rate,
                load_audio_with_librosa=load_audio_with_librosa)

            for example in split_examples:
                Metrics.counter('split_wav', 'split_example').inc()
                yield example
        except AssertionError:
            output_file = 'badexample-' + hashlib.md5(
                ns.id).hexdigest() + '.proto'
            output_path = os.path.join(output_directory, output_file)
            tf.logging.error('Exception processing %s. Writing file to %s',
                             ns.id, output_path)
            with tf.gfile.Open(output_path, 'w') as f:
                f.write(input_example.SerializeToString())
            raise
def generate_train_set(exclude_ids):
  """Generate the train TFRecord."""
  train_file_pairs = []
  for directory in train_dirs:
    path = os.path.join(FLAGS.input_dir, directory)
    path = os.path.join(path, '*.wav')
    wav_files = glob.glob(path)
    # find matching mid files
    for wav_file in wav_files:
      base_name_root, _ = os.path.splitext(wav_file)
      mid_file = base_name_root + '.mid'
      if filename_to_id(wav_file) not in exclude_ids:
        train_file_pairs.append((wav_file, mid_file))

  train_output_name = os.path.join(FLAGS.output_dir,
                                   'maps_config2_train.tfrecord')

  with tf.python_io.TFRecordWriter(train_output_name) as writer:
    for idx, pair in enumerate(train_file_pairs):
      print('{} of {}: {}'.format(idx, len(train_file_pairs), pair[0]))
      # load the wav data
      wav_data = tf.gfile.Open(pair[0], 'rb').read()
      # load the midi data and convert to a notesequence
      ns = midi_io.midi_file_to_note_sequence(pair[1])
      for example in split_audio_and_label_data.process_record(
          wav_data, ns, pair[0], FLAGS.min_length, FLAGS.max_length,
          FLAGS.sample_rate):
        writer.write(example.SerializeToString())
def generate_train_set(exclude_ids):
    """Generate the train TFRecord."""
    train_file_pairs = []
    for directory in train_dirs:
        path = os.path.join(FLAGS.input_dir, directory)
        path = os.path.join(path, '*.wav')
        wav_files = glob.glob(path)
        # find matching mid files
        for wav_file in wav_files:
            base_name_root, _ = os.path.splitext(wav_file)
            mid_file = base_name_root + '.mid'
            if filename_to_id(wav_file) not in exclude_ids:
                train_file_pairs.append((wav_file, mid_file))

    train_output_name = os.path.join(FLAGS.output_dir,
                                     'maps_config2_train.tfrecord')

    with tf.python_io.TFRecordWriter(train_output_name) as writer:
        for idx, pair in enumerate(train_file_pairs):
            print('{} of {}: {}'.format(idx, len(train_file_pairs), pair[0]))
            # load the wav data
            wav_data = tf.gfile.Open(pair[0], 'rb').read()
            # load the midi data and convert to a notesequence
            ns = midi_io.midi_file_to_note_sequence(pair[1])
            for example in split_audio_and_label_data.process_record(
                    wav_data, ns, pair[0], FLAGS.min_length, FLAGS.max_length,
                    FLAGS.sample_rate):
                writer.write(example.SerializeToString())
Beispiel #6
0
  def process(self, input_example):
    tf.logging.info('Splitting %s',
                    input_example.features.feature['id'].bytes_list.value[0])

    wav_data = input_example.features.feature['audio'].bytes_list.value[0]

    ns = music_pb2.NoteSequence.FromString(
        input_example.features.feature['sequence'].bytes_list.value[0])

    Metrics.counter('split_wav', 'read_midi_wav_to_split').inc()

    if self._split == 'test' or self._split == 'validation':
      # For the 'test' and 'validation' splits, use the full length audio and
      # midi.
      split_examples = split_audio_and_label_data.process_record(
          wav_data,
          ns,
          ns.id,
          min_length=0,
          max_length=-1,
          sample_rate=self._sample_rate)

      for example in split_examples:
        Metrics.counter('split_wav', 'full_example').inc()
        yield example
    else:
      try:
        split_examples = split_audio_and_label_data.process_record(
            wav_data, ns, ns.id, self._min_length, self._max_length,
            self._sample_rate)

        for example in split_examples:
          Metrics.counter('split_wav', 'split_example').inc()
          yield example
      except AssertionError:
        output_file = 'badexample-' + hashlib.md5(ns.id).hexdigest() + '.proto'
        output_path = os.path.join(self._output_directory, output_file)
        tf.logging.error('Exception processing %s. Writing file to %s',
                         ns.id, output_path)
        with tf.gfile.Open(output_path, 'w') as f:
          f.write(input_example.SerializeToString())
        raise
  def process(self, input_example):
    tf.logging.info('Splitting %s',
                    input_example.features.feature['id'].bytes_list.value[0])

    wav_data = input_example.features.feature['audio'].bytes_list.value[0]

    ns = music_pb2.NoteSequence.FromString(
        input_example.features.feature['sequence'].bytes_list.value[0])

    Metrics.counter('split_wav', 'read_midi_wav_to_split').inc()

    if not self._chunk_files:
      split_examples = split_audio_and_label_data.process_record(
          wav_data,
          ns,
          ns.id,
          min_length=0,
          max_length=-1,
          sample_rate=self._sample_rate)

      for example in split_examples:
        Metrics.counter('split_wav', 'full_example').inc()
        yield example
    else:
      try:
        split_examples = split_audio_and_label_data.process_record(
            wav_data, ns, ns.id, self._min_length, self._max_length,
            self._sample_rate)

        for example in split_examples:
          Metrics.counter('split_wav', 'split_example').inc()
          yield example
      except AssertionError:
        output_file = 'badexample-' + hashlib.md5(ns.id).hexdigest() + '.proto'
        output_path = os.path.join(self._output_directory, output_file)
        tf.logging.error('Exception processing %s. Writing file to %s',
                         ns.id, output_path)
        with tf.gfile.Open(output_path, 'w') as f:
          f.write(input_example.SerializeToString())
        raise
def create_example(filename):
    """Processes an audio file into an Example proto."""
    wav_data = tf.gfile.Open(filename, 'rb').read()
    example_list = list(
        split_audio_and_label_data.process_record(
            wav_data=wav_data,
            ns=music_pb2.NoteSequence(),
            example_id=filename,
            min_length=0,
            max_length=-1,
            allow_empty_notesequence=True))
    assert len(example_list) == 1
    return example_list[0].SerializeToString()
def create_example(filename):
  """Processes an audio file into an Example proto."""
  wav_data = tf.gfile.Open(filename, 'rb').read()
  example_list = list(
      split_audio_and_label_data.process_record(
          wav_data=wav_data,
          ns=music_pb2.NoteSequence(),
          # decode to handle filenames with extended characters.
          example_id=filename.decode('utf-8'),
          min_length=0,
          max_length=-1,
          allow_empty_notesequence=True))
  assert len(example_list) == 1
  return example_list[0].SerializeToString()
  def testSplitAudioLabelData(self):
    wav_data, sequence = self._CreateSyntheticExample()
    records = split_audio_and_label_data.process_record(
        wav_data, sequence, 'test', sample_rate=SAMPLE_RATE)

    for record in records:
      audio = record.features.feature['audio'].bytes_list.value[0]
      velocity_range = music_pb2.VelocityRange.FromString(
          record.features.feature['velocity_range'].bytes_list.value[0])
      note_sequence = music_pb2.NoteSequence.FromString(
          record.features.feature['sequence'].bytes_list.value[0])

      self.assertEqual(
          np.all(
              audio_io.wav_data_to_samples(audio, sample_rate=SAMPLE_RATE) ==
              np.zeros(2 * SAMPLE_RATE)), True)
      self.assertEqual(velocity_range.min, 20)
      self.assertEqual(velocity_range.max, 80)
      self.assertEqual(note_sequence.notes[0].velocity, 20)
      self.assertEqual(note_sequence.notes[0].end_time, 5.)
      self.assertEqual(note_sequence.notes[1].velocity, 80)
      self.assertEqual(note_sequence.notes[1].end_time, 10.)
Beispiel #11
0
    def testSplitAudioLabelData(self):
        wav_data, sequence = self._CreateSyntheticExample()
        records = split_audio_and_label_data.process_record(
            wav_data, sequence, 'test', sample_rate=SAMPLE_RATE)

        for record in records:
            audio = record.features.feature['audio'].bytes_list.value[0]
            velocity_range = music_pb2.VelocityRange.FromString(
                record.features.feature['velocity_range'].bytes_list.value[0])
            note_sequence = music_pb2.NoteSequence.FromString(
                record.features.feature['sequence'].bytes_list.value[0])

            self.assertEqual(
                np.all(
                    audio_io.wav_data_to_samples(audio,
                                                 sample_rate=SAMPLE_RATE) ==
                    np.zeros(2 * SAMPLE_RATE)), True)
            self.assertEqual(velocity_range.min, 20)
            self.assertEqual(velocity_range.max, 80)
            self.assertEqual(note_sequence.notes[0].velocity, 20)
            self.assertEqual(note_sequence.notes[0].end_time, 5.)
            self.assertEqual(note_sequence.notes[1].velocity, 80)
            self.assertEqual(note_sequence.notes[1].end_time, 10.)