{"id":43881940,"url":"https://github.com/gogins/cloud-5","last_synced_at":"2026-04-05T08:01:11.871Z","repository":{"id":59197464,"uuid":"525879201","full_name":"gogins/cloud-5","owner":"gogins","description":"Complete browser-based computer music studio for algorithmic composition and live coding","archived":false,"fork":false,"pushed_at":"2026-03-26T15:14:15.000Z","size":641452,"stargazers_count":10,"open_issues_count":1,"forks_count":1,"subscribers_count":3,"default_branch":"main","last_synced_at":"2026-03-27T06:08:57.836Z","etag":null,"topics":["algorithmic-composition","csound","html5","music"],"latest_commit_sha":null,"homepage":"","language":"HTML","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"other","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/gogins.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null,"zenodo":null,"notice":null,"maintainers":null,"copyright":null,"agents":null,"dco":null,"cla":null}},"created_at":"2022-08-17T16:45:59.000Z","updated_at":"2026-03-26T15:17:00.000Z","dependencies_parsed_at":"2023-09-22T03:52:21.834Z","dependency_job_id":"a8010da4-182d-4f42-a8ae-018dbf2e5831","html_url":"https://github.com/gogins/cloud-5","commit_stats":null,"previous_names":[],"tags_count":15,"template":false,"template_full_name":null,"purl":"pkg:github/gogins/cloud-5","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogins%2Fcloud-5","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogins%2Fcloud-5/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogins%2Fcloud-5/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogins%2Fcloud-5/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/gogins","download_url":"https://codeload.github.com/gogins/cloud-5/tar.gz/refs/heads/main","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/gogins%2Fcloud-5/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":31428645,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-04-05T02:22:46.605Z","status":"ssl_error","status_checked_at":"2026-04-05T02:22:33.263Z","response_time":75,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"can_crawl_api":true,"host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["algorithmic-composition","csound","html5","music"],"created_at":"2026-02-06T15:39:04.957Z","updated_at":"2026-04-05T08:01:11.812Z","avatar_url":"https://github.com/gogins.png","language":"HTML","funding_links":[],"categories":[],"sub_categories":[],"readme":"# cloud-5\n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"\u003e\u003cimg alt=\"Creative Commons License\" \nstyle=\"border-width:0\" src=\"https://i.creativecommons.org/l/by-nc-sa/4.0/88x31.png\" /\u003e\n\u003c/a\u003e\n\u003cp\u003eAll musical, textual, and visual works generated or included here are \nlicensed under the \n\u003ca rel=\"license\" href=\"http://creativecommons.org/licenses/by-nc-sa/4.0/\"\u003e\nCreative Commons Attribution-NonCommercial-ShareAlike 4.0 International License\u003c/a\u003e.\n\n\u003ca rel=\"gnu\" href=\"https://upload.wikimedia.org/wikipedia/commons/2/22/Heckert_GNU_white.svg\"\u003e\u003cimg alt=\"GNU LGPL v2.1+\" rel=\"gnu\"\nstyle=\"border-width:0\" width=\"50px\" height=\"50px\" src=\"https://upload.wikimedia.org/wikipedia/commons/2/22/Heckert_GNU_white.svg\"/\u003e\n\u003c/a\u003e\n\u003cp\u003eSoftware components of this site are licensed under the\n\u003ca href=\"https://www.gnu.org/licenses/old-licenses/lgpl-2.1.html\"\u003eGNU Lesser \nGeneral Public License v2.1\u003c/a\u003e.\n\nBy interacting with this site or using its code, you agree that derivative \nmusical, textual, or visual works must comply with the CC BY-NC-SA license, and \nthat that derivative software must comply with the LGPL.\n\n## [Michael Gogins](https://michaelgogins.tumblr.com)\n\nThe cloud-5 system is a toolkit and library designed for creating computer \nmusic that is hosted on Web servers and that runs and plays in the user's Web \nbrowser. In theory, that can be any current Web browser, even on smartphones \nand tablets, although performance might be an issue on less powerful systems. \nFor examples of such music, see \n\u003ca href=\"https://gogins.github.io/\"\u003ecloud-music\u003c/a\u003e.\n\nThe cloud-5 system is based on \u003ca href=\"https://github.com/gogins/csound-wasm\"\u003e \nmy own WebAssembly builds of Csound and CsoundAC\u003c/a\u003e. Some pieces may use \nthird party libraries. The home page of Csound itself is \n\u003ca href=\"https://csound.com/\"\u003ehere\u003c/a\u003e.\n\nCode written as part of cloud-5 is licensed under the terms of the same \nlicense as Csound, the \n[GNU Lesser Public License, version 2.1](https://github.com/csound/csound/blob/master/COPYING). \nComponents and libraries used by cloud-5 come under a variety of open source \nlicenses; see the links to individual packages for more information.\n\n## Introduction\n\nThe cloud-5 system is designed for making sophisticated computer music purely \nin the HTML5 environment. The system is especially suited for pieces that play \nonline, for pieces that play indefinitely, for visual music, for algorithmic \ncomposition, and for live coding.\n\ncloud-5 runs on every system with an audio output that can run a Web server \nand a standards compliant Web browser. That includes _all_ computers \nrunning macOS, Linux, or Windows, as well as the more powerful smartphones and \ntablets. \n\nFor recent changes, see the _[Release Notes](#release-notes)_ at the end of \nthis document.\n\n## Getting Started\n\n### Pre-requisites\n\n - A Web server that will run from a configurable directory in which you can \n   read, edit, and write files. On most systems, the simplest way to get a Web \n   server is to install [Python 3](https://www.python.org/).\n   \n - A standards-compliant Web browser (currently, that includes nearly all Web \n   browsers). Should already exist on your system. On Android, install a Web \n   server app such as \n   [Phlox](https://play.google.com/store/apps/details?id=com.phlox.simpleserver).\n   \n - A text or code editor for writing your compositions. A simple text editor \n   should already exist on your system. I use \n   [Visual Studio Code](https://code.visualstudio.com/) myself, as it is very \n   powerful and yet easy to customize. On Android, install a text editor such as\n   [QuickEdit Pro](https://play.google.com/store/apps/details?id=com.rhmsoft.edit.pro). \n\n### Installation\n\nThere is no installation! \n\nSimply download the release (`cloud-5.zip`), and unzip it into an empty directory.\n\ncloud-5 can be stored on a USB thumb drive, and will run with all functionality \n_from_ the thumb drive. That makes it possible to carry all of your work in \nprogress from computer to device to computer.\n\nOr, simply copy the entire cloud-5 directory with all contents to your computer \nor device. Make sure you can execute, read, edit, and write files in your \ncloud-5 directory.\n\n### Configuration\n\nThere is no configuration!\n\nIf you have built cloud-5 yourself, cloud-5's Web root directory is \n`cloud-5/strudel/website/dist`. If you have downloaded the prebuilt cloud-5 \nrelease, the Web root directory is where you unzipped `cloud-5.zip`.\n\n### Running\n\n 1. Start a local Web server to serve the Web root directory. The easiest \n    way to do this on most systems is to open a terminal, change to the Web \n    root directory, and run `python3 -m http.server`.\n\n 2. Start your Web browser, and navigate to your cloud-5 Web site (usually \n    just something like `https://localhost:8000`). Some users have problems \n    with Firefox, e.g. with WebMIDI permissions. If you experience this, try \n    the Chrome browser.\n\n 3. The home page of the default installation is \n    [cloud_music_no_1.html](cloud_music_no_1.html). Verify that you see \n    animated graphics on this page, and can play and hear the piece.\n\n 4. Some cloud-5 pieces use the dat.gui library to create a popup menu of \n    controls for Csound instruments or other purposes. You can create new \n    presets, and you can get the Web browser to remember the current preset \n    parameters in local storage. If you need to revert to the hard-coded \n    parameters in a piece, clear local storage in the browser settings, or \n    in the browser's debugger.\n\n## Making Music\n\nIn cloud-5, musical compositions are written as Web pages, i.e. as .html \nfiles. \n\nIt's a good idea for each composition to be written as just one .html file. \nIt must end up in the cloud-5 Web root directory. Any Csound orchestra code, \nJavaScript code, and GLSL shader programs should simply be embedded in the \nHTML file, e.g. in template strings (string literals) in JavaScript code, or \nincluded as `\u003cscript\u003e` or `\u003ctextview\u003e` elements.\n\nThere are many ways to write compositions, because the capabilities of Csound, \nStrudel, and HTML5 are so vast. Start out by a making a copy of one of the \nexamples below, and edit it to suit your own purposes. \n\n### Tutorial Examples\n\nThese are pieces designed to show how to use the new architecture for cloud-5 \nbased on `cloud-5.js`, a library of resuable Web components that greatly \nsimplifies writing cloud music pieces.\n\n- [`cloud5-example-score-generator.html`](cloud5-example-score-generator.html): \n  a fixed-length piece with a score generated by CsoundAC, with an animated \n  piano roll display and audio visualization.\n\n- [`cloud5-example-parametric-lindenmayer.html`](cloud5-example-parametric-lindenmayer.html): \n  a fixed-length piece with a score generated by a parametric Lindenmayer \n  system, with an animated piano roll display and audio visualization.\n\n- [`cloud5-example-strudel.html`](cloud5-example-strudel.html): always-on \n  music produced by a Strudel patch, with audio visualization. This piece is \n  live-codeable.\n\n- [`cloud5-example-visual-music.html`](cloud5-example-visual-music.html): \n  always-on visual music produced by a GLSL shader that is sampled and \n  shaped using CsoundAC.\n\n### Other Things\n\n - [Strudel REPL](strudel_repl.html), exactly like the main Strudel Web site.\n\n - [CsoundAC Reference](jsdocs/), reference documentation for cloud-5's \n   JavaScript code.\n \n - A [minimal example](minimal.html) that just plays an embedded Csound piece.\n \n - A [Csound Player](player.html) that will play, and let you edit, any \n   Csound piece that you paste into the text area.\n   \n - [Message from Another Planet](message.html), a Csound piece with a basic \n   HTML user interface.\n \n - [Trichord Space](trichord_space.cloud5.html), an interactive piece that displays \n   Dmitri Tymoczko's chord space for trichords, with the ability to perform, \n   hear, and visualize various operations on the chords in the space.\n \n### Components\n\n - [Csound](https://csound.com/) version 6.18, one of the oldest and most \n   powerful sound programming languages, compiled for WebAssembly to run in \n   Web browers in [csound-wasm](https://github.com/gogins/csound-wasm).\n   \n - [CsoundAC](https://github.com/gogins/csound-ac), my C++ library for \n   algorithmic composition with Csound, compiled for WebAssembly to run in \n   Web browsers in [csound-wasm](https://github.com/gogins/csound-wasm), and \n   incorporating my implementation of mathematical theories of chord space and \n   neo-Reimannian operations, and scales and functional harmony, by \n   [Dmitri Tymoczko](http://dmitri.mycpanel.princeton.edu/).\n   \n - A collection of predefined Csound instrument definitions by me from \n   [CsoundAC](https://github.com/gogins/csound-ac/tree/master/patches).\n \n - [Strudel](https://strudel.tidalcycles.org/), a JavaScript port of the \n   widely used live coding system [Tidal Cycles](http://tidalcycles.org/), by \n   Alex McLean, Felix Roos, and others. \n   \n - Of course, a standards-compliant Web browser, which has an awesome set of \n   capabilities, including the most widely used programming language, \n   JavaScript, which can call Csound, CsoundAC, and Strudel.\n\n### Design Notes\n\nThe integration between Csound and Strudel has been implemented without any \nchanges to Strudel's source code. Instead, the Csound and CsoundAC APIs are \nexposed as global singletons in `globalThis.csound` and `globalThis.csoundac`. \nThese are copied into the Strudel REPL's JavaScript context, also as \n`globalThis.csound` and `globalThis.csoundac`. This is permitted because the \ncloud-5 Web site and the Strudel REPL's IFrame have the same HTTP origin. \n\nThe cloud-5 build copies cloud-5 pieces, examples, tests, documentation, and \nother resources from the cloud-5 repository's root directory (`cloud-5`) to \nthe Strudel submodule's Web root directory (`cloud-5/strudel/website/dist`) \n-- _after_ building Strudel.\n\nThis means that cloud-5 becomes a completely static Web site hosted from \n`cloud-5/strudel/website/dist`.\n\nIt also means that any Strudel patch can import or access Csound, CsoundAC, or \nany JavaScript or other resource in the Web root.\n\n### Capabilities\n\n - High-resolution, sample-accurate sound synthesis using one of the largest and \n   most capable libraries that exists for synthesis and signal processing, the \n   [Csound opcodes](https://csound.com/docs/manual/index.html).\n   \n - Interactive live music coding using the domain-specific, real-time music \n   programming language Strudel; this includes a neat animated piano roll \n   display of currently playing notes in the music.\n   \n - Control of Csound from Strudel. This includes both real-time notes \n   generated by Strudel patches for the `csound` and `csoundn` outputs, and \n   real-time control channel values created by Strudel Patterns, including the \n   new `slider` widget.\n   \n - MIDI input and output from Csound and Strudel.\n \n - Open Sound Control input and output from Csound and Strudel.\n   \n - Several systems for time-frequency analysis/synthesis, from Csound, including \n   Victor Lazzarini's \n   [phase vocoder streaming](https://csound.com/docs/manual/SpectralRealTime.html) \n   (PVS) opcodes.\n \n - Several high-fidelity sample players, from Csound \n   ([Fluidsynth opcodes](https://csound.com/docs/manual/SiggenSample.html#SiggenSampleSF)) \n   and Strudel ([superdough](https://github.com/tidalcycles/strudel/tree/main/packages/superdough)).\n \n - High-resolution, three-dimensional, animated computer graphics using \n   WebGL and/or OpenGL Shader Language (GLSL), from the Web browser.\n   \n - All of the staggering panoply of capabilities that are built into every \n   standards-compliant Web browser, see [HTML5 Test](https://html5test.com/).\n\n## Running in the Browser\n\n### Limitations\n\nThe major limitation of running in the browser is that csound-5 pieces are \nsandboxed, and can write files only to a temporary filesystem inside the \nsandbox. It is not possible to write soundfiles directly to the filesystem on \nthe user's computer.\n\nHowever, in some cloud-5 pieces, the Csound orchestra supports not only \nrendering to the sandbox filesystem, but also automatically downloading the \nfinished soundfile to the user's _Downloads_ directory. This done using the \n_Render_ button on the cloud-5 menu. However, the WebAssembly runtime sets a \nhard limit on the size of such soundfiles, which cannot exceed the size of the \nWebAssembly heap; pieces should probably not be more than about 10 minutes \nlong.\n\nIt is _also_ possible to use an audio loopback driver such as \n[BlackHole](https://github.com/ExistentialAudio/BlackHole) to route \naudio produced by cloud-5 to a digital audio workstation that _can_ write \nsoundfiles. The maximum resolution of such soundfiles is floating-point \nsamples at 48 KHz, significantly higher resolution than the CD format, and \nthere is no hard limit to the size of the resulting soundfiles.\n\nTo set this up on the Mac, open the Audio MIDI Setup app, click on the `+` at\nthe bottom, and click on Create Multi-Ouput Device, including both your \nstandard audio output and BlackHole. Then, in the Sound settings, select that \nMulti-Output Device as the default output. Finally, in your DAW or recording \nsoftware, select BlackHole as the audio input device.\n\n## Documentation\n\n - [My paper on the cloud-5 system](cloud-5.pdf).\n\n - [cloud-5 API reference](jsdocs/index.html).\n\n - [Strudel documentation](https://strudel.tidalcycles.org/workshop/getting-started).\n\n - [Csound reference](https://csound.com/docs/manual/index.html).\n   \n## Extending cloud-5\n\nYou can extend the capabilities of cloud-5 in several ways, including:\n\n - Write user-defined opcodes (UDOs) in Csound that you can `#include` in any \n   Csound orchestra.\n   \n - Write a custom JavaScript module that you can use in any .html file; it \n   must be served from cloud-5's Web root, i.e. `./my_file.mjs`.\n \n - Write code in another high-level language and compile it for WebAssembly, \n   so that it will run in any standards-compliant Web browser.\n\n - Subclass any of cloud-5's custom HTML elements, or create your own.\n   \n - Adapt for your musical purposes any other software that can run in a Web \n   browser and be controlled by JavaScript. That covers rather a lot of \n   ground....\n   \n## Contributing to cloud-5\n\n - Enter an issue in the cloud-5 GitHub repository: either a bug, or a \n   feature request. It should briefly describe what you are going to \n   contribute.\n\n - Make your own fork of the cloud-5 repository.\n \n - Make any contributions or changes in your fork.\n \n - Create a pull request in your fork. Reference the issue you have \n   created.\n \n - I will review the pull request, and I will probably merge it if it does not \n   break existing functionality, is in keeping with the general objectives of \n   cloud-5, and builds and runs for me.\n \nAvoid introducing new external dependencies as much as possible. Avoid \nintroducing new programming languages as much as possible. Do not load \ndependencies from content distribution networks (CDNs); all dependendencies \nused by cloud-5 must be static resources in the cloud-5 directory; \nthat includes a bundled version of Strudel.\n\n## Building\n\nIt's not necessary to build cloud-5 in order to run it, or to write new pieces \nfor it. But if you want to build it, the fundamental assumptions of the build \nare:\n\n 1. Absolutely no changes or patches are made to any code in the `strudel` \n    directory of this repository. The cloud-5 build invokes the Strudel build, \n    and once that has completed, the cloud-5 build copies pieces \n    and other files from the `cloud-5` root directory to Strudel's Web root \n    directory (`cloud-5/strudel/website/dist`), and renames some files.\n    \n 2. The end product is a static cloud-5 Web site in \n    `cloud-5/strudel/website/dist`. Once this site has been built, a composer \n    can simply drop new pieces (.html files) into that directory, and they \n    will run. At any time, this directory can be published as a public \n    Web site.\n\nThe actual build steps are:\n\n 1. Clone the [cloud-5 GitHub repository](https://github.com/gogins/cloud-5.git).\n\n 2. Install [pnpm](https://www.npmjs.com/package/pnpm), which cloud-5 and \n    Strudel use rather than npm. On macOS (I don't know about other platforms), \n    you may need to specifically install node@18.\n\n 2. Change to the `cloud-5` directory.\n\n 3. Execute `pnpm install` to update dependencies of cloud-5.\n\n 4. Execute `pnpm run setup` to bring in the Strudel submodule.\n\n 5. Execute `pnpm run build` to build Strudel and copy cloud-5 into \n    `strudel/website/dist`.\n\n 6. Execute `pnpm run local` to run a local Web site from your `dist` \n    directory.\n\n## Running in NW.js\n\nIt also is possible to run cloud-5 pieces locally in [NW.js](https://nwjs.io/) \nusing [csound.nwjs](https://github.com/gogins/csound-nwjs). In this \ncase, csound.node is a native addon for NW.js based on the Csound shared \nlibrary, and such pieces can load native code plugins and read and write to \nthe local filesystem.\n\nThis involves installing a number of pre-requisites, but the advantages \ninclude somewhat higher performance from native code Csound, the ability to \nuse native plugins (both Csound plugin opcodes and VST3 plugins), and the \nability to read and write in the local filesystem.\n\n### Installation\n\n 1. Install regular [Csound for desktop computers](https://csound.com/download.html).\n\n 2. Install [pnpm](https://pnpm.io/installation).\n\n 2. Install [csound.node](https://github.com/gogins/csound-nwjs). Note that \n    the API for csound.node is virtually the same as the API for my \n    WebAssembly build of Csound.\n\n 2. Install [NW.js](https://nwjs.io/). Be sure to install the SDK version of \n    NW.js.\n\n 3. On macOS, follow the instructions \n    [here](https://github.com/gogins/csound-nwjs/blob/main/README.md) \n    to disable the Gatekeeper for the nwjs app.\n\n### Running\n\nYou will need to create a `package.json` in the directory containing your \npiece, as a manifest for your piece as an NW.js app, in the following format:\n```\n{\n  \"main\": \"MyPiece.html\",\n  \"name\": \"MyPiece\",\n  \"description\": \"HTML5 with Csound\",\n  \"version\": \"0.1.0\",\n  \"keywords\": [ \"Csound\", \"node-webkit\" ],\n  \"window\": {\n    \"title\": \"MyPiece\",\n    \"icon\": \"link.png\",\n    \"toolbar\": true,\n    \"frame\": true,\n    \"maximized\": true,\n    \"position\": \"mouse\",\n    \"fullscreen\": true\n  },\n   \"chromium-args\": \"--enable-logging=stderr --v=1 --device-scale-factor=2 --allow-running-insecure-content\"\n}\n```\nThen, run NW.js with one parameter, the path to the directory containing \nyour `package.json` file, e.g. on macOS:\n```\n/Applications/nwjs.app/Contents/MacOS/nwjs /Users/michaelgogins/cloud-5/strudel/website/dist\n```\n\nNOTE WELL: Do _not_ overwrite the `package.json` file in the cloud-5 \nrepository root directory! That is required for building cloud-5.\n\n## Release Notes\n\n### [v2.1](https://github.com/gogins/cloud-5/releases/tag/v2.1)\n\n - Created `Cloud5Element` base class for defining new custom HTML elements \n   for the cloud-5 system. Elements derived from this can simply be included \n   on the page of a cloud-5 piece and will automatically register a menu \n   button and show/hide behavior.\n\n - Added `mandelbrot-julia.html`, demonstrating how to define a new custom \n   element for cloud-5. The piece enables interactive composition by exploring \n   the Mandelbrot set and generating scores from the Julia sets associated \n   with each point in the Mandelbrot set. This is a form of parametric \n   composition.\n\n### [v2.0](https://github.com/gogins/cloud-5/releases/tag/v2.0)\n\n - Moved cloud-5's Web root directory from `cloud-5` to \n   `cloud-5/strudel/website/dist`. This makes it possible to integrate \n   Strudel, Csound, and CsoundAC without any patches or other modifications of \n   Strudel source code.\n\n - Added one-time singleton creation code for Csound and CsoundAC to \n   `csound_loader.js`.\n\n - Simplified the integration of Csound, CsoundAC, and Strudel by ensuring \n   that Csound and CsoundAC exist as fully initialized global objects in the \n   JavaScript context (as `globalThis.csound` and `globalThis.csoundac`), \n   before any HTML elements run.\n\n - Updated documentation for running cloud-5 pieces in NW.js.\n\n - Many bug fixes:\n\n    - Enable editing in dat.gui text fields.\n    - Ensure that opening the _Controls_ menu does not affect the layout of other elements.\n    - Toggle showing piano roll/hiding shader with showing shader/hiding piano roll.\n    - Fixed logic for diagnostic levels in `statefulpatterns.mjs`.\n    - Removed _Record_ button and handler, and other dead code.\n    - Removed unnecessary files.\n    - Clarifed source code in `cloud-5.js`.\n    - Enabled rendering to soundfile in NW.js.\n    - Enabled running Strudel in NW.js.\n\n### [v1.1](https://github.com/gogins/cloud-5/releases/tag/v1.1)\n\n - Made a clearer distinction between the Web site serving showcase for \n   cloud-music pieces, and the README.md for the cloud-5 system.\n\n - Added a global menu with a curated list of better pieces.\n\n - Improved layouts to deal with presence/absence of global menu.\n\n### [v1](https://github.com/gogins/cloud-5/releases/tag/v1-beta)\n\n - Updated Csound, CsoundAC, and Strudel.\n\n - Edited README.md for clearer build instructions.\n\n - Added non-chord tones to `csound::Scale` when conforming notes to a  \n   Chord of the Scale.\n \n- Added [Polymetric](polymetric.html) piece.\n\n### [v1.0beta](https://github.com/gogins/cloud-5/releases/tag/v1-beta)\n\n - Added cloud-5.js, cloud-5.css, example pieces, and my paper on using \n   cloud-5. These greatly simplify writing cloud music pieces.\n\n - Various bug fixes ported from CsoundAC's Silencio score, used for the piano \n   roll display.\n\n - Updated Csound, CsoundAC, and Strudel.\n\n### [v0.2](https://github.com/gogins/cloud-5/commits/v0.2)\n\n - Added _Record_ and _Pause_ button to _Cloud Music No. 14_, for the user to\n download a soundfile that records the performance using Csound's `fout` \n opcode.\n\n - Updated Csound, [csound-wasm](https://github.com/gogins/csound-wasm), \n   and Strudel to current versions.\n\n### [v0.1](https://github.com/gogins/cloud-5/commits/v0.1)\n\n - Improved user interface and code organization in some pieces, making them \n   more usable as templates for newer pieces.\n\n - Improved documentation.\n\n - Updated Csound, [csound-wasm](https://github.com/gogins/csound-wasm), \n   and Strudel to current versions.\n\n - Pieces in cloud-5, including pieces using Strudel, can now also run locally \n   in [NW.js](https://nwjs.io/) using \n   [csound.node](https://github.com/gogins/csound-extended-node).\n\n### [v0.1beta7](https://github.com/gogins/cloud-5/commits/v0.1beta7)\n\n - Updated Csound to version 6.19.0.\n\n - Improved [csound-wasm](https://github.com/gogins/csound-wasm) \n   and the [Cloud Music No. 9](cloud_music_no_9.html) example to support \n   running either in NW.js with native Csound, or in Web browsers with \n   Csound for WebAssembly. This makes it possible to compose pieces \n   using Strudel that use native Csound, VST plugins, access to the local \n   filesystem, and so on.\n\n### [v0.1beta6](https://github.com/gogins/cloud-5/commits/v0.1beta6)\n\n - Introduced the CsoundAC `track` function, a variant of Strudel's `arrange` \n   that does not crash when the number of cycles for a section is set to zero \n   to silence it.\n   \n - Improved the CsoundAC `csoundn` output to send all control parameters \n   with names beginning `gi` or `gk` to Csound as control channel values; \n   these channels must first be set up in the Csound orchestra with the same \n   names.\n   \n - Added `cancyle.html`, a piece designed for live performance by doing a \n   modest amount of live coding during play.\n   \n\n### [v0.1beta5](https://github.com/gogins/cloud-5/commits/v0.1beta5)\n\n - Updated Strudel to get the extremely useful `slider`, which can be either \n   discrete or continuous. The `slider` is embedded directly into the Strudel \n   patch.\n \n - Added some code to `csoundn` that sends the value of any Strudel control \n   registered with `createParam` and whose name begins with `gi` or `gk` to \n   Csound as a control channel value. This also means that the new `slider` \n   widget in Strudel can send its value to the Csound control channel.\n \n### [v0.1beta4](https://github.com/gogins/cloud-5/commits/v0.1beta4)\n\n - Attempts have been made to correct the scheduling of the `csoundn` output \n   based on a trigger, and to get `csoundn` to output correct piano roll \n   events.\n \n - Put in diagnostic messages marked `sync` for testing.\n \n - Colorize notes in the piano roll that come from `csoundn`.\n \n - In `package.json` always make a releasable zip file in each build.\n\n### [v0.1beta3](https://github.com/gogins/cloud-5/commits/v0.1beta3)\n\n - Put in needed patch for `cyclist.mjs`.\n \n - Restored concatenated Strudel controls string in `csoundac.mjs`.\n\n### [v0.1beta2](https://github.com/gogins/cloud-5/commits/v0.1beta2)\n\n - Improved README.md/index.html.\n\n - Corrected broken links and incorrect credits in example pieces.\n\n - Replaced the favicon from Strudel with cloud-5's own favicon.\n \n### [v0.1beta](https://github.com/gogins/cloud-5/commits/v0.1beta)\n\n - This was the initial release.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgogins%2Fcloud-5","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fgogins%2Fcloud-5","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fgogins%2Fcloud-5/lists"}