Skip to content

A platform for programmatic, web-based musical creations.

License

Notifications You must be signed in to change notification settings

ben-denham/rhapsody

Repository files navigation

Rhapsody

noun. A free instrumental composition in one extended movement, typically one that is emotional in character - OED

Overview

Rhapsody is a platform for programmatic, web-based musical creations. You write ClojureScript code that utilises the WebAudio API to generate music through the browser.

Here are some examples of what you can achieve with Rhapsody: https://ben-denham.github.io/rhapsody/

Since each composition is contained within a webpage, you can add any kind of visualisation or interactivity to the page that you like!

You can publish your compositions through GitHub Pages (or on any other website) for others to listen to. If your code uses random or dynamic sources to generate music, then it may never even be played the same way twice!

Alternatively, you can use Rhapsody as an environment for live-coding.

By sharing the source-code of your compositions on GitHub, other musicians will be able to learn from how your music works, and use it to influence their own creations!

What do you need to know to use Rhapsody?

You should be able to follow most of the tutorials with minimal understanding of programming and music, but you will probably need some prior knowledge before you'll be able to build up full compositions of your own.

One of the goals of Rhapsody is to be a platform for programmers to learn more about music, and for musicians to learn more about programming. Ideally, more tutorials will be created for explaining musical and programmatic concepts through Rhapsody (contributions in this area are very welcome).

Working with Rhapsody involves programming with ClojureScript. If you haven't used Clojure or ClojureScript before, I would also recommend following one of the tutorials in the additional resources.

A moderate understanding of music theory will help with composing. You should at least understand the concepts of notes, durations, scales, and intervals. If you do not have much background with music theory, I would recommend looking at some of the additional resources.

You will be able to create simple synthesizers without any background in sound synthesis. If you would like to develop more complex synthesizers, I would recommend looking at some of the additional resources.

Documentation

  1. Environment setup
  2. Your first composition
  3. Publishing your compositions
  4. Creating instruments
  5. Composing musical phrases
  6. Visuals and interactivity
  7. Performance considerations
  8. Additional resources

Contributing

Contributions to Rhapsody are very welcome, whether it's a new function to help with music generation, an improvement to the structure of the project, or an example of some cool technique to add to the documentation.

Contributions to documentation in the form of tutorials or guides on programmatic or musical concepts are very welcome. Ideally, Rhapsody can become a platform for programmers to learn more about music, and for musicians to learn more about programming.

It might make sense for some contributions to be added to the projects that Rhapsody uses, but they can still be added to Rhapsody itself until they are accepted upstream.

Please make a pull request for code or documentation you would like to add to the project, or create an issue if you experience a problem or would like to request a feature.

Other projects

If you're interested in programmatic music generation, then you should check out these other projects (which are either used by or in some way influenced Rhapsody):

About

A platform for programmatic, web-based musical creations.

Resources

License

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published