{ "info": { "author": "Daniel Jones", "author_email": "dan-isobar@erase.net", "bugtrack_url": null, "classifiers": [ "Development Status :: 4 - Beta", "Intended Audience :: Developers", "Topic :: Artistic Software", "Topic :: Multimedia :: Sound/Audio" ], "description": "Introduction\n============\n\nisobar is a Python library for expressing and constructing musical\npatterns, designed for use in algorithmic composition. It allows for\nconcise construction, manipulation and transposition of sequences,\nsupporting scalar operations on lazy patterns.\n\nOutput can be sent via MIDI, OSC or SocketIO, or written to a .mid file.\nInput (for interactive systems) can be taken via MIDI, and patterns can\nbe read from a .mid file.\n\nTiming can be synchronised with an external MIDI clock, or generated\ninternally. For fluid control over timings, the internal clock can also\nbe warped by patterns subclassing the ``PWarp`` class; for example, a\n``PWRallantando`` can be used to generate a gradual, exponential\ndecrease in tempo.\n\nClasses are included for some fairly sophisticated operations. ``PLSys``\ncan be used to generate patterns based on the formal grammars of\n`Lindenmayer Systems `__;\n``PMarkov`` generates first-order Markov chains, accompanied by\n``MarkovLearner`` to build a statistical model from an input pattern (or\nMIDI input). Numerous pattern generators for chance operations are\ndefined in `pattern/chance.py `__.\n\nMost of the major parts of isobar are subclasses of ``Pattern``, which\nimplement\u2019s Python\u2019s iterator protocol. The ``next()`` method is called\nto generate the subsequent item in a pattern, with the ``StopIteration``\nexception raised when a pattern is exhausted. Builtins such as\n``list()``, ``sorted()`` and ``itertools`` can thus be used to process\nthe output of a ``Pattern``.\n\nUsage\n=====\n\n.. code:: python\n\n from isobar import *\n\n # create a repeating sequence with scalar transposition:\n # [ 36, 38, 43, 39, ... ]\n a = PSeq([ 0, 2, 7, 3 ]) + 36\n\n # apply pattern-wise transposition\n # [ 36, 50, 43, 51, ... ]\n a = a + PSeq([ 0, 12 ])\n\n # create a geometric chromatic series, repeated back and forth\n b = PSeries(0, 1, 12) + 72\n b = PPingPong(b)\n b = PLoop(b)\n\n # create an velocity series, with emphasis every 4th note,\n # plus a random walk to create gradual dynamic changes\n amp = PSeq([ 50, 35, 25, 35 ]) + PBrown(0, 1, -20, 20)\n\n # a Timeline schedules events at a given BPM.\n # by default, send these over the first MIDI output.\n timeline = Timeline(120, debug = True)\n\n # assign each of our Patterns to particular properties\n timeline.sched({ 'note': a, 'dur': 1, 'gate': 2 })\n timeline.sched({ 'note': b, 'dur': 0.25, 'amp': amp })\n\n timeline.run()\n\nExamples\n--------\n\nMore examples are available in the \u2018examples\u2019 directory with this\ndistribution:\n\n- `ex-basics.py `__\n- `ex-lsystem-grapher.py `__\n- `ex-lsystem-rhythm.py `__\n- `ex-lsystem-stochastic.py `__\n- `ex-markov-learner.py `__\n- `ex-permut-degree.py `__\n- `ex-piano-phase.py `__\n- `ex-prime-composition.py `__\n- `ex-subsequence.py `__\n- `ex-walk.py `__\n\nClasses\n-------\n\nTop-level classes:\n\n- `Chord `__\n- `Key `__\n- `Scale `__\n- `Timeline `__\n- `Clock `__\n\nI/O classes:\n\n- `MIDI `__\n- `MIDIFile `__\n- `OSC `__\n- `SocketIO `__\n\nPattern classes:\n\n::\n\n CORE (core.py)\n Pattern - Abstract superclass of all pattern generators.\n PConst - Pattern returning a fixed value\n PRef - Pattern containing a reference to another pattern\n PDict - Dict of patterns\n PIndex - Request a specified index from an array.\n PKey - Request a specified key from a dictionary.\n PConcat - Concatenate the output of multiple sequences.\n PAdd - Add elements of two patterns (shorthand: patternA + patternB)\n PSub - Subtract elements of two patterns (shorthand: patternA - patternB)\n PMul - Multiply elements of two patterns (shorthand: patternA * patternB)\n PDiv - Divide elements of two patterns (shorthand: patternA / patternB)\n PFloorDiv - Integer division of two patterns (shorthand: patternA // patternB)\n PMod - Modulo elements of two patterns (shorthand: patternA % patternB)\n PPow - One pattern to the power of another (shorthand: patternA ** patternB)\n PLShift - Binary left-shift (shorthand: patternA << patternB)\n PRShift - Binary right-shift (shorthand: patternA << patternB)\n\n SEQUENCE (sequence.py)\n PSeq - Sequence of values based on an array\n PSeries - Arithmetic series, beginning at , increment by \n PRange - Similar to PSeries, but specify a max/step value.\n PGeom - Geometric series, beginning at , multiplied by \n PLoop - Repeats a finite for repeats.\n PConcat - Concatenate the output of multiple finite sequences\n PPingPong - Ping-pong input pattern back and forth N times.\n PCreep - Loop -note segment, progressing notes after repeats.\n PStutter - Play each note of times.\n PWrap - Wrap input note values within , .\n PPermut - Generate every permutation of input items.\n PDegree - Map scale index to MIDI notes in .\n PSubsequence - Returns a finite subsequence of an input pattern.\n PImpulse - Outputs a 1 every events, otherwise 0.\n PReset - Resets each time it receives a zero-crossing from\n PCounter - Increments a counter by 1 for each zero-crossing in .\n PArp - Arpeggiator.\n PEuclidean - Generate Euclidean rhythms.\n PDecisionPoint - Each time its pattern is exhausted, requests a new pattern by calling .\n\n CHANCE (chance.py)\n PWhite - White noise between and .\n PBrown - Brownian noise, beginning at , step +/-.\n PWalk - Random walk around list.\n PChoice - Random selection from \n PWChoice - Random selection from , weighted by .\n PShuffle - Shuffled list.\n PShuffleEvery - Every steps, take values from and reorder.\n PSkip - Skip events with some probability, 1 - .\n PFlipFlop - flip a binary bit with some probability.\n PSwitchOne - Capture input values; repeat, switching two adjacent values times.\n\n OPERATOR (operator.py)\n PChanged - Outputs a 1 if the value of a pattern has changed.\n PDiff - Outputs the difference between the current and previous values of an input pattern\n PAbs - Absolute value of \n PNorm - Normalise to [0..1].\n PCollapse - Skip over any rests in \n PNoRepeats - Skip over repeated values in \n PMap - Apply an arbitrary function to an input pattern.\n PMapEnumerated - Apply arbitrary function to input, passing a counter.\n PLinLin - Map from linear range [a,b] to linear range [c,d].\n PLinExp - Map from linear range [a,b] to exponential range [c,d].\n PRound - Round to N decimal places.\n PIndexOf - Find index of items from in \n PPad - Pad with rests until it reaches length .\n PPadToMultiple - Pad with rests until its length is divisible by .\n\n STATIC (static.py)\n PStaticTimeline - Returns the position (in beats) of the current timeline.\n PStaticGlobal - Static global value identified by a string, with OSC listener\n\n FADE (fade.py)\n PFadeNotewise - Fade a pattern in/out by introducing notes at a gradual rate.\n PFadeNotewise - Fade a pattern in/out by gradually introducing random notes.\n\n MARKOV (markov.py)\n PMarkov - First-order Markov chain.\n\n LSYSTEM (lsystem.py)\n PLSys - integer sequence derived from Lindenmayer systems\n\n WARP (warp.py)\n PWInterpolate - Requests a new target warp value from every beats\n PWSine - Sinosoidal warp, period beats, amplitude +/-.\n PWRallantando - Exponential deceleration to times the current tempo over beats.\n\nBackground\n----------\n\nisobar was first designed for the generative sound installation\n`Variable 4 `__, in which it was used to\ngenerate musical structures in response to changing weather conditions.\nIt was more recently used as the backbone of `The Listening\nMachine `__, taking live input from\nTwitter and generating musical output from language patterns, streamed\nlive over the internet.\n\nMany of the concepts behind Pattern and its subclasses are inspired by\nthe excellent pattern library of the\n`SuperCollider `__ synthesis language.", "description_content_type": "", "docs_url": null, "download_url": "", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/ideoforms/isobar", "keywords": "sound,music,composition", "license": "", "maintainer": "", "maintainer_email": "", "name": "isobar", "package_url": "https://pypi.org/project/isobar/", "platform": "", "project_url": "https://pypi.org/project/isobar/", "project_urls": { "Homepage": "https://github.com/ideoforms/isobar" }, "release_url": "https://pypi.org/project/isobar/0.0.1/", "requires_dist": null, "requires_python": "", "summary": "A Python library to express and manipulate musical patterns", "version": "0.0.1" }, "last_serial": 5922584, "releases": { "0.0.1": [ { "comment_text": "", "digests": { "md5": "88158f9a4ef5ea27b8e31e1a29ca6712", "sha256": "e95f11e8da567c6e793c53bd650f7d1e115d1f344e2b5d9686bad8d7b57e62bd" }, "downloads": -1, "filename": "isobar-0.0.1.tar.gz", "has_sig": false, "md5_digest": "88158f9a4ef5ea27b8e31e1a29ca6712", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40053, "upload_time": "2019-10-03T09:33:42", "url": "https://files.pythonhosted.org/packages/c1/d3/32a87b8da6ed32f781706780dbc0eb65dd9e90f9ffc585dc9b3e93fc3e39/isobar-0.0.1.tar.gz" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "88158f9a4ef5ea27b8e31e1a29ca6712", "sha256": "e95f11e8da567c6e793c53bd650f7d1e115d1f344e2b5d9686bad8d7b57e62bd" }, "downloads": -1, "filename": "isobar-0.0.1.tar.gz", "has_sig": false, "md5_digest": "88158f9a4ef5ea27b8e31e1a29ca6712", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 40053, "upload_time": "2019-10-03T09:33:42", "url": "https://files.pythonhosted.org/packages/c1/d3/32a87b8da6ed32f781706780dbc0eb65dd9e90f9ffc585dc9b3e93fc3e39/isobar-0.0.1.tar.gz" } ] }