https://github.com/bobbicodes/mario-music-composer
Classic SNES music sequencer in Clojurescript w/ re-frame and Web Audio API featuring MusicXML import, vector graphics, undo/redo and sharps/flats
https://github.com/bobbicodes/mario-music-composer
Last synced: about 1 year ago
JSON representation
Classic SNES music sequencer in Clojurescript w/ re-frame and Web Audio API featuring MusicXML import, vector graphics, undo/redo and sharps/flats
- Host: GitHub
- URL: https://github.com/bobbicodes/mario-music-composer
- Owner: bobbicodes
- Created: 2019-10-19T07:43:08.000Z (over 6 years ago)
- Default Branch: master
- Last Pushed: 2019-11-01T04:28:43.000Z (over 6 years ago)
- Last Synced: 2025-01-31T06:42:44.684Z (over 1 year ago)
- Language: JavaScript
- Homepage: https://porkostomus.github.io/mario-music-composer/
- Size: 31.9 MB
- Stars: 0
- Watchers: 1
- Forks: 0
- Open Issues: 0
-
Metadata Files:
- Readme: README.md
Awesome Lists containing this project
README
# mario-music-composer
Classic SNES music sequencer in Clojurescript w/ re-frame and Web Audio API featuring MusicXML import, vector graphics, undo/redo and sharps/flats
## Start local development server:
I use [Figwheel Main](https://github.com/bhauman/figwheel-main) with the [Clojure CLI tools](https://clojure.org/reference/deps_and_cli). Audio samples are fetched with [core.async](https://github.com/clojure/core.async), and while the app generally follows the [re-frame](https://github.com/Day8/re-frame) pattern, it still does lots of yucky stuff like perform logic in views, side-effecting event handlers, etc.
Oh and I'm still working on a proper note scheduling system. It currently just plays the entire song and there's no way to stop or adjust it once you press play...
```
clojure -A:fig -b dev -r
```
You'll need to change the line in `music.cljs` to point to the directory with the samples:
```
(defn load-samples []
(go-loop [result {}
sounds (range 1 27)]
(if-not (nil? (first sounds))
(let [sound (first sounds)
decoded-buffer (