Code Monkey home page Code Monkey logo

octavia's Introduction

Octavia

🎻 Event-driven multi-standard MIDI state-tracking library.

Made with ❀️ by Lightingale Community. Repository available on Codeberg, GitHub and GitLab.

Maintainability

What is Octavia?

The current MIDI landscape is a dumpster fire, at least in the FOSS world. Only proprietary software solutions respect existing MIDI standards, while the FOSS ecosystem largely ignores or even violates the conventions, with TiMidity as the single exception. Octavia, born out of being fed up by the existing antics exhibited by existing FOSS solutions, aims to reach full compliance with existing MIDI standards (MT-32, GM, XG, GS, GM2 and etc.), while exposing simple yet powerful interfaces for developers to build upon.

With Octavia, no longer will you worry about standard compliance. Just focus on building what's important, be it visualizers, state browsers, event routers or even realtime event translators, Octavia's got your back. Feel free to test Octavia's capabilities with all available demos.

Why Octavia over others?

  • Free, libre and open-source, under GNU LGPL v3.0.
  • Developed with Firefox and an open Web in mind.
  • Compliant to existing standards.
  • Behaves like a real MIDI module, doing most of the heavy-lifting for you.
  • Supports 8 ports, 128 channels, 512-voice polyphony maximum. More than you'll ever need.
  • Built-in support for multiple plug-in cards and tons of other devices.
  • Emits warnings when MIDI programming errors are spotted, reducing chances of faulty programming.
  • Available in JS (browser and Deno).
  • No modification required to run in hardened forks of browsers, like Tor Browser, Cromite and LibreWolf.
  • Wide support of bank mapping and bitmaps via midi-db.

Supported targets

Octavia offers support to a wide range of targets, most of them being either GM-compliant or having strong historical importance. Read the support page for more information.

To have a general idea of how MIDI is implemented, refer to the MIDI Implementation Chart and Supported SysEx instructions.

Dev talks

We've been hosting places to handle development discussions! If you don't have a GitHub account, or just prefer to report bugs or give suggestions in a more casual way, feel free to chat with us with links below!

Credits

Please read CREDITS.md.

API & more

Please read the documentation.

Examples

Please check out the /examples/ directory.

Contribute

You can help with Octavia's development, by doing any of the following, or more...

  • Test Octavia, whether under production environment or not.
  • Write anything utilizing Octavia's API.
  • Report any bugs you find.
  • Submit feature requests.
  • Participate in programming (read the docs for further info).
  • Reward the developers some donation.
  • Spread the word about Octavia.

octavia's People

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

Watchers

 avatar  avatar  avatar

Forkers

drkzrg gfhk-sdgm

octavia's Issues

Cambiare's keyboard design

The current design is much less legible for a person who has actually learned how to play a piano, compared to the keyboard in Cambiare alpha, which resembles real piano keys. In order to make the keyboard more legible, as well as taking technical limitations on Cambiare beta into consideration, I propose the following design instead:

  • Shorten the display length of each black key
  • Add an additional scale between E and F.

And here's what my proposal looks like:
cambiare_keys

Chord detection/ACMP switch

Draft ideas

  • Each channel/part has its own ACMP (accompaniment) state.
  • Codebase for chord support should be shared by both QY and PSR.
  • A switch for both QY and PSR to toggle between chord display and bitmap display.

SC55 Bitmap display SysEx command misinterpretation (Stop displaying bitmap shows blank for few sec instead)

Misinterpretation

There is an interpretation error for emulated SC display on the demo (https://gh.ltgc.cc/octavia/test/fakeSc.htm ), that the Stop displaying Bitmap command here is interpreted as Blank bitmap for a few seconds, where it should've stop displaying bitmap & immediately return displaying channel spectrums.

Samples

On my recording: https://odysee.com/@X0P1R4T3-33NSVREENMNT-0FFICIAL:f/TOPACK_Robbi985:6 Notice when the Octavia receives Stop displaying bitmap command, it shows empty bitmap until few seconds, instead of immediately going back to channel spectrums

On Robbi985's actual Roland SC88Pro: https://youtu.be/qrhnjT8MYWo?si=GAC9WMOoG9g6NbAJ the Stop displaying bitmap does indeed make the display immediately shows spectrum again.

The MIDI pack itself: https://odysee.com/@X0P1R4T3-33NSVREENMNT-0FFICIAL:f/TOPACK_Robbi985:6 which file was Manual Download at Robbi985.7z/SC88 MIDI/BPKM.mid. for the SC generator tool, it's in the other 7z file, SoundCanvas display tool.

MU Series LCD Color

Hi there!

It seems like the color of the fake MU LCD in Octavia is derived from how the screen appears in a photoβ€”

I've noticed that the display appears overly green when photographed, but is much closer to safety yellow in reality. It's a bit difficult to get an accurate photographic representation of the color, as it requires overriding the white balance toward red by quite a bit (making everything else look much too red hehe):

MU_LCD_COLOR

#C9E10A does a pretty good job of replicating the true color I think:

fakeMU_recolored

I compared on multiple devices (mac & windows) and this was the most accurate across all of them.
This is assuming that the color of the LCD is the same for all MU devices, as I only have an MU2000 to reference, but pretty sure they use the same panel.

XF Lyric detection

XF Lyric

Allow Yamaha's proprietary lyric detection (Not to be confused with standard Lyric nor Text data).

currently, there is no interpretation available with this XF data.

Samples:

Part of XF improvement
Related:

Extend Yamaha S & Motif compatibility

Add basic support for the following models:

  • Motif Classic (Motif 6/7/8, Motif-Rack)
  • Motif XS (Motif XS6/XS7/XS8, Motif-Rack XS)
  • Motif XF (Motif XF6/7/8)
  • S80
  • S XS (S70 XS, S90 XS)

Cambiare build 75d9469 crashes on Firefox

Cambiare build 75d9469 crashes Firefox randomly.

Tested on

  • Firefox Dev Edition 118.0b9: Reproduced
  • Firefox Stable 117.0.1: Reproduced
  • Firefox Beta 118.0b9: Reproduced
  • Firefox Nightly 119.0a1: Cannot reproduce Reproduced Cannot reproduce
  • Tor Browser 12.5.3: Cannot reproduce
  • Firefox ESR 102.15.0: Cannot reproduce
  • Firefox ESR 115.2.1: Cannot reproduce
  • Ungoogled Chromium 114.0.5735.198: Cannot reproduce

Reproduction

Firefox Dev Edition 118.0b9

Method 1

  • Open Cambiare
  • Load JayB - The Cleansing.mid through the "Open MIDI" button.
  • Load JayB - The Cleansing.opus through the "Open Audio" button.
  • Start playing, and wait for some time.

Method 2

  • Open Cambiare
  • Load JayB - The Cleansing.mid through the "Open MIDI" button.
  • Load JayB - The Cleansing.opus through the "Open Audio" button.
  • Switch between playing and pausing in relatively quick succession.

Method 3

  • Open Cambiare
  • Load JayB - The Cleansing.mid through the "Open MIDI" button.
  • Load JayB - The Cleansing.opus through the "Open Audio" button.
  • Switch between multiple display modes in relatively quick succession.

Attachments

Preparing for 1.0 release

As soon as version 0.5 got released, Octavia should start preparing for a 1.0 release. It's mostly to fix and revamp stuff without too many additions.

That being said, there still are some tasks planned for it. Would get updated occasionally.

  • Make the emulated screens part of the official release, and make them easy to integrate into other projects.

Full support for drum note exclusive ID

At least the IDs were fully documented on the Yamaha MU90 implementation manual and the NS5R manual. No data for Roland yet.

Implementation details from @JayB1988:

Exclusive group means only one sample of that group can sound at a time. For a hi-hat, this means that an open hi-hat gets stopped by a closed or pedal hi-hat.

Isolate part voice detection

Rewrite part type detection to respond to all cc0, cc32 and PC events. Should fix certain bugs present in certain modes, e.g. 05R/W, X5D and NS5R.

Direct video export from Cambiare

With html2canvas and canvas captures, Cambiare should allow video exports directly (slower). Or just set the parameters accordingly, and directly use the screen recording APIs (faster).

Cambiare natively runs at a resolution of 1920px by 1080px at 50 FPS. The video exported should be exactly that as well.

Not trusting the performance of JavaScript APIs in general, the feature should allow customized CFR video exports. May still require the end user to accelerate or de-accelerate the video files due to Web platform restrictions.

Libraries to look at: canvas-capture

GS receive channel 0x10 means "receive off"

When receive channel of a part on GS set to 16 (0x10), it means receiving for that channel is disabled entirely, instead of "channel 17". Crucial for correct CM-64 support.

Thanks @ValleyBell for sending the file, which helped spot the issue!

RPN/NRPN don't have values capped.

Currently there are absolutely no limits on what RPN/NRPN values can be send, so for example, if coarse tune is set to -64, it's stored as-is instead of -24.

Preparing for 0.5 release

Roadmap

  • Roland SC-8850
  • Channel type
  • XG EFX
  • GS EFX
  • AI2 EFX
  • KG Reverb
  • Windows XP (Chrome 49, Firefox 52)
  • Drum NRPN (MU1000 + SC-8850)
  • Drum setups via SysEx
    • XG
    • GS
    • NS5R (drum dumps are not included!)
    • MT-32
  • Name maps
    • General MIDI
    • 05R/W
    • X5D
    • QY100
    • MU90
    • MT-32
    • SC-88
  • Multiple keyboard visualization styles in Cambiare
    • Block
    • Comb
    • Piano
    • Line

Delayed features

  • MIDI routing (postponed to 0.6)
  • Drum note exclusive groups (#19)

X5D and 05R/W detection is flawed

X5D, 05R/W and AG-10 detection is flawed.
cc0 001 could not indicate 05R/W is being used, and there's no guarantee that AG-10's being used when all channels are either in cc0 056 or 062.

0.5.2 and 0.5.3 release: Polak is cute

The last release before switching the focus mainly to routing instead (0.6).

0.5.2: Cute Night

  • Yamaha DOC (Disk Orchestra Collection)
    • Voices
    • SysEx
  • GS reset device detection target (SC-55, SC-88, SC-88 Pro, SC-8850)
  • SC-88 mode device detection target (SC-88, SC-88 Pro)
  • KORG KROSS 2 PCG file direct import
  • S90 ES/Motif ES EFX support

0.5.3: OlenianRock!

  • KORG Trinity/TR-Rack support
  • Move font loading away from constructors
  • (optional) Support for hardcoded performance imports.
  • (optional) Implement animated bitmap as a part of basic bitmap behaviour.
  • #39
  • Rewrite screen channel range events to use port and range instead.
  • Unified basic bitmap behaviour in MU, QY and PSR

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.