> Any advice on approaching ChucK or something similar that might be more appropriate for someone terrible math and no programming background?
I'm going to point you to Sonic-Pi, which is explicitly designed as a tool for teaching programming. It uses a very simple language that translates pretty naturally to how music theory fits in my brain at least, but also can get extremely complicated in the long run, complete with MIDI/OSC support and some really robust concurrent programming techniques. The biggest advantage to something like Sonic-Pi is that you can start composing interesting things in seconds, even with no experience. Just fire it up and get coding.
I'm making collection of musical instruments for Android. I'm building it in Lua on top of 2D game engine. So far I have sampler, few ways of triggering notes (fretboard, honeycomb, drums) and realtime effects controlled with phone tilt.
Soon I'll release an update with more instruments and improvements and make a proper introductory post in this reddit.
Not sure what kind of programming you want to do, but Max (https://cycling74.com/products/max) is programmable and has a ton of features, including the ability to host VSTs and exchange midi, open sound control, and audio with other programs.
Pure Data is similar and written by the same author but much less polished. You can accomplish a lot of the same things as Max but it may require monkeying around with plugins.
The Synthesis Toolkit: https://ccrma.stanford.edu/software/stk/usage.html
I put together a synthesiser with JUCE and STK which I thought was on GitHub, I'll see if I can dig it up and see what happened to it.
I'm working on a STK engine which has C like interface (so it can go into a DLL) with a JavaScript engine hooked into it. Gives me the flexibility but works like you say.
Another consideration is ChucK: http://chuck.cs.princeton.edu/, I believe it is based on STK. Another language on top of a synthesis engine.
If you're not set on your choice of music programming software, then I recommend trying ChucK..
The software is simple, the language is easy to learn, and the documentation is all there (tutorial, examples, API spec, language ref, etc.)
You should check out Pure Data (http://puredata.info/), a modular based programming language, designed by Miller Puckette. Puredata is kinda like the open source version of max/msp. this is Puckette's book that explains a lot of classic synthesis techniques through experiments/examples conducted in Pure Data http://www.crca.ucsd.edu/~msp/techniques.htm
I'm a little late to the party, but I have made compositions using Markov chains, although this probably won't fix any of the concrete problems you seem to be dealing with. Instead of applying the Markov chains to the notes in a given piece, I applied it at the microscopic sample level. A first (or even tenth) order Markov chain will basically be static, but as the order increases, more concrete segments of the piece will appear. I increase the order of the chain from 1 to 100 in the following compositions:
https://ddx-10.bandcamp.com/track/stationary
The first sample is of me reciting the digits 0-9. It is interesting because the "silence" between the digits was basically indistinguishable by the program so the higher order chain turned into a random number generator.
I was able to get this other example to work by sending notes to ableton live: https://github.com/arirusso/midi-winmm/blob/master/examples/output.rb
However, I tried the Diamond Arp and did not get any midi notes out of it :-( Not sure what I am doing wrong:
require "diamond"
@output = UniMIDI::Output.all[8]
opts = {
:gate => 90,
:interval => 7,
:midi => @output,
:pattern => Diamond::Pattern["UpDown"],
:range => 4,
:rate => 8
}
arp = Diamond::Arpeggiator.new(138,opts)
chord = ["C3", "G3", "Bb3", "A4"]
arp.add(chord)
arp.start
GeoSonix can produce some very interesting music playing VST instruments in any VST host. www.geosonix.com (Disclosure: I'm the author of GeoSonix).
All the demos on my Vimeo account were account created with GeoSonix playing VST instruments: https://vimeo.com/user4679000/videos
GeoSonix is free and there's a tutorial in the GeoSonix documentation on getting started with the free version of the VST host muSynth.
GeoSonix also includes a harmony processor derived from the one in SuperCollider that you can use to constrain the music to any of a large number of predefined chords or scales.
Have you looked into http://tombaran.info/autotalent.html - it's written in C, but is the only open source autotune I am aware of. On a modern computer & browser with javascript JIT, or webassembly, it should work.
This is a big project, and people pay big money for autotune or similar software such as melodyne because the development costs are high.
You can do this by artificially adding low level noise and jitter to things like pitch and filter cutoff. I do this all the time in Csound using the jitter opcode. I haven't needed to use a VST in years, so I can't really answer your question. Sorry.