gmoe / dsl-prototype

An embedded Scala DSL for expressive music composition. This was part of my MS in Software Engineering research.
MIT License
3 stars 0 forks source link

Potential features for v0.1 release #1

Closed gmoe closed 7 years ago

gmoe commented 8 years ago
gmoe commented 8 years ago

@gkthiruvathukal Please tack on whatever ideas you think are important, there's definitely stuff I am missing that I'm just not thinking of at the moment.

gkthiruvathukal commented 8 years ago

This initial list looks great.

gmoe commented 8 years ago

That's one checkmark down: e92f25403ca4cab05a3d727fe601370ac4ed232f. It's a mini-DSL for Xenakis sieves, which you can use to generate integer sequences using logic operators:

scala> 3`@`0 | 4`@`0
res5: rc.dsl.gen.sieve.package.Sieve = Union(Residual(3,0),Residual(4,0))

scala> res5(-10 to 10)
res6: IndexedSeq[Int] = Vector(-9, -8, -6, -4, -3, 0, 3, 4, 6, 8, 9)

If you're curious about use cases I would read the links in the initial comment; possiblities include rhythmic structures and melody lines. I might open the trait up later to generate non-integer (i.e. Pitch) sequences, but I'm not sure how I want to go about implementing it while maintaining correct spelling.

I want to start tackling the notebook implementation, but I'm not sure if I want to use one of the existing projects (Spark, Notebook, Zeppelin) or keep working on the Spray-based skeleton in the repo already. Spark-notebook and Zeppelin are nice but are very bloated, and the original scala-notebook feels a little clunky. Your thoughts, @gkthiruvathukal?

gmoe commented 8 years ago

Executive decision! Let's make our own stack, we'll need it for some of the ideas I have in mind like WebMIDI support and synced browser playback. Definitely keep the SNB file format though, or at least be able to export to it since every other project supports it.

This is definitely something I want your help on, and honestly I am not sure where to start other than reading the source of existing projects. Seriously, if you see something that should be changed or refactored just do it: this project isn't about me learning new things, it's making a product.