Dan Bricklin wrote a JavaScript spreadsheet engine around 2008 https://github.com/DanBricklin/socialcalc. I extended it and adapted it to Drupal CMS around that time https://www.drupal.org/project/sheetnode.
HN user
ksr
Watching Rome burn and cheering.
There are several ways that I discover new music. They are all intentful and do not rely on automatic recommendation or randomness:
- Following the trail of session musicians involved in albums that I like. For example, I've had great pleasure discovering Justin Adams' albums from his work with Robert Plant.
- Following the trail of record producers
- Browsing through albums of a given label that puts out albums I like
- Browsing by geographical area / time period. I love the Radiooooo UI https://app.radiooooo.com/
- Getting specific recommendations / playlists from friends or web people I trust
I think there are many options between music streaming and reverting to 70s technology for music discovery.
As an avid listener, I've been assiduously building a digital music library since the year 2000. I started buying physical CDs, mostly used and in bulk, only to find that they are an impossibly huge burden when moving countries, which I did twice in the intervening years. I slowly moved to digital by ripping everything I could lay my hands on to FLAC, doing my best to scan all the booklets into PDF along the way. I believe I'm mostly done with my local public library's CD stock - at least for the music that interests me. I dig deep in so-called world music and large collections like magazine compilations. I usually collect whole series and I have a soft spot for cover versions of important composers.
To host all this (around 10TB today), I am running a Synology server and I'm backing up the whole thing to Backblaze. Synology has helpful apps for all platforms that allow connecting and listening to the music. I am using an old tablet as music player, connected to portable speakers around the house. It works great!
It's been my pleasure to share music discoveries with my friends and family. What's missing is a very good way to navigate this massive library in the many dimensions of the music universe.
Asking here because I'm lazy to do my own research:
Are there music players that allow searching by credit? E.g. albums produced by Rick Rubin, or tracks where Justin Adams plays guitar. This kind of information is usually available on Discogs or MusicBrainz.
Will keep an eye, thanks!
Nice, I might try your API for my ISBN extractor / formatter at https://github.com/infojunkie/isbn-info.js
Right now, I use node-isbn https://www.npmjs.com/package/node-isbn which mostly works well but is getting old in the tooth.
Location: Vancouver, BC
Remote: Yes
Willing to relocate: No
Technologies: Web Audio, Web MIDI, MusicXML, C++, Emscripten, TypeScript and the full Web stack
Résumé/CV: https://blog.karimratib.me/assets/CV-KarimRATIB.pdf
Email: karim.ratib@gmail.com
I want to be hired to build Web-based music applications. I have very good experience in this domain, currently working on extending the open source music engraving engine Verovio with support for microtonality and better MusicXML import.
See my work at https://blog.karimratib.me/
I'm pursuing my vision of "music-i18n": Open source music software that works for microtonal music and worldwide musical cultures.
It's not a from-scratch effort, quite the contrary: I'm trying to tie in existing music standards (MIDI, MusicXML, SMuFL, MEI, etc.) and ensure that FOSS systems (MuseScore, Verovio, smaller components) implement enough of those standards to support music-i18n.
Sometimes, this also includes extending the standards themselves when they are not fully capable of representing some non-mainstream musical aspect. For example, MusicXML lacks the ability of representing multiple accidentals per note (whereas MEI does), which is a must for microtonality.
I started down this path around 2018, as a music player who got interested in arranging Arabic songs in a "Real Book" style. It opened a giant rabbit hole that I'm still far from having fully explored.
Now and then, I collaborate with other devs who are interested in adjacent topics. I would love to hear from some of you here!
As an entry point, I recommend checking out the "progress report" I wrote last October: https://blog.karimratib.me/2024/10/01/music-grimoire-progres... - I'm currently drafting this year's update. My main demo is at https://blog.karimratib.me/demos/musicxml/
1. Regarding naming of intervals, this has confused me for months, until I understood (or convinced myself) that there are in fact 2 different things that are called "intervals": intervals between tuning pitches (which is your first example) and intervals between scale notes (your second example). Thinking of them as different things (and calling them differently) has helped me a lot with modeling musical objects in scalextric. For example, tuning intervals in different tunings (12-TET vs. Pythagorean) can end up having the same logical interval name because they are approximating the same logical relationship between notes even though the physical frequencies are different.
2. sub-scales = what you call interval sequence.
If you don't mind, we can continue this conversation by email. Mine is in my profile on HN.
Thanks for your answer. To me, the thrill of modeling the rich and vast domain of music practices across the world is a never-ending source of joy and discovery. To answer your specific points:
1. In my own similar library (https://github.com/infojunkie/scalextric) I decided to pragmatically throw an exception if the transpose method is called on an untransposable scale... At the moment I'm not trying very hard to handle all the cases of transposability - I'm sure there's a mathematical object like a group or ring to describe such cases.
2. I'll read your code to understand better how you handle sub-scale sequences. I would like to revisit my own approach to start at the dyads (sequence of 2 tones plucked from a given tuning) and build up longer sequences from those. I think this would allow to distinguish between ascending and descending sequences in a natural way.
3. I've spent quite a bit of time with MusicXML, and some time with MEI as well.. Yes, neither format has a model for arbitrary tunings which is a glaring gap. MusicXML does represent the full set of visual accidentals (including custom SMuFL glyphs) as well as per-note decimal pitch alterations that can accommodate any cent value. MEI also represents a reasonably complete set of accidentals although it's a closed set, as opposed to MusicXML's open set of accidentals. MEI supports a few pre-defined tunings which also falls short of generality. In addition, MEI does not support per-note pitch alterations, which makes it even harder to represent anything outside the tunings that it pre-defines.
There's unfortunately little activity to update these formats to include general tunings. I'm having discussions in both communities, maybe you'd like to add your voice: https://github.com/music-encoding/music-encoding/issues/1167, https://github.com/w3c/musicxml/discussions/586.
4. I've also spent quite a bit of time on MIDI microtonality... There are 3 main approaches that I'm aware of:
a. MIDI Tuning System which maps the 128 MIDI notes to arbitrary frequencies.
b. Pitch bending which has the limitation that you mentioned above. MPE is essentially an organized methodology for reusing empty MIDI channels in a round-robin fashion for pitch bends and other controller effects.
c. MIDI 2 supports per-note controller settings out of the box, thereby superseding MPE.
My current focus is to create a MusicXML => MIDI conversion pipeline that supports arbitrary tunings, using Verovio as the MIDI conversion engine. I am of course "inventing" new MusicXML elements to represent these tunings and their mappings (and MEI elements too, because Verovio represents its own internal state based on MEI). My aim is to produce a MIDI version of the canonical Sagittal Example (https://www.sagittal.org/exmp/index.htm) from a MusicXML file.
Fascinating. I'm working on many adjacent pieces myself - my name for this whole initiative is music-i18n because I see it as the equivalent of adding software layers to support world languages and locales - in this case musical ones.
I am especially interested to hear your plans / thoughts about the following:
- Supporting non-ET tunings
- Supporting tetrachords and other scale building blocks (like Arabic ajnas)
- Importing/exporting MusicXML
- Exporting to MIDI
Thanks!
Cute UI! GitHub link of demo: https://github.com/gazs/canvas-atkinson-dither
That was the response I feared. Thanks :)
In case anyone is interested in the details, I am trying to infer the MuseScore MSCX format to ensure that my MusicXML => MuseScore generator at https://github.com/infojunkie/musicxml-mscx produces valid scores. I want to use all the supplied MSCX files in the repo https://github.com/musescore/MuseScore for inference.
Thanks, I'm curious to try this algorithm. I've been using https://github.com/no-chris/chord-symbol for many years with much success in my own iReal Pro to MusicXML converter https://github.com/infojunkie/ireal-musicxml. The author mentions that their source is "Standardized Chord Symbol Notation: A Uniform System for the Music Profession" by Carl Brandt and Clinton Roemer, published in 1976.
I use fs.writeFileSync:
$ node -e "fs.writeFileSync(1, Buffer.from('@'.repeat(128 * 1024))); process.exit(0);" | wc -c
131072You're uniquely positioned to comment on this, of course. Are there other music notation formats that do a better job (MEI, MNX, etc.) ?
I've been working with MusicXML as a consumer (and occasional contributor) in my own apps for a few years now, and my pet theory is that the _problem domain_ is so complex that any format will fall short of the universe of use cases - or become so cumbersome that its application to a codebase will forever remain buggy / incomplete.
Note to anyone hoping to export MusicXML from Finale into Musescore: Musescore 4's MusicXML import (and export) is horrendous. It has even regressed compared to MuseScore 3 which was already pretty bad soon as you started getting ambitious.
I'm looking to do the opposite: Given a melody in MusicXML / MIDI, generate an accompaniment "in the style of". Any pointers?
Living Colour, my favorites!
Location: Vancouver, BC Remote: Yes
Willing to relocate: No
Technologies: Web fullstack, audio, MIDI, MusicXML
Résumé/CV: https://blog.karimratib.me/assets/CV-KarimRATIB.pdf
Email: karim.ratib@gmail.com
I've been working for several years on web audio projects, including professional contracts. My personal projects in this space involve a fully open-source music sheet player, supporting automated accompaniment and non-western musical cultures. You can see my progress at https://github.com/infojunkie.
I am seeking part-time or full-time engagements to work in the web audio space.
Location: Vancouver, BC
Remote: Yes
Willing to relocate: No
Technologies: Web fullstack, audio, MIDI, MusicXML
Résumé/CV: https://blog.karimratib.me/assets/CV-KarimRATIB.pdf
Email: karim.ratib@gmail.com
I've been working for several years on web audio projects, including professional contracts. My personal projects in this space involve a fully open-source music sheet player, supporting automated accompaniment and non-western musical cultures. You can see my progress at https://github.com/infojunkie.
I am seeking part-time or full-time engagements to work in this space.
I recently watched the movie Black Girl (1966) which discussed the same subject but in colonial France https://en.m.wikipedia.org/wiki/Black_Girl_(1966_film)
You're saying this as if it were a good thing.
Simple technique and large quantities are often not compatible... Check out the work of Internet Archive Scholar at https://scholar.archive.org. Their code is open source https://github.com/internetarchive/fatcat-scholar
Does it trigger the same warning in Wayback Machine? Sorry I don't have Windows to check, but it might be good to alert the author.
Can someone explain to me, really slowly please, how to take an existing Python codebase such as https://github.com/infojunkie/mma and run it in the browser using one of the technologies mentioned in this thread? Especially, how to deal with filesystem calls that expect some files to be present in various folders. Thanks!
It's Kamu, not Kami.
I'm building a percussion PWA at https://github.com/infojunkie/drumkit. The main idea is to create a simple mobile-based app that can be used in live jamming situations (eg by plugging the mobile audio jack into a mixer). It's working well but I need help on the UX / graphics / branding side, so I would appreciate to hear from app designers. Thanks!
I use Isso https://posativ.org/isso/ on my blog https://github.com/infojunkie/blog, it was pretty easy to setup via docker.