Something that made use of the synthesis technology waveform editor for sample prep would be awesome! I use it in conjunction with the IME piston honda, it makes previewing and selecting waveform for custom tables so easy.

I’m very here for it if you’re game ! were you thinking of a ugen or a desktop tool for loading onto norns ?

simple command line tool taking soundfile, producing new soundfile. so can be used from lua/SC via bash. since you may want to run this in realtime after capturing and saving a RAM buffer, speed and minimal interface are important. simple.

@coreyr WaveEdit seems like a fine creative tool for making wavetables. (though, it is limited because the ā€œbakeā€ routine assumes the data format of ST352, and 370 - 64 tables to a bank, 256 samples to a table.) i’m talking about a purely mechanical backend utility for preparing the output of a tool like that (or of arbitrary WT collections like adventurekid’s) for use with the WT UGens in supercollider.

1 Like

sounds super duper helpful @zebra

just figuring out the necessary resampling step would take would likely wind up taking me a while

1 Like

I’ve actually built a 4-wavetable ā€œvectorā€ style synth in SC that I’m hoping to port to Norns… I started with the Adventure Kid waveforms, but they’re all 600 samples long (ugh) so I ended up actually hand-tracing my favorites in WaveEdit.
The issue I ran into is even converting a 256-sample (or other size) to wavetable format in SC required a wacky workaround. I can post what I used, if you want. It seemed to me that most of the wavetable stuff in SC, at least in the documentation, is meant to use Wavetable.sineFill and not an external wavetable. [EDIT: I suppose I mean that external wavetables have always made SC grumpy for me.] If @zebra, @andrew or others come up with a brilliant workaround, I would love to use it to finish up this synth!

yeah it’s a definite pain point.

once you have a 2^N-sample soundfile, it’s doable. but it is pretty silly:

s = Server.default;
s.waitForBoot { Routine {

	// path to some mono buffer
	~path = "/home/emb/snd/AKWF-FREE/AKWF/AKWF_vgame/AKWF_vgame_0134.wav";

	// allocate memory on the server and fill it from the file
	~buf = Buffer.read(s, ~path);
	s.sync;

	{ ~buf.plot; }.defer;

	// stream the buffer to a FloatArray in the client using multiple `getn` messages
	// this is async, so the array is returned in a callback!
	~buf.getToFloatArray(action: { arg arr;
		// serious gotcha: wavetables must be a power of two!
		// the only way to deal with this is with resampling...
		// (would be nice if Signal had an in-place resampling method!)
		// for now, this waveform will have silence at the end! so it's not good.
		~size= arr.size.nextPowerOfTwo;
		~size.postln;
		~sig = Signal.newClear(~size);

		arr.do({|val, idx| ~sig[idx] = val; });

		// finally, convert to wrapped value-delta form for `Osc` &c...
		~wt = ~sig.asWavetable;
		//... and stream it back to the server!
		Buffer.loadCollection(s, ~wt, action: {
			arg wtbuf;
                        // notice that this is now weird looking
			{ wtbuf.plot; }.defer;

			/// now you can finally do stuff with `wtbuf`
		});

	});
}.play; };

one nice thing: in looking at Signal helpfile i found that the class includes in-place fft and ifft methods! so brickwall filtering for a multisampled synth could easily be done right there.

anyways, i think this proposed tool will help. it would take a soundfile of arbitrary length and end with another soundfile resampled to 2^N, and i guess already converted to SC’s wavetable format, so it can just be loaded directly to a Buffer on the server side. (it’s totally weird that SC’s Buffer can’t do the conversion directly and the data has to be streamed twice.)

3 Likes

ok here ya go

haven’t yet tested super extensively (particularly zero-crossing feature),
and really only on linux. (though macos should work fine; haven’t done windows.)

5 Likes

YEAAA :tada:

i’ll test it out thoroughly soon & report back if i have issues

1 Like

is it possible to stream mp3 from http into norns?

Looking at the SC MP3 class: https://github.com/supercollider-quarks/MP3

for example:

// (a) a stream URL - note the use of the second argument to indicate a remote stream
m = MP3("http://icecast.commedia.org.uk:8000/resonance.mp3", \readurl);

The locus sonus project has a fascinating live web field recording project, with live streams from locations all over the world: http://locusonus.org/soundmap/051/

it would be cool to tap into these and, for example, put the streams into softcut buffers.

edit: it seems there is a locus sonus client for pd, that will do: http://locusonus.org/pd/

7 Likes

Love this idea. Would love to see it in supercollider on norns too. I could see streaming/sampling other sources (internet radio, freesound.org, etc) being fun as well.

Also thanks for that locussonus link. The ā€œCUMIANA - LUISETTIā€ stream is wild.

1 Like

unfortunately as I understand it, libsndfile does not support mp3

1 Like

the quark above works by requiring LAME decoder to be installed.

if you’re ok with that kind of dependency, i would just do this by launching additional jack client (like ffplay) and connecting it to the ā€œengineā€ input ports to the mixer client.

1 Like

I know this is less cool but

I’d just use an audio cable from my phone

15 Likes

Hard to argue with a clunk click cable approach :stuck_out_tongue:

this (stretta’s ā€˜grainstorm’) please kthxbai.

seriously, though, if i thought i had a chance in Hades of making something like this with my current skill level, i’d be in there with both feet. as it is now, i have a variety of unrelated projects in the pipeline, so even if i thought i had the chops, it would be a while…

tldr; seems like it wouldn’t be that hard for someone who knew what they were doing. we already have SC granular thingies, softcut… originally this was designed with grid + endless encoders in mind… if someone does grab this and run with it, i’d politely ask that they keep us non-arc proles in mind and allow for using the norns encoders as well.

1 Like

Something along the lines of Ableton’s parametric EQ Eight would be a really handy thing to have, especially if you could run a tape recording through it.

image

2 Likes

What are the major differences in the way that grainstorm functions in comparison to say Mangl? Mangl

With midi cc mapped to an external controller you have access to play speed/direction, grain size, position randomization, etc. You may have have seen this already, but thought I’d point you there if not.

@coreyr; Tak! I’ll have a look.

any progress on this? I’m trying to build the same, wondering maybe if I can contribute to yours rather than try to do the same separately

check out the softcut studies— it shows how simple it is to do this! every looper is idiosyncratic, make yours weird!

1 Like