Giter Site home page Giter Site logo

bobbicodes / mecca Goto Github PK

View Code? Open in Web Editor NEW
168.0 3.0 6.0 99.41 MB

Animated music editor in Clojurescript/re-frame

Home Page: https://bobbicodes.github.io/mecca/

Clojure 5.90% JavaScript 94.03% CSS 0.03% HTML 0.02% LilyPond 0.03%
music-education composition sound chiptune-tracker mario-paint clojurescript web-audio-api web-audio re-frame

mecca's Issues

Prune "legacy" code

Because I started building this without really knowing what I was doing, and ended up trying out dozens of features before converging on an effective few, there remains much vestigial code (entire namespaces, even) that I feel would best be removed, saving it for future projects and refocusing this one on what it has become - a cute, multitimbral sample-based scrolling music editor.

This "legacy code" includes:

  • Western music notation components (currently only using the staff)
  • Numerous unused SVG components (characters, etc.)

Code related to features currently being worked on (MusicXML import, etc.) should be moved to separate feature branches.

Editor navigation buttons are "hidden"

One might not even realize they are there unless they happen to hover over it by chance. This was done for the purpose of keeping the UI clean, but I now think it was a bad idea.

Update to Web Audio policy change

...or, Resume AudioContext all the things.

A (sort of) recent change to the Chrome browser audio policy requires the Web Audio engine to be resumed once suspended if not explicitly started from within a user event.

We are currently dealing with this by resuming the AudioContext on certain events, if I recall correctly it is upon note entry.

This seems preferable to forcing the user to "Click here to begin" or the like, but this should be abstracted into a resume function that can be universally applied to other events that may have been overlooked. It will also make it more clear what it is doing.

Music data output missing

According to the readme the EDN data representing the song is output below Data-Robot. In the app currently however, there is no data nor Data-Robot.

This is not actually a complete lie - not only was it there at one point, but I had 2 different text boxes, one for EDN and one for MusicXML.

The best way to do this would be to add 2 buttons:

  • Save: Download a file to the user's machine containing the EDN data for the song
  • Load: Do the opposite. Validate data and swap into app-state.

While this is likely the optimal solution (and shouldn't be very hard), the way the system worked (before I broke it for whatever reason) was acceptable, where the song data simply sat in an editable text box that would update the app state upon validation. I think I want to just fix that first.

SVG "pixels" rendered funny on Firefox

This seems to have something to do with the edges. Check it out by looking at places with solid colors, like the white inside the instrument buttons or inside the transport control. On Chrome it blends together as a solid color, while in Firefox the "pixel" edges are visible. Not necessarily bad for this kind of thing, but just different.

Scripts 404 on https://porkostomus.github.io/mecca/

FYI some of the scripts used on https://porkostomus.github.io/mecca/ return 404:

dev-main.js:3 GET https://porkostomus.github.io/cljs-out/dev/goog/base.js net::ERR_ABORTED 404
(anonymous) @ dev-main.js:3
dev-main.js:4 GET https://porkostomus.github.io/cljs-out/dev/goog/deps.js net::ERR_ABORTED 404
(anonymous) @ dev-main.js:4
dev-main.js:5 GET https://porkostomus.github.io/cljs-out/dev/cljs_deps.js net::ERR_ABORTED 404
(anonymous) @ dev-main.js:5
2(index):12 GET https://porkostomus.github.io/cljs-out/dev/goog/deps.js net::ERR_ABORTED 404

Thought you might want to know, since it was just posted on Reddit: https://www.reddit.com/r/Clojure/comments/cx6km7/chiptune_tracker_8bit_music_synthsequencer_in/

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.