Smoosic

Github site | source documentation | change notes | application

Breaking change:

To build, use npm run build. Grunt is no longer required.

What is Smoosic?

We are approaching Smoosic 1.0 status! Many of the things I wanted to do with Smoosic are working to some extent.

Smoosic is highly dependent on the Vexflow engraving library, and especially its authors/maintainers @rvilari, @ronyeh and @0xfe.

See changes for changes, updates, initiatives etc.

There is a demo application that you can play around with that shows the capabilities.

What does it do?

Smoosic does the following things:

You can see all these in the demo.

Why?

People often ask on the VexFlow forums: how can you add an accidental to a note once it’s been rendered? The simple answer is that you don’t. If you add an accidental or something to your measure, it changes the location of all the symbols, so the whole measure has to be re-formatted.

There is no easy way to do this using VexFlow alone, because the object model used by VexFlow to do the rendering is not serializable. This is the original problem Smoosic is trying to solve, with the Serializable Musical Objects model. SMO data objects have their own representation and can be easily serialized (that’s what the ‘S’ is for), copied, changed programatically, and then re-rendered. This makes it easier to create a music application web UI.

How do I use Smoosic?

There are PEN/fiddles to help you understand and create your own applications:

But I just want to write music!

If you just want to use the application without any programming, there are some online instructions. The usage documentation is probably out of date, feel free to submit updates!

What’s new in Smoosic?

Midi input! Also, see the change notes

SMO library details

The music library is divided into parts:

SMO modules

  1. modules in the Smo directory form the core object model.
  2. data modules are the serializable object part. xform modules handle some common operations like changing note lengths and transposing. Other directories handle different forms of import/export.
  3. SmoScore is the top-level object for the SMO object model.

Rendering modules

  1. modules in the render directory handle rendering
  2. The main class that you will interact with when modifying the score is SuiScoreViewOperations. All interactions with the score can be accomplished through this object.
  3. Modules in sui directory do the SVG background rendring. modules in vex directory interact with VexFlow. Modules in the audio directory handle playback.

Configuration

  1. You can start an instance of the library or application by calling SuiApplication.configure(). This will initialize the global objects and resolve a promise when complete.
  2. The application takes a single argument: a SmoConfiguration object. This lets you define all the no-code customizable features of the library such as: initial score, key bindings, language, run mode, and UI element bindings.
  3. The mode field of the configuration object determines what mode Smoosic is running in. If running in application mode, the full UI will be created and the configuration expects all the UI elements. If running in library mode, only the view is started.

Future SMO

Things I am actively working on:

  1. Part extraction and formatting
  2. XML import and export improvements

Things I hope to be working on soon:

  1. UI improvements
  2. More rendering features

I’d like to help

I’d appreciate it! Even if you are not a programmer, if you are interested in music and this project, you can contribute.

  1. Submit bug reports.
  2. If you speak a language that is not English, you can help with translations.
  3. If you are a coder, you could help by adding features. It would be fairly easy to add things like string ornamentation, lines (8va, rit…. etc).
  4. If a designer or artist, or even if you just have good eyesight, the design could use some help. Some transitions in the menu/dialogs would be nice, some better-looking dialog components, better-centered icons, more icons.
  5. Also on the design front, accessibility. I have ambitions that Smoosic can be screen-reader friendly, even though the SVG won’t be. Aria tags on dialog components, that kind of thing.
  6. If you are a musician, you can contribute samples of your instrument. I can use them for instruments in Smoosic, for playback.
  7. You can write music to be used in Smoosic libraries.