Code Monkey home page Code Monkey logo

composing.studio's Introduction

composing.studio

This is the code for composing.studio, a web application that aims to make music composition collaborative and accessible to everyone.


composing.studio

Rationale

Right now it’s possible to write music in a textual format called ABC, which works for transcribing simple songs + guitar chords, as well as some other pieces like chorales and folk music. It has some limitations, but not too many (someone has encoded a Beethoven symphony in ABC before!).

Here’s an example of an interactive editor built with ABC: https://editor.drawthedots.com/. The editor is not super user-friendly, but it showcases the utility and interest in this space.

We provide a friendly and intuitive web-based interface for editing ABC music notation, with syntax highlighting, live preview, audio playback, and real-time collaboration. Anyone can create a new collaborative session by entering our website, and they can share the link with fellow composers to work together and come up with new ideas.

Getting Started

This application is built using a backend operational transformation control server written in Rust, based on Rustpad, as well as a frontend written in TypeScript using React.

The backend server has support for transient collaborative editing sessions, and the frontend offers a collaborative text editor with custom Monarch ABC syntax highlighting, cursors, and live presence tracking. These parts of the application are connected by WebSocket communication.

On the frontend, we use the abcjs library to dynamically render sheet music from ABC notation and generate interactive playback controls through web audio synthesis.

To run this application, you need to install Rust, wasm-pack, and Node.js. Then, build the WebAssembly portion of the app:

wasm-pack build --target web cstudio-wasm

When that is complete, you can install dependencies for the frontend React application:

npm install

Next, compile and run the backend web server:

cargo run

While the backend is running, open another shell and run the following command to start the frontend portion.

npm run dev

This command will open a browser window to http://localhost:3000, with hot reloading on changes.

Contributing

This project is still in a very experimental phase. We're exploring different ways of allowing musicians to collaborate with each other in a global community. If you're interested in adding features or helping fix bugs, please reach out to us first by creating a GitHub issue!

We have continuous integration for this repository, which checks things like code style (Prettier, Rustfmt) and successful build (Docker). The current state of the main branch is continuously deployed to the production web server at composing.studio.


All code is licensed under the MIT license.

composing.studio's People

Contributors

brewedcoffee avatar ekzhang avatar vincenthuang75025 avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar  avatar

composing.studio's Issues

Create releases

Hello,

I'm adding your software to the newsbot for our open source music community https://chat.sonoj.org .

If you do github releases it will show up there. So maybe a good reason to do a release? :)

You are pure genius!

I just tried your composing studio on via your web site with the example provided:
https://composing.studio/groovy-angle-5252

It is pure genius.

You are a mozart of coding!

Congratulations and thank you so much!

You example was quite extnnsive and easy to understand. True brilliance on your part to make it so easy to use.

I small feature request. In your example you have violin 1 and 2. Is there any way to make the web browser actually select violin sounds for each of those parts? What instrument sounds are available with your web tool?

Thank you for listening.

Contributing..

Hey! I’m just reaching out to see if I can contribute to this project. I’ve worked in the music tech space for 8 years, primarily with Python / C++ / JS, but I’ve recently been learning rust and am looking for open source projects to contribute to. Let me know if you’re happy for me to get involved and whether you’ve got a roadmap/backlog I can pick up tasks from

Screenshots

Could more screenshots be added? Perhaps on windows or linux? And different functionality?

Thsi is mostly to get people interested. I only recently read it on reddit so ...

Support lilypond syntax

Hi, this looks very cool! Have you considered supporting LilyPond's syntax? I ask because most musical scores on Wikipedia and its sister projects (like Wikisource) are primarily written in LilyPond notation and having a real-time collaborative editor for that would be super cool.

And LilyPond has a abc2ly utility so you also can get ABC support through LilyPond.

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.