Project Forks and Slugs?

More of a background project but interesting questions:

Ok, so I forked Formula by Frank Buss, it’s BSD Licence, so I guess that means I’ll have to make it print out the required copyright into its display to self parse an error, for fun.

So given that a PR might be the best way, and assuming too much radical change might get a PR rejected, it comes down to forked slugs. To keep and PR possibly, or to re-slug and hinder PRs due to source conflicts?

Is there generally an agreed on methodology for the community benefit?

EDIT:

  1. It’s not Frank’s fault. :smiley:
  2. The printing of the copyright. I would not need to do it for myself, but to assist in licence compliance if and when VCV made a binary distribution. I’m not sure of the legal standing or morality of not covering VCV with some sensical due diligence.
  3. Potential adopting of a Fork-Slug property so that a singular commit could be “cherry binned” to accept PRs, and assist in rack’s abilities of the future to group fork choices perhaps.
  4. Transcendental functions for compute SIMD on poly cabling? Not sure the drop in I/O model would be best.
  5. Like I said, it’s a incidental with wider implications.

EDIT 2: I’m not sure I’d keep the video effect second module.

  1. Although the shoulder surfer distraction from seeing the magic sauce making a gig sound nice might appeal, I’m not sure I can condone on board graphics doing effects perhaps limiting audio DSP bandwidth which restricts the module count of a patch. Personal choice.
  2. I already get enough xruns/under-runs when KDE/Wayland tries for a screenshot.

EDIT 3: Found copyright in: ~/.local/share/Rack2/plugins-lin-x64/FrankBuss so no edit of line 260 …

Happy Saturday

Also here’s a nice rack run script for KDE/Debian

#!/bin/bash
# define browser
BROWSER=chrome
# slow it down
renice --relative 10 $(pgrep "$BROWSER") || echo "Browser RT- ERROR!"
cd ~/Rack2Free/
# speed up CPU
powerprofilesctl set performance
# get desktop filename
WALLFILE=$(grep 'Image=' ~/.config/plasma-org.kde.plasma.desktop-appletsrc | head -n1 | cut -d '=' -f2)
# make a 1 by 1 pixel black dot and expand via GPU scaling
convert -size 1x1 xc:black black_pixel.png
# set desktop black for efficient memory spare for audio
plasma-apply-wallpaperimage $(realpath ./black_pixel.png)
# start rack with no monitor power save
kde-inhibit --power --screenSaver ./Rack || echo "Rack ERROR!"&
PID=$!
# wait a bit
sleep 3
# need sudo for boosting rack's processing priority
kdialog --title "Rack Realtime" --passivepopup \
"Increase Rack's CPU availability and priority?" 10
pkexec renice --relative -10 $(pgrep Rack) || echo "Rack RT+ ERROR!"
# wait for rack to exit
wait $PID
# restore wallpaper
plasma-apply-wallpaperimage ${WALLFILE#file://}
# hug trees
powerprofilesctl set power-saver
# maybe some website needs the process priority of the browser restored
# need sudo
kdialog --title "Restore Browser" --passivepopup \
"Process $BROWSER needs boosting back after Rack finished. No? :D" 10
pkexec renice --relative -10 $(pgrep "$BROWSER") || echo "Browser RT+ ERROR!"

A wallpaper serious one there from the little PC branch. :smiley:

Status so far:

  1. Forked and built locally
  2. Added and fixed @baconpaul CI build system (almost), no macos-12, needs 14 (for service), and Rack SDK gives a redirect 302 to a 404.
  3. Also permissions needed for release builds and nightlies.
  4. must change main to master but a release with no changes got made.

See jackokring/UnofficialFrank but then a PR will not work as the jackokring name check in the CI script will go crazy on PR, fix, PR, fix, …

Um, … this is maybe why it has to be a credited derivative work, or part of one.

EDIT: I’ve also parsed where the juice is:

FrankBuss Formula including print copyright as initial screen. Needed for valid BSD licence usage.
Add float function(float); stuff. Zero to two float arguments OK.
Line 34: src/formula/Parser.cpp.
Add unused letter vars to function(used letter); calls for variable address override.
Various lines: src/Formula.cpp.
Line 56, 64: “The Float” pointer address definitions.
Line 133, 142: Assign DSP process values to floats.
Line 149, 153: Evaluate recall variables. Formula class. Make another eval?
Line 191: Valid parsed variables.
Line 225, 234: Compile addresses for variables.
Line 260: Initialise to copyright?
Found copyright in: ~/.local/share/Rack2/plugins-lin-x64/FrankBuss so OK to leave line 260 alone.
Equal test transient restrictive.
Line 122: src/formula/Evaluator.cpp

OK, it’s building nightlies. Some initial .vcvplugin files had to be tagged in a manual release, and yes. It’s not official Frank product.

  1. I might remove the other module.
  2. I might re-slug. e.g. UnofficialFrank.
  3. The plugin might become a collection of spruced up goodies from various older open source plugins.
  4. How to licence a multi-licence collection? e.g. restrictions.
  5. How to make attributions in plugin.json ? e.g. Donate links.
  6. How to merge documentation?
  7. How to spruce up a consistent GUI UX across the set of modules? e.g. Surge-esque?
  8. Yes the phase p without modulo might f++ to +Inf, bug?
  9. c is for channel. Not cookie.
  10. Some of these are way more complex than the code.

So progress was looking good. Then a SEGFAULT Traced to Evaluator.cpp I don’t think I changed anything too drastically. Deleted the ->run(…); line in the loop, now it just SIGABRT in libc.so.6 with a tcache alignment error malloc thing. I haven’t used malloc. A curious case indeed. Maybe the vector used malloc ?

float Evaluator::eval()
{
	if (m_actions.size() == 0) return 0;
	m_numberStack.clear();
	printf("que: %d", (int) m_actions.size());
	for (int i = 0; i < (int) m_actions.size(); i++) {
	    // GDB say this line fails SEGFAULT
		/*
malloc(): unaligned tcache chunk detected

Thread 1 "Rack" received signal SIGABRT, Aborted.
0x00007ffff6aa095c in ?? () from /lib/x86_64-linux-gnu/libc.so.6
		 */
		// tried p 1 7 all single alphanumeric, so not variable specific
		// even commented the line that supposed gave an error
		//m_actions[i]->run(m_numberStack);
	}
	return m_numberStack.pop();
}

Basic crash on any single alphanumeric entered as formula, vector sized 1.

Yes! It’s alive. Now at 11 HP and a few extra features. I will alter the “look” a bit later, but tool tips for help.

Added sort of a polyphony count out select. In between the integers, it alters the variable m for some minor variation. All ports work modulo the polyphony out channel so 3 polyphony on an input will distribute 3 times on a 9 output.

EDIT: fixed c the channel to be between 1 and 16, as multiplying by zero is sort of a dead frequency option. It also makes c/m more unity maxing-ish.

Ok, fixed a few bugs (the 17 channels polyphony crash), etc. Removed sub(x) added s(fancy optimization using modff and scaling). Optimized some if statements out of the process function load, by predicates and multiplex reduction of rates (branch prediction cache loading). Added the classic #pragma GCC ivdep and other optimizations. It’s now got a polyphonic low pass filter (1-pole) relative in octaves to f the frequency, available as l (for the cutoff). Also has a FIFO que(x) and unq(i) for sub-expressions and channel crosstalk.

The panel is drawn from standard widgets and dynamic dark glowing text labels. The panel SVG is just simply for the name and logo. All parts laid out on a HP by U/2 grid in float. global micro adjustments applied.

The nightly is always up on a push, and contrary to the Nightly Build date, the assets are recent. Still no MacOS version. The Issues section is open for feature requests.

I’m going to dig in to the parse/evaluation code this afternoon.

So far 2.0.7 is up.

So that’s 16 channels of polyphonic sine plus parabolic ring modulated with a probabilistic exponential distribution. Not even in performance mode. But spiking quite a percent. Ah, a chaoscillator! Sounds quite varied? Also while stress testing screen capture and youtube audio in background with hidden 360p video. (Modtech on youtube. :smiley: )

The simd branch does not yet work, and has some decisions about how many copies of the random source it needs … blah, blah. It’s all on master.

1 Like