Git Product home page Git Product logo

streamsep's Introduction

Streamsep

Library for polyphonic stream segregation in OpenMusic.

Includes a subclass of 'analysis' to work interactively with stream separation within segments.

Check the tutorial files for examples of usage.

Install in the usual ways for OM libraries.

Anders Vinjar, 2021


The terms 'Stream separation' or 'Stream segregation" are used here, meaning more or less the same as polyphonic voice separation or voice following.

The core algorithm is based on Machine Learning clustering techniques, using 'Single Link Agglomerative Clustering' grouping individual notes into streams of voices. This approach is well adapted to follow arbitrary musical voices, which may wander across registers and also cross each other.

Currently the algorithm outputs monophonic voices. Any overlapping notes are clustered into separate streams, where each note belongs to one and only one output stream. A dynamic variable overlap-tolerance holds a factor (0-1.0) to control how forgiving the algorithm is with respect to what counts as simultaneous.

The feature vectors compared for similarity are built from pitch and time info in input data, using a function to measure similarity. The default distance metrics - #'euclidian-distance - compares pitches using a mel frequency scale, to do measurements based on perceived similarity. The similarity function can be tuned with adjustable weightings for pitch and time to fit various types of input.

Typical input in OpenMusic is a 'chord-seq'. Basic output is a list of chord-seqs, one for each voice found.

Currently, CPU usage grows exponentially with larger input data sets T(n)= ϴ(n³) (an optimization for HAC based on a Next-Best-Match array will be implemented when time permits). If things start to get too slow select subsets of data to work on, or preferably use the provided analysis-class: 'stream-seg' to interactively segment data before applying the stream-separation analysis per segment.

'stream-seg' - a sub-class of OMs 'analysis' class - is provided to work interactively with stream-segregation within segmentation bounds of segmented data. Functions are provided to return the output from this analysis as a list of lists of chord-seqs, the whole sequence of analysed segments concatenated into one multi-seq, or data to feed a Maquette.

Help is available directly from the graphical boxes (hit 'd'), or through the provided tutorials.

Anders Vinjar - April 2017

streamsep's People

Contributors

andersvi avatar j-bresson avatar

Stargazers

 avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.