gogins / silencio

Algorithmic composition for Csound in Lua and JavaScript.
2 stars 0 forks source link

Silencio

Michael Gogins
http://michaelgogins.tumblr.com
michael /dot/ gogins /at/ gmail /dot/ com

https://www.modartt.com/organteq

Deprecation Notice

Currently, I am not maintaining this repository. In general, my priority is composing music, not programming. However, I do create open-source GitHub repositories in order to share tools that I make for composing. As my working methods change, so do the tools I make.

Please look at my other GitHub repositories for tools I currently maintain.

However, this repository will remain available.

Introduction

This code is licensed under the terms of the GNU Library General Public License, version 2.

Generative music, algorithmic composition, score generation, call it what you will. Silencio is the first system for algorithmic composition that is designed to run on smartphones and tablets as well as personal computers.

Silencio features advanced score generators based on recurrent iterated function systems and parametric Lindenmayer systems, and includes code for chord transformations and voice-leading inspired by the work of Dmitri Tymoczko and other mathematical music theorists. I have been performing works composed with Silencio at conferences and festivals for several years.

Please note, some full-scale examples for Silencio may be found at https://github.com/gogins/gogins.github.io.

The original version of Silencio is written in the Lua programming language, and runs best on Mike Pall's marvelous LuaJIT/FFI. The current version of Silencio is written in portable JavaScript because that makes more capabilities (audio, MIDI, animated 3-dimensional graphics, video, proper mathematics typesetting, symbolic mathematics, etc., etc.) available to Csound than any other programming environment.

Thus, for the most part, only the JavaScript version is currently under development, although I will fix bugs in the Lua version. If and when WebAssembly becomes an accepted standard implemented in major Web browsers, I will port Silencio to WebAssembly, probably by updating my CsoundAC C++ code base which is the inspiration for Silencio.

Both the Lua and the JavaScript versions of Silencio are designed to be used with Csound as part of a computer music "playpen" for rapid, iterative composition and development without functional limitations:

  1. Stand-alone Csound on Windows and Linux: Lua version.

  2. CsoundQt front end for Csound on Windows and Linux: Lua and JavaScript versions.

  3. Csound for Android: Lua and JavaScript versions.

  4. csound.node for Windows and Linux: Lua and JavaScript versions.

  5. Csound for PNaCl: Lua (I think) and JavaScript (for sure) versions.

Currently, the environments I recommend for musicians are csound.node running in NW.js on the desktop, and Csound for Android for mobile devices.

News

29 October 2016

I have deprecated this repository. It will remain as is indefinitely. Please use https://github.com/gogins/gogins.github.io.git, specifically the csound/silencio subdirectory, where all further development will be done.

12 October 2016

I have added a WebGL-based 3-dimensional, zoomable piano roll score display to Silencio.js. And I have re-organized this repository to make it easier to understand and use.

Tarmo Johannes and I are working to update CsoundQt to use the Qt SDK's QtWebEngine for HTML rendering and JavaScript in place of the Chromium Embedded Framework, which will simplify the code and bring CsoundQt with HTML5 to OSX and Linux as well as Windows.

2 August 2016

I am now hosting some examples of pieces and code that use Silencio at https://github.com/gogins/gogins.github.io.

25 August 2015

I have now ported all of Silencio, including all of ChordSpace except the chord space group, from Lua to JavaScript. As time permits and projects demand, I will probably port selected parts of other people's algorithmic composition code to JavaScript. Tendency masks are one candidate, Xenakis sieves are another. This is to support my project of integrating HTML and JavaScript with Csound for a complete, self-contained "playpen" for computer music composers, especially for algorithmic composition.