The answer is, it doesn’t matter at all what data store you use. I don’t think relational databases are a good fit, but if you like them then go for it.
For my own uses I just don’t see the amount of data getting to the scale where it won’t all fit easily in memory.
What I’m using is: an object definition that fits my needs
(
\name: "Ex 7: The Rhine",
\tempo: 80/60,
\key: \e_flat_major,
\transpose: 3,
\time_signature: [6, 8],
\parts: [
(
\midinote: [63, 58, 55, 58, 63, 65, 67, 63, 58, 63, 67, 68, 70, 67, 63, 67, 70, 75, 79, 75, 70, 67, 63, 58],
\dur: [0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25, 0.25]
),
(
\midinote: [[55, 63], [58, 65], [63, 67], [65, 68], [67, 70], [70, 75], [75, 79]],
\dur:[1.25, 0.25, 1.25, 0.25, 1.25, 0.25, 1.5]
)
]
);
each motive goes into its own file, named <something>_motive.scd
, in a folder.
Then I call this to load all the files into an array of objects (events)
PathName( foldername).files.select(~is_motive).collect({
|f|
f.fullPath.load
});
};
I can add motives, without changing anything else, I can filter them on key/time signature, tempo, instantly (there are only ever going to be a couple of hundred of these).
I’m going to have to add some more details to the objects, quant info for one, but it’s just a bunch of files.
But if you’re comfortable with mySql, say, then go for it. It honestly doesn’t matter. You’re going to need a way to enter and edit the motives, and a way to get them by feature. Whatever you use for that you’re going to end up with the same thing - an object with the information you need to do the thing you want.
My software development advice is: build interfaces. then build things that implement the interfaces. Then make the implementations more complicated only if you need to.
You want a system that allows you to query for (what I’m calling) motive information, and once you get that information you’re going to play it somehow.
Once you decide on the information, build something super simple that returns motive info - like something that just gives you a random motive, no matter what you ask for.
Then build a simple version of the “play motive” system you want (ASCII art and all). Then elaborate each of these systems as necessary.
The advantage of this is that you have two, independent, systems to work on, rather than one big complicated one. This makes it easier to collaborate with others (including your future/past self), and reduces the amount of information you have to retain in your brain while working.
Edit: the main advantage of this is that you get something working quickly, and you get to hear it, and see if it’s worth pursuing. And hopefully you get to spend your time on the bits that matter most