Skip to content

For Developers

Sergey Grishakov edited this page Nov 20, 2022 · 3 revisions

You can use WhatBPM data for your own purposes. These are ordinary JSON files available for processing in any tech stack. For example, you can apply alternative analytics methods, make your own interpretation or visualization. The latest up-to-date data is always available here:

https://sergree.github.io/whatbpm/latest.json

We also provide historical data so that you can track the change in EDM trends over time:

https://sergree.github.io/whatbpm/history/2022-11-16.json

Follow here to view a list of all available files.

The current data schema is described here, please note that it may change over time.

The schema is automatically generated roger13/SwagDefGen.

definitions: 
  updated_at: 
    type: number
    example: 1668732178
  stats: 
    type: array
    items: 
      type: object
      properties: 
        meta: 
          type: object
          properties: 
            common_genre: 
              type: string
              format: nullable
            updated_at: 
              type: number
              example: 1668732172
            based_on: 
              type: string
              example: https://www.beatport.com/top-100
        standard: 
          type: object
          properties: 
            bpm: 
              type: array
              items: 
                type: object
                properties: 
                  value: 
                    type: number
                    example: 126
                  weighted_count: 
                    type: object
                    properties: 
                      score: 
                        type: number
                        example: 19.00294
                      count: 
                        type: number
                        example: 19
            root_note: 
              type: array
              items: 
                type: object
                properties: 
                  value: 
                    type: string
                    example: G
                  weighted_count: 
                    type: object
                    properties: 
                      score: 
                        type: number
                        example: 20.001009
                      count: 
                        type: number
                        example: 20
            key: 
              type: array
              items: 
                type: object
                properties: 
                  value: 
                    type: string
                    example: G min
                  weighted_count: 
                    type: object
                    properties: 
                      score: 
                        type: number
                        example: 10.002768
                      count: 
                        type: number
                        example: 10
            label: 
              type: array
              items: 
                type: object
                properties: 
                  value: 
                    type: string
                    example: EMI
                  weighted_count: 
                    type: object
                    properties: 
                      score: 
                        type: number
                        example: 3.9997578
                      count: 
                        type: number
                        example: 4
            genre: 
              type: array
              items: 
                type: object
                properties: 
                  value: 
                    type: string
                    example: Tech House
                  weighted_count: 
                    type: object
                    properties: 
                      score: 
                        type: number
                        example: 24.003696
                      count: 
                        type: number
                        example: 24
            average_duration: 
              type: number
              example: 332
            average_bar_count: 
              type: object
              properties: 
                count: 
                  type: number
                  example: 174
                bpm: 
                  type: number
                  example: 126
        folded: 
          type: object
          properties: 
            bpm: 
              type: array
              items: 
                type: object
                properties: 
                  count: 
                    type: number
                    example: 19
                  values: 
                    type: array
                    items: 
                      type: number
                      example: 126
            root_note: 
              type: array
              items: 
                type: object
                properties: 
                  count: 
                    type: number
                    example: 20
                  values: 
                    type: array
                    items: 
                      type: string
                      example: G
            key: 
              type: array
              items: 
                type: object
                properties: 
                  count: 
                    type: number
                    example: 10
                  values: 
                    type: array
                    items: 
                      type: string
                      example: G min
            label: 
              type: array
              items: 
                type: object
                properties: 
                  count: 
                    type: number
                    example: 4
                  values: 
                    type: array
                    items: 
                      type: string
                      example: EMI
            genre: 
              type: array
              items: 
                type: object
                properties: 
                  count: 
                    type: number
                    example: 24
                  values: 
                    type: array
                    items: 
                      type: string
                      example: Tech House
            average_duration: 
              type: number
              example: 332
            average_bar_count: 
              type: object
              properties: 
                count: 
                  type: number
                  example: 174
                bpm: 
                  type: number
                  example: 126

In a nutshell, two types of reports are generated for each genre: standard and folded. WhatBPM website displays 3 top values for each type from the standard report ordered by score. For example:

1. 128 BPM - count 12 - score 12.003
2. 126 BPM - count 12 - score 11.998
3. 125 BPM - count 10 - score 10.001
--- Below is not displayed ---
4. 130 BPM - count 10 - score 9.999
...

The score for each track is calculated as follows:

1 +- S

Where S is some small value depending on the position of the track in the chart. Please study score.rs if you need more details.

A folded report interprets this data differently, ignoring the score:

1. 12 items per value - [128 BPM, 126 BPM]
2. 10 items per value - [125 BPM, 130 BPM]
...

This view has its advantages in some cases.

Please email me or create a PR if you have any questions.

Clone this wiki locally