What is an Array and why is it in the Grid? Bitwig Studio 3.2 Beta

Official support for: bitwig.com
RELATED
PRODUCTS

Post

https://www.youtube.com/watch?v=22_hYy0ND3Q
my silly attempt explaining the new "array" module :help:
Polarity Music (youtube) berlin, fhain, germany

Post

Thanks... now I at least have some concept of what the Array module does and can begin to use it. Useful video. Tweaking the audio explained better for me than the words.

Post

polarity-dnb wrote: Mon Apr 20, 2020 1:39 pm my silly attempt explaining the new "array" module :help:
It was great, as usual! Thanks :)

But I wonder, what practical uses other than mad sound-mangling it can have?

One idea I came up with, inspired by frequent feature request and your example, is a pair of Arrays could be used to capture MIDI pitch & gates from sequencer, then they could be replayed (via your MIDI out from Grid patch) slower or faster - MIDI clip time stretching can now be removed from to-do list ;) :D

The other would be some kind of granular delay, where 1st the Array (or bank of them?) would capture the original sound and then repeat it at set intervals with the playhead moving through the Array along a straight line, but modulated randomly ahead and back around that line? I don't even know if this is how granular delays work, but seems fun!

[EDIT: Ok, this wouldn't really work well as at audio-rate the Array will get written over 47 times at 48kHz project rate. Another feature request, then - make it (much) longer, at least 5s!)

Also, is the content of the Array saved with the project, i.e. can you fill it once with random data and then use it as a repeatable source of random numbers? That could be useful, but would also require some kind of indicator showing whether it's empty or full.

Gotta play with it :)
Music tech enthusiast
DAW, VST & hardware hoarder
My "music": https://soundcloud.com/antic604

Post

If you use a Saw Osc you can get a much higher sample rate than the LFO

Post

pdxindy wrote: Mon Apr 20, 2020 4:05 pm If you use a Saw Osc you can get a much higher sample rate than the LFO
It's not about sample rate, but the size of the buffer that's only 1024 'slots', so it has to be overwritten 47 times for 48kHz project to capture 1s of material. It's great for sampling oscillators (or slowly changing stuff), but not for sampling audio, which I thought it could be used for :)
Music tech enthusiast
DAW, VST & hardware hoarder
My "music": https://soundcloud.com/antic604

Post

pdxindy wrote: Mon Apr 20, 2020 4:05 pm If you use a Saw Osc you can get a much higher sample rate than the LFO
BTW, I don't think sampling frequency depends on which oscillator you connect to gate. I think it can be fed a constant value (i.e. always open) and it simply captures to currently selected slot what's on the input constantly. So actually sampling rate is a function of how fast "write phase" is changing.
Music tech enthusiast
DAW, VST & hardware hoarder
My "music": https://soundcloud.com/antic604

Post

As we could hear in Polarities video, it can be used to record and play back audio - though I don't think it's its main purpose.
One idea I already tried out: try recording a knob movement (one-bar write phase, steps determine the time resolution), then play it back later (one-bar read phase) and loop it -> if the tempo of the song changes, the recorded movement will be stretched accordingly (as its still a one-bar read phase)
Another idea: it should be possible to generate a random melody but simultaneously record it - and if its good you can press a button and that will loop the last N notes. Or play some notes on the keyboard, let the array store the pitches and then play them back in different (random) order.

Post

I could think of many fun things... we can build sample rate reduction like in bit crusher.
Probably we can "average" values, like fill 4 slots but only output the average of 4 slots.
Digital Filters use a number of past samples, some factors and compute the filtered value... may be we could construct our own filters... OMG, I have to spend time with this.

Post

Wavetable look up?
MI 'Grids' type drum sequencer?
X32 Desk, i9 PC, S49MK2, Studio One, BWS, Live 12. PUSH 3 SA, Osmose, Summit, Pro 3, Prophet8, Syntakt, Digitone, Drumlogue, OP1-F, Eurorack, TD27 Drums, Nord Drum3P, Guitars, Basses, Amps and of course lots of pedals!

Post

antic604 wrote: Mon Apr 20, 2020 4:42 pm
pdxindy wrote: Mon Apr 20, 2020 4:05 pm If you use a Saw Osc you can get a much higher sample rate than the LFO
BTW, I don't think sampling frequency depends on which oscillator you connect to gate. I think it can be fed a constant value (i.e. always open) and it simply captures to currently selected slot what's on the input constantly. So actually sampling rate is a function of how fast "write phase" is changing.
This ^^^ was wrong, sorry. It actually needs a "pulse" to record.
Music tech enthusiast
DAW, VST & hardware hoarder
My "music": https://soundcloud.com/antic604

Post

SLiC wrote: Mon Apr 20, 2020 7:02 pm Wavetable look up?
The resolution is too small :( With 1024 slots you can only record single cycle and you obviously need several (dozen, hundreds) of cycles for a proper wavetable. Besides, there's already sampler oscillator for that, I think?

I think it's meant to be used either to shape oscillators where short window isn't a problem or for slowly moving stuff, like - indeed - storing sequences, automation, etc.
Music tech enthusiast
DAW, VST & hardware hoarder
My "music": https://soundcloud.com/antic604

Post

I'm also not sure on how I'll use the array module, yet.
Maybe it helps to speak about it. What can we do with it basically. (And what can it do other modules can't)
- It can save values temporarily. They won't be saved with the patch (as far as I know). So not for wavetables in the first place (for that we have the sampler, as antic already mentioned, or the data module). So it rather might be for storing data that is input or generated in realtime.
- The stored data can be read out in different direction, speed or order. So it can be used for repitching, reversing, remangling of sequences.
- The readout (or maybe also interesting: the write position :D ) can be randomized completely. So it could be used as a limited collection of values (pitches, note lengths, ...) to select from.
- The recorded data doesn't get 'lost' as quickly as with delay modules. Just as a sample&hold as someone else already mentioned. But over a sample&hold module it has the advantage of having the data stored in a certain order (which is an additional information for each value). One could even use it as a two-dimensional array (N rows, M columns with NxM lower than 1024 ;) )

Post

One additional idea that I think would make working with Array simpler is that it would (for read & write phases) accept actual number of slot, instead of 0-1 (0-100%). For example if you set it to 4 slots, 1st slot is anything between 0-24.99%, 2nd at 25-49.99%, etc. That becomes more & more complex the more slots you want to use.

Also, imagine I'd like to have a remote knob where every increment "doubles" the output, e.g. at 0% of full turn it's 0, at 10% it's 1, at 20% it's 2, at 30% it's 4, at 40% it's 8, etc. That's perfectly doable now, but first you need to feed the Array those numbers, which ir pretty cumbersome - you need to attach 2x Value to Read Phase and Input and Trigger to Gate and punch in. Instead, it would be great if we could just type in the values for selected slot in some kind of pop-up or in Inspector. The same mechanism could be used to inspect the values already stored in the Array.
Music tech enthusiast
DAW, VST & hardware hoarder
My "music": https://soundcloud.com/antic604

Post

Feature-Request @ Bitwig :

sorry @antic604, I have read your post only after I wrote mine ... :-( And yes, I want the same :-)

I would love to have a "numeric array access index" to read from the array.
It could be a simple counter which is used "modulo # array slots" to access the array slots in a "ringbuffer" way, i.e. if the array has 100 slots and the counter is at 102 then slot 102 % 100 = 2 is used to read from.

With an array going by name "a", numeric counter "c", I could build:

( a[c] + a[c-1] + a[c-2] + a [c-3] ) / 4

where a[c] denotes the value of the array a stored in slot c.

This comes close to a simple "low pass filter", check out here: https://www.dsprelated.com/freebooks/fi ... ter_I.html

---
if not possible to change the array, then please provide a "numeric-to-percentag" module, which I can setup with a max numeric value which should be represented as 100%. The numeric values inbetween 0 and max should be interpolated in a way, that when the max vaule is equal to the number of slots in array that it fits perfectly...

Post

@ posts above, have you experimented with the "Normalize Range" option in the inspector? As far as I understand, without that option enabled, the array is read/written via a phase signal from 0-1, if not, it's read/written by an index from 0 to e.g. 15 (if you have 16 slots).

In conjunction with the Counter module, you should be able to achieve your use case above Peter?

Re: antic's suggestion for some way to manually type the values, yes I agree this would be useful. With no way to initialise the data set to something useful, you will always have to add some initial setup aspect to your patch to fill the array, or just use it for more 'live' sequencing ideas like Turing machines.

Post Reply

Return to “Bitwig”