TF 2.0 is out! Get hands-on practice at TF World, Oct 28-31. Use code TF20 for 20% off select passes. Register now

groove

The Groove MIDI Dataset (GMD) is composed of 13.6 hours of aligned MIDI and (synthesized) audio of human-performed, tempo-aligned expressive drumming captured on a Roland TD-11 V-Drum electronic drum kit.

groove is configured with tfds.audio.groove.GrooveConfig and has the following configurations predefined (defaults to the first one):

  • full-midionly (v1.0.0) (Size: 3.11 MiB): Groove dataset without audio, unsplit.

  • full-16000hz (v1.0.0) (Size: 4.76 GiB): Groove dataset with audio, unsplit.

  • 2bar-midionly (v1.0.0) (Size: 3.11 MiB): Groove dataset without audio, split into 2-bar chunks.

  • 2bar-16000hz (v1.0.0) (Size: 4.76 GiB): Groove dataset with audio, split into 2-bar chunks.

  • 4bar-midionly (v1.0.0) (Size: 3.11 MiB): Groove dataset without audio, split into 4-bar chunks.

groove/full-midionly

Groove dataset without audio, unsplit.

Versions:

  • 1.0.0 (default):
  • 2.0.0: New split API (https://tensorflow.org/datasets/splits)

Statistics

Split Examples
ALL 1,150
TRAIN 897
TEST 129
VALIDATION 124

Features

FeaturesDict({
    'bpm': Tensor(shape=(), dtype=tf.int32),
    'drummer': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
    'id': Tensor(shape=(), dtype=tf.string),
    'midi': Tensor(shape=(), dtype=tf.string),
    'style': FeaturesDict({
        'primary': ClassLabel(shape=(), dtype=tf.int64, num_classes=18),
        'secondary': Tensor(shape=(), dtype=tf.string),
    }),
    'time_signature': ClassLabel(shape=(), dtype=tf.int64, num_classes=5),
    'type': ClassLabel(shape=(), dtype=tf.int64, num_classes=2),
})

Urls

groove/full-16000hz

Groove dataset with audio, unsplit.

Versions:

  • 1.0.0 (default):
  • 2.0.0: New split API (https://tensorflow.org/datasets/splits)

Statistics

Split Examples
ALL 1,090
TRAIN 846
TEST 124
VALIDATION 120

Features

FeaturesDict({
    'audio': Tensor(shape=[None], dtype=tf.float32),
    'bpm': Tensor(shape=(), dtype=tf.int32),
    'drummer': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
    'id': Tensor(shape=(), dtype=tf.string),
    'midi': Tensor(shape=(), dtype=tf.string),
    'style': FeaturesDict({
        'primary': ClassLabel(shape=(), dtype=tf.int64, num_classes=18),
        'secondary': Tensor(shape=(), dtype=tf.string),
    }),
    'time_signature': ClassLabel(shape=(), dtype=tf.int64, num_classes=5),
    'type': ClassLabel(shape=(), dtype=tf.int64, num_classes=2),
})

Urls

groove/2bar-midionly

Groove dataset without audio, split into 2-bar chunks.

Versions:

  • 1.0.0 (default):
  • 2.0.0: New split API (https://tensorflow.org/datasets/splits)

Statistics

Split Examples
ALL 22,619
TRAIN 18,163
VALIDATION 2,252
TEST 2,204

Features

FeaturesDict({
    'bpm': Tensor(shape=(), dtype=tf.int32),
    'drummer': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
    'id': Tensor(shape=(), dtype=tf.string),
    'midi': Tensor(shape=(), dtype=tf.string),
    'style': FeaturesDict({
        'primary': ClassLabel(shape=(), dtype=tf.int64, num_classes=18),
        'secondary': Tensor(shape=(), dtype=tf.string),
    }),
    'time_signature': ClassLabel(shape=(), dtype=tf.int64, num_classes=5),
    'type': ClassLabel(shape=(), dtype=tf.int64, num_classes=2),
})

Urls

groove/2bar-16000hz

Groove dataset with audio, split into 2-bar chunks.

Versions:

  • 1.0.0 (default):
  • 2.0.0: New split API (https://tensorflow.org/datasets/splits)

Statistics

Split Examples
ALL 18,297
TRAIN 14,390
VALIDATION 2,034
TEST 1,873

Features

FeaturesDict({
    'audio': Tensor(shape=[None], dtype=tf.float32),
    'bpm': Tensor(shape=(), dtype=tf.int32),
    'drummer': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
    'id': Tensor(shape=(), dtype=tf.string),
    'midi': Tensor(shape=(), dtype=tf.string),
    'style': FeaturesDict({
        'primary': ClassLabel(shape=(), dtype=tf.int64, num_classes=18),
        'secondary': Tensor(shape=(), dtype=tf.string),
    }),
    'time_signature': ClassLabel(shape=(), dtype=tf.int64, num_classes=5),
    'type': ClassLabel(shape=(), dtype=tf.int64, num_classes=2),
})

Urls

groove/4bar-midionly

Groove dataset without audio, split into 4-bar chunks.

Versions:

  • 1.0.0 (default):
  • 2.0.0: New split API (https://tensorflow.org/datasets/splits)

Statistics

Split Examples
ALL 21,415
TRAIN 17,261
VALIDATION 2,121
TEST 2,033

Features

FeaturesDict({
    'bpm': Tensor(shape=(), dtype=tf.int32),
    'drummer': ClassLabel(shape=(), dtype=tf.int64, num_classes=10),
    'id': Tensor(shape=(), dtype=tf.string),
    'midi': Tensor(shape=(), dtype=tf.string),
    'style': FeaturesDict({
        'primary': ClassLabel(shape=(), dtype=tf.int64, num_classes=18),
        'secondary': Tensor(shape=(), dtype=tf.string),
    }),
    'time_signature': ClassLabel(shape=(), dtype=tf.int64, num_classes=5),
    'type': ClassLabel(shape=(), dtype=tf.int64, num_classes=2),
})

Urls

Citation

@inproceedings{groove2019,
    Author = {Jon Gillick and Adam Roberts and Jesse Engel and Douglas Eck and David Bamman},
    Title = {Learning to Groove with Inverse Sequence Transformations},
    Booktitle   = {International Conference on Machine Learning (ICML)}
    Year = {2019},
}