Skip to main content

A Python package for computing tonnes of melodic features found in computational musicology literature.

Project description

Melody-Features

Open in GitHub Codespaces

DOI

Tests

Coverage

Overview

This is a Python package designed to facilitate the use of many different melody analyis tools.

The main goal of this package is to consolidate a wide range of features from the computational melody analysis literature into a single place, in a single language.

This package is strictly for monophonic melodies - it will not compute any features for polyphonic music!

Included Contributions

Included in the package are contributions from:

  • FANTASTIC (Müllensiefen, 2009)
  • SIMILE (Müllensiefen & Frieler, 2006)
  • melsim (Silas & Frieler, n.d.)
  • jSymbolic2 (McKay & Fujinaga, 2006)
  • IDyOM (Pearce, 2005)
  • MIDI Toolbox (Eerola & Toiviainen, 2004)

Melody Features Summary

This package provides over 200 features from various computational melody analysis frameworks. For a comprehensive, interactive table with search and sorting capabilities, refer to:

Interactive Features Table

The interactive table allows you to:

  • Search features by name, implementation, or description
  • Sort by any column (Name, Implementation, Type, etc.)
  • Browse all features with detailed descriptions and references

Installation

# Clone the repository
git clone https://github.com/dmwhyatt/melody-features.git
cd melody-features

# Install in development mode
pip install -e .

Quick Start

The feature set can be easily accessed using the top-level function get_all_features. Here's a basic example:

from melody_features import get_all_features

# Extract features from a directory of MIDI files, a single MIDI file
# or a list of paths to MIDI files
results = get_all_features(input="path/to/your/midi/files")

# Print the result of all feature calculations
print(results.iloc[:1,].to_json(indent=4, orient="records"))

By default, this function will produce a Pandas DataFrame containing the tabulated features, using the Essen Folksong Collection as the reference corpus.

This function can be customised in a number of ways, please see notebooks/example.ipynb for a detailed breakdown.

Melsim

Melsim is an R package for computing the similarity between two or more melodies. It is currently under development by Seb Silas and Klaus Frieler (https://github.com/sebsilas/melsim)

It is included with this feature set through a wrapper approach - take a look at example.py and the supplied MIDI files.

Since calculating similarities is highly modular in Melsim, we leave the user to decide how they wish to construct comparisons. Melsim is not run as part of the get_all_features function.

Available Corpora

The package comes with an example corpus, a MIDI conversion of the well-known Essen Folksong Collection (Eck, 2024; Schaffrath, 1995).

Development

Running Tests

# Run all tests
python tests/run_tests.py

# Run specific test suites
python -m pytest tests/test_module_setup.py -v
python -m pytest tests/test_corpus_import.py -v
python -m pytest tests/test_idyom_setup.py -v

Contributing

Contributions are welcomed, though this project is likely to be migrated into AMADS in the future...

See https://github.com/music-computing/amads

License

This project is licensed under the MIT License - see the LICENSE file for details.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

melody_features-1.0.0.tar.gz (996.1 kB view details)

Uploaded Source

Built Distribution

If you're not sure about the file name format, learn more about wheel file names.

melody_features-1.0.0-py3-none-any.whl (3.5 MB view details)

Uploaded Python 3

File details

Details for the file melody_features-1.0.0.tar.gz.

File metadata

  • Download URL: melody_features-1.0.0.tar.gz
  • Upload date:
  • Size: 996.1 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/6.1.0 CPython/3.13.5

File hashes

Hashes for melody_features-1.0.0.tar.gz
Algorithm Hash digest
SHA256 858490814597aac35012891687ccc20f061f86f9c15a4e093fefa901d5aa9e96
MD5 b318ad62cef305a4900a4fc4d53927b1
BLAKE2b-256 143de63e92f5df4ed7889e0faf5e39f12340f60b81cd28fb8205386b02c0a0de

See more details on using hashes here.

File details

Details for the file melody_features-1.0.0-py3-none-any.whl.

File metadata

File hashes

Hashes for melody_features-1.0.0-py3-none-any.whl
Algorithm Hash digest
SHA256 9eda36168772e337d5197d743a66cf2bb95f8d3c88466e4e68979f2d4b3af3ad
MD5 2bab47b677ce3826d3451502081014c1
BLAKE2b-256 cc9d6ba7b5ffada4702e3153a0b20a609c58b365bd63c16d7ac439681f7a15ee

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Depot Continuous Integration Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page