All Projects → AaronDavidNewman → Smoosic

AaronDavidNewman / Smoosic

Licence: other
A music notation editor written in javascript

Programming Languages

javascript
184084 projects - #8 most used programming language
HTML
75241 projects
typescript
32286 projects
CSS
56736 projects

Projects that are alternatives of or similar to Smoosic

verovio-humdrum-viewer
Verovio Humdrum Viewer
Stars: ✭ 26 (+36.84%)
Mutual labels:  music-notation, music-editor
mei-tools-atom
Package for the Atom text editor that provides on-the-fly music notation rendering for MEI with Verovio
Stars: ✭ 17 (-10.53%)
Mutual labels:  music-notation
Tabr
R package: tabr. Notation-based and tidy music data analysis and transcription.
Stars: ✭ 87 (+357.89%)
Mutual labels:  music-notation
musyn
Write music together, in real time.
Stars: ✭ 20 (+5.26%)
Mutual labels:  music-notation
Libmusicxml
A C/C++ library to support the MusicXML format.
Stars: ✭ 108 (+468.42%)
Mutual labels:  music-notation
Spontini
A text-combined-with-graphic music editor for creating professional scores with LilyPond
Stars: ✭ 43 (+126.32%)
Mutual labels:  music-editor
Abcjs
javascript for rendering abc music notation
Stars: ✭ 1,141 (+5905.26%)
Mutual labels:  music-notation
metrico
Font for metric equations in music notation.
Stars: ✭ 36 (+89.47%)
Mutual labels:  music-notation
ziffers
Numbered musical notation for composing algorithmic and generative melodies
Stars: ✭ 53 (+178.95%)
Mutual labels:  music-notation
smufl
Standard Music Font Layout
Stars: ✭ 41 (+115.79%)
Mutual labels:  music-notation
Abjad
Abjad is a Python API for building LilyPond files. Use Abjad to make PDFs of music notation.
Stars: ✭ 162 (+752.63%)
Mutual labels:  music-notation
Music Encoding
美 The Music Encoding Initiative schema and guidelines development repository
Stars: ✭ 129 (+578.95%)
Mutual labels:  music-notation
lyluatex
Alternative à lilypond-book pour lualatex
Stars: ✭ 46 (+142.11%)
Mutual labels:  music-notation
Gregorio
The Gregorio Project
Stars: ✭ 100 (+426.32%)
Mutual labels:  music-notation
Bravura
Bravura music font, reference font for SMuFL (Standard Music Font Layout)
Stars: ✭ 155 (+715.79%)
Mutual labels:  music-notation
Chordictionaryjs
🎸 A Javascript library for dynamic chord recognition, generation and graphic representation for any fretted instrument.
Stars: ✭ 69 (+263.16%)
Mutual labels:  music-notation
purescript-school-of-music
Port of the Haskell School of Music to Purescript
Stars: ✭ 21 (+10.53%)
Mutual labels:  music-notation
NegativeHarmonizer
A python tool to invert the tonality (a.k.a negative harmony) of midi notation
Stars: ✭ 23 (+21.05%)
Mutual labels:  music-notation
canorus
Canorus is a free cross-platform music score editor
Stars: ✭ 25 (+31.58%)
Mutual labels:  music-notation
scamp
a Suite in Python for Computer-Assisted Music [MIRROR of https://git.sr.ht/~marcevanstein/scamp]
Stars: ✭ 55 (+189.47%)
Mutual labels:  music-notation

Github site | source documentation | change notes | application

What is Smoosic?

See changes for potentially breaking changes related to vexflow merge. Smoosic is an open-source javascript/typescript music composition and rendering library that uses the VexFlow engraving library for the rendering component. There is also a demo application using Smoosic.

What does it do?

Smoosic does the following things:

  • Serialization and persistence of musical objects
  • Online, searchable music libraries
  • XML and MIDI import and export
  • parts, instruments, staff groups, transposition, voices
  • performant background rendering and asynchronous layout, pagination, line wrapping
  • SVG text editing for score text, chord symbols and lyrics
  • interactive user interface, mapping musical elements to UI components, mouse event binding, etc.
  • fully customizable UI elements (buttons, key bindings, menus, dialogs)
  • Real-time score playback
  • natural language translation, including R to L language support (music still goes from left to right :)

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 imrprovements

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.
Note that the project description data, including the texts, logos, images, and/or trademarks, for each open source project belongs to its rightful owner. If you wish to add or remove any projects, please contact us at [email protected].