Upcoming Tonecarver module: tcArpGen (in Beta)

Oops yes that did the trick - I missed that part :upside_down_face:

3 Likes

New versions available for Mac and Linux (thanks @pgatt !). Links available in original post.

1 Like

Is the panel Arp Algo mislabeled as Harm Algo?

image

1 Like

In this section, Key Stride CV input does not seem to do anything but the parameter knob does work. The ā€œArp Algoā€ CV input works.

1 Like

ahh, yes indeed. will fix. Thanks.

1 Like

Yes, good catch. Will fix.

1 Like

This is where I would typically suggest that someone write automated tests for their module. Of course having humans your testing works fine, too. One of the great things about writing software ā€œfor funā€ is that you can do whatever you want :wink:

2 Likes

Yes, I agree, automated testing is best practice, no doubt. Coding VCV is a side hobby for me and I just havenā€™t ramped up my environment yet to support automated testing, or building all 3 variants (Win, Max, Linux), etc. Just a matter of finding the time to dig in and get it doneā€¦

1 Like

nice! I think coding VCV is a hobby for most of us. Certainly for me. Since I am (was) my own boss here, I always used TDD. My test setup was kind of insane, but it let me debug the tests (only) under MS visual studio debugger, which I happen to know. The test program would build and run under linux, mac, and msys2, but then I would have to debug it under gdb or some other debugger that I donā€™t know that well.

I think I once counted in my repo and there were 60,000 lines of code, and a third of that was test code. Probably at work (where I am not the boss) the ratio is reversed - more tests code than ā€œrealā€ code.

2 Likes

Unit testing does not have to be automated. I only have one module, so it is a bit easier for me, but for each release, I pre-test via manual unit tests.

Even though I say I am testing tcArpGen, Iā€™m really seeing what all I can do by combining tcArpGen with my Meander module, including what all I can automate in tcArpGen via CV.

Iā€™m getting some really nice results, but as with all complex modules, tcArpGen is tedious to figure out, even with a manual. Mapping out the CV to parameter ā€œeigenvaluesā€ is a challenge. But, once done, I can sequence the sequencer, as I like to do.

oh, for sure automated tests are far from the only way to get quality. From what Iā€™ve observed Meander works quite well and is quite reliable. Frankly I as was hinting that @tonecarver was perhaps not delivering software of the qualify they might have desired.

Letā€™s keep it civil. These are beta versions provided for testing at the userā€™s choice.

2 Likes

Oh, gosh, Paul. I am being 100% civil here.

5 Likes

Just to clarify here, I think tcArpGen is a great module with many fairly unique capabilities and lots of user flexibility via the txt rules files and the procedural grammar. There are issues, but that is what beta testing is for.

L-systems in themselves are/is a very complex topic that I am still trying to understand. There are connections between L-systems and the theoretical work of Godel, Turing and Shannon and others (Mandelbrot, et.al.). Coming from a background in procedural graphics in game engines, this grammar and ideas appeals to me. .

3 Likes

Modern versions of Visual Studio will happily debug executables produced by MSYS2. If youā€™re using make dist then you need to comment out the strip commands, and for the best debugging experience you should replace -O3 with -Og in compile.mk.

1 Like

I had no idea - thatā€™s pretty cool! I just made test.exe directly in visual studio, but doing things as you suggest might have been easier.

Here is a 10 minute ā€œjamā€ demo I made at the conclusion of my testing of tcArpGen under Windows. No further bugs or issues were found.

For this demo song, Meander is providing a traditional 12-bar blues in Eb maj scale via Poly Ext. Scale to tcArpGen. For the song, Meander is providing the harmonic progression chords and bass to the mixer. The chords also go to tcArpGen and all other arpeggiations and harmonized melody are generated by tcArpGen set to use the arp-demo.txt L-System rules file.

I make use of a lot of tcArpGen parameter CV automation via Count Modula 8-1 Switch sending sequences of tcArpGen parameter CV eigenvalues that I mapped out manually. The following tcArpGen parameters are sequenced: Arp Algo, Direction, Arp Oct Max, and Arp Prob.

The song is entitled "A Tart Arpā€™ based on some somewhat surprising harmonizations that sound a bit discordant to me but I have not sussed it all out to see what that might be due to, if it is even real.

I like the results.

4 Likes

Nice!

Thanks for all the testing and feedback. I appreciate you for it and the module is better for it as well.

3 Likes

Iā€™m still struggling to understand tcArpGen use cases. What is the purpose of the Poly Out ports? What is coming out of those ports? When more than 3 harmony notes are specified in the rule file, where do they come out, since there is only H1, H2 and H3 mono outs? Am I misunderstanding ā€œharmonyā€? Are chords ever produced?

Sorry for so many questions. I can get interesting sounds out of tcArpGen, but, I do not understand well enough how the module works and what I should expect from output ports and how those relate to the rules file.

Thanks.

For me, tcArpGen provides a way to produce pleasant sequences that remain familiar without becoming repetitive. My most used controls are the probability controls to manage the output density, the octave controls to vary the output range, and the time controls to sprinkle in some tempo variation. And, I almost always have the delay controls offset from each other to produce hocketed output.

Good questions. This deserves a whole section in the yet-to-be-completed manual.

The maximum number of notes that tcArpgen can produce at a time is four, consisting of one arp note and three harmony notes ($h1, $h2, and $h3 in the rules file). Poly out is four channels; channel 0 is arp, channels 1, 2, and 3 are H1, H2 and H3, respectively. Userā€™s choice as to whether to take the mono or poly output (or both!). Poly out and poly gate out can be sent to VCOs that accept poly in and poly gates, for example.

The delay positions determine which arp and harmony notes come out as chords. Notes whose delay positions are in the same column are output at the same time, thus forming a chord. If all 3 harmonies are active, the following delay configuration produces a 4 note chord:

image

The following configuration produces 2 chords.The first chord is Arp and H1 output together at the leading edge of the clock. The second chord is H2 and H3 output together half way through the clock cycle.

image

The following configuration produces each of the four notes at independent times. Maximal hocketing.

image

Here is a bit of a deep dive into how tcArpGen produces the harmony notes. Not required reading, but if you are looking to use tcArpGen in a more controlled and less generative way then it may help to know a bit about how the internals work. And, mea culpa, in tcArpGen an ā€˜intervalā€™ is used in a mathematical sense rather than a strict musical one (2nd, 5th, etc).

The active scale defines the intervals used by tcArpGen. A scale with tonic D and notes D G A has 3 intervals: interval 0 is 0 semitones from the tonic, interval 1 is 5 semitones, and interval 2 is 7 semitones. The octave controls replicate the scale notes across the octave range and the interval semitones are computed relative to the tonic note.

All output from tcArpGen is snapped to the current scale within the specified octave range.

The arp note is taken from the current step of the arpeggiated poly input. Each harmony note is generated by adding an interval to the current arp note. The specific interval to be added is determined by a few factors: the value of the harmony variable (represented by and affected by the $hx actions in the rules file), the number of available intervals defined by the active scale, and the current step of the harmony interval arpeggiator ā€¦

The $hx+ and $h- actions in the rules file allow the harmony index to increment or decrement beyond the number of intervals in the active scale. For example, if the scale is C D E F G, then the harmony index values are 0, 1, 2, 3, 4. A buildup of $hx+ actions that result in a harmony interval of 5 would overshoot the available harmony intervals. To prevent overshoots and undershoots tcArpGen runs three separate arpeggiators, one for each harmony interval note, that arpeggiate over the available scale intervals. (The arpeggiators can be up/down/converge/diverge/walk/random/etc ā€¦ any of the arpeggiator types that tcArpgen supports) A $hx+ action in an expanded rule sequence tells tcArpGen to advance the arpeggiator for the 'xā€™th harmony note. (A $hx- action steps the arpeggiator on step backward). The N action generates an arp note from the arpeggiated poly in, and generates up to three harmony notes, each based on the specific semitone offset indicated by the interval position of their respective harmony arpeggiators.

3 Likes