Cpwitz Contributions


#8

Ping: WaitSync Timeout, disconnecting now
Disconnect request
Control transfer failed: -7

@thetechnobear
Some light why this happens?
Cannot have 8 voices - Axo and LPK on same (reliable) USB HUB.


#9

Just for FIY, I tested 8 voices here too and it works :smile:


#10

so you are saying you get 8 voices when connect via device port (e.g. usb keyboard) but not when its connect via the host port? and does the patch stop playing, or your disconnect the UI?

well if the patch is 'right on the edge', then these is a possibility of any extra processing could 'tip it over the edge'
midi din vs midi device vs midi host are all slightly different code lines, or perhaps your LPK25 is sending a few more messages, at a higher rate?

if the UI is just disconnected, sometimes this can happen due to a little extra load when the patch starts, which means the UI times outs, but the axoloti patch itself is running fine.

all that said, Ive not had a chance to play with this yet, so the above are just ideas.

generally, Id say, always leave a little headroom on patches... as even if they work today, there is a possibility a firmware upgrade in the future might 'tip the balance'.
of course the opposite is possible that future versions are more efficient, so you will gain some headroom, to play with later, and that point you can add more voices.
but thats just the way I would play it...


#11

ups.. its the other way around,
LPK > AXO USB host - I can have the 8 voices
if going thru Axo device port (EigenD or Ab Live > Axo) patch compiles, but soon note is pressed:

Ping: WaitSync Timeout, disconnecting now
Disconnect request
Control transfer failed: -7

But thanks for explanations :wink: patch is at 89%, simply just lowering 1 voice and works %78


#12

cpwitz/synths/half-wave-synth.axp

status: active

A little synth experiment inspired by Ploytec's little πλ² (or PL2) box. It produces mostly "squary", chiptunesque sounds but also fat and bassy brassy square pads.

A single wavecycle consists of two pulse half-waves. The pulse width of each half-wave can be modulated independently. The pitch of the second half-wave can be adjusted relative to the played pitch (fifths and octaves work well).

The "complex" mode lets the first half-wave produce amplitudes above zero in the positive range and the second goes below zero into the negative range.

The priciple can be observed on an oscilloscope (and sometimes the waves look nicer than they actually sound :grin:).

Manually modulating pulse widths. 2nd half-wave's pitch is doubled;

The same with "complex" setting:

1st half-wave's pulse width and 2nd half-waves pitch (x4) modulated with separate lfos:

The patch has a lowpass filter which can be envelope modulated.

Yes, there can be settings that produce lots of aliasing. But hey, chiptunes :smile:

And, as before, when the patch refuses to play, lower the polyphony (currently it's 6 voices).


#13

cpwitz/effects/fake-granuverb.axp

status: active

A granular sounding long-tail reverb tank. It's "fake", because it doesn't use any granular techniques. The incoming audio is randomly sliced into little chunks and fed into the left and right channel of the reverb tank. And furthermore the reverb's feedback loop can also be sliced into chunks or chunked into slices, if you like.

You can adjust the slicing frequency, probability and the shape of slices (a simple attack/decay envelope). The reverb tank has two delay lines with two taps each. You can set the amount of short and long delays. And of course feedback... lots of feedback.

Since it's easy to overdrive the delays with too much feedback or sustain, there's a compressor/limiter in the output chain to protect whoever is listening (and to keep the ringing tail sustained).

There's a "stereo-width" dial before the output to spread the delay lines between the stereo channels including a simple "haas" delay widening effect.

The patch uses about 30% CPU and operates on "audio in left".

I don't have the guts to put this patch into this month's Effects Challenge, because it has far to many parameters and I couldn't decide which of them are the five most crucial to have fun with.

Aaah, presets: I still can't get my head around axo's preset system, but I tried to give the patch two presets. Preset 1 is a long lasting grainy reverb and Preset 2 is more sliced and chunked (but also likely to explode).


#14

Hi There, I can't see your contributions although I resynced several times. I manually downloaded you Fake Grainverb and got this error:

java.lang.ClassNotFoundException: is-copy-enabled emoji-size-boost
java.lang.ClassNotFoundException: is-copy-enabled emoji-size-boost
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
at org.simpleframework.xml.strategy.Loader.load(Loader.java:50)
at org.simpleframework.xml.strategy.TreeStrategy.readValue(TreeStrategy.java:163)
at org.simpleframework.xml.strategy.TreeStrategy.read(TreeStrategy.java:102)
at org.simpleframework.xml.core.Source.getOverride(Source.java:360)
at org.simpleframework.xml.core.Factory.getConversion(Factory.java:207)
at org.simpleframework.xml.core.Factory.getOverride(Factory.java:139)
at org.simpleframework.xml.core.ObjectFactory.getInstance(ObjectFactory.java:63)
at org.simpleframework.xml.core.Composite.read(Composite.java:139)
at org.simpleframework.xml.core.Traverser.read(Traverser.java:92)
at org.simpleframework.xml.core.Persister.read(Persister.java:625)
at org.simpleframework.xml.core.Persister.read(Persister.java:606)
at org.simpleframework.xml.core.Persister.read(Persister.java:584)
at org.simpleframework.xml.core.Persister.read(Persister.java:543)
at org.simpleframework.xml.core.Persister.read(Persister.java:521)
at org.simpleframework.xml.core.Persister.read(Persister.java:426)
at axoloti.PatchGUI.OpenPatchInvisible(PatchGUI.java:1029)
at axoloti.PatchGUI.OpenPatch(PatchGUI.java:1042)
at axoloti.FileUtils.Open(FileUtils.java:149)
at axoloti.menus.FileMenu.jMenuOpenActionPerformed(FileMenu.java:251)
at axoloti.menus.FileMenu.access$200(FileMenu.java:49)
at axoloti.menus.FileMenu$3.actionPerformed(FileMenu.java:105)
at javax.swing.AbstractButton.fireActionPerformed(AbstractButton.java:2022)
at javax.swing.AbstractButton$Handler.actionPerformed(AbstractButton.java:2348)
at javax.swing.DefaultButtonModel.fireActionPerformed(DefaultButtonModel.java:402)
at javax.swing.DefaultButtonModel.setPressed(DefaultButtonModel.java:259)
at javax.swing.AbstractButton.doClick(AbstractButton.java:376)
at com.apple.laf.ScreenMenuItem.actionPerformed(ScreenMenuItem.java:125)
at java.awt.MenuItem.processActionEvent(MenuItem.java:669)
at java.awt.MenuItem.processEvent(MenuItem.java:628)
at java.awt.MenuComponent.dispatchEventImpl(MenuComponent.java:351)
at java.awt.MenuComponent.dispatchEvent(MenuComponent.java:339)
at java.awt.EventQueue.dispatchEventImpl(EventQueue.java:761)
at java.awt.EventQueue.access$500(EventQueue.java:97)
at java.awt.EventQueue$3.run(EventQueue.java:709)
at java.awt.EventQueue$3.run(EventQueue.java:703)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:86)
at java.awt.EventQueue$4.run(EventQueue.java:731)
at java.awt.EventQueue$4.run(EventQueue.java:729)
at java.security.AccessController.doPrivileged(Native Method)
at java.security.ProtectionDomain$JavaSecurityAccessImpl.doIntersectionPrivilege(ProtectionDomain.java:76)
at java.awt.EventQueue.dispatchEvent(EventQueue.java:728)
at java.awt.EventDispatchThread.pumpOneEventForFilters(EventDispatchThread.java:201)
at java.awt.EventDispatchThread.pumpEventsForFilter(EventDispatchThread.java:116)
at java.awt.EventDispatchThread.pumpEventsForHierarchy(EventDispatchThread.java:105)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:101)
at java.awt.EventDispatchThread.pumpEvents(EventDispatchThread.java:93)
at java.awt.EventDispatchThread.run(EventDispatchThread.java:82)

Any Idea what this might be?


#15

Its in the library... lets not complicate matters (I suspect you have got a corrupted download when taking it from github)

(btw: I'm assuming your on 1.0.8, it will not open with anything prior to this)

so , sync library,

then you have to open patches using the file menu, not via the object browser. (yes, next step is to add a patch browser)

so file/ open patch, go to your axoloti home directory, then axoloti-contrib, then patches, then cpwitz/effects
and its there..

I just sync'd my library and found it first time.


#16

Ah ok it's there actually. But why are the other contribs available via the patch browser and this one not?

The fake granular verb sounds cool but the first delay taps are really audible which makes it feel more like a delay that diffuses into a reverb. Still great though!


#17

The other patches in the contribution library are saved as subpatches and can therefor be looked up via the browser. Regular patches has to be accesed through a reugalr browser.


#18

Ah that makes sense, thanks!


#19

cpwitz/osc/sine harmonics.axo

Easy organs! Made an object of things I wire and then copy&paste a lot.

Sine wave oscillator with 7 additional harmonics: sub octave, 2nd, 3rd, 4th, 5th, 6th and major 7th (2 octaves up). The intervals are pure intervals and not equally tempered.

The levels of each harmonic can be modulated separately.

One instance uses about 8% CPU.

There's a demo/testing patch under patches/cpwitz/synths/test-sine-harmonics.axp


Best approach for additive 'organ' patch?
#20

cpwitz/demux/demux smooth 8.axo

Smoothing 8 out demultiplexer (k-rate fractionals). Same as the factory "demux 8" but the output values can be smoothed exponentially with adjustable rise and fall time.

There's a demo/testing patch under patches/cpwitz/synths/test-sine-harmonics.axp


#21

cpwitz/lfo/tri.axo

Triangle wave LFO.

I really think for some modulations linear triangle waves are better suited than sines (for example for pwm or wave shapes). So I finally made one :smile:


#22

very good :wink: actually should go to factory/objects


#23

cpwitz/delay/tape-delay.axs

A pitch-shifting (when rate is changed) and saturating tape delay effect. Sounds like a cheap bbd.

You can toggle the output low pass filter and the saturation in the feedback loop. The low pass filter frequency is synchronised to the delay rate to make long delays (low rates) less aliased.

You really should turn on saturation and filtering for old-school crunch. A zero delay rate leads to no delay because no samples are taken with no rate!


#24

cpwitz/delay/triggered buffer.axo

The core object for the tape-delay effect. It's basically a circular buffer, triggered by every rising edge above zero on the trigger input (linear phasor is optimal).

Every rising zero edge a new sample is taken from the input and the oldest sample from the buffer is sent to output. Essentially, it's a tape loop with variable speed. There's no interpolation, so low rates get very crunchy and aliased.

The object needs a reference to a 32b table. The size of the table defines the range of available sample rates. The tape-delay effect for example uses a 2048 samples table.


#25

Stupid me! I was wondering about too heavy aliasing and then noticed that feeding the feedback back into the downsampling routine isn't really a great idea. And now there it is:

cpwitz/delay/triggered buffer feedback.axo

The same downsampling circular buffer but with internal feedback routing. Now we're talking.

For fancy experiments the old triggered buffer without internal feedback remains the same. I fixed the tape-delay effect with the new buffer, so it's much cleaner now.


#26

cpwitz/delay/tape-delay-stereo.axs

And here's a vintage lo-fi stereo tape delay. Good for scifi spaces and mellow choruses. The delay rates can be individually set for left and right channel. And there's a comb knob to adjust both together relative to each other.


#27

Hi tried both, this makes it sound a lot better thank you very much!

I'm trying to combine your delay with the sync engine of @SirSickSik here:

I tried to plug the output of the sync engine into the trigger of the triggered buffer object but it didnt work, no sound coming from the delay. Do you have any suggestions? It would be great to be able to tempo sync your tape delay, but also at a certain point break the sync and twist the delay time knobs to get that pitch effects.

This is the patch:
midi clock sync example tape delay.axp (20.4 KB)