I appreciate this very informative response. There is certainly a lot of overlap between the “compositionally motivated” and “mimetic” camps, especially from a historical perspective. It seems to me that the distinction rests largely in the hands of the user: do you use your FM synthesis to sound like a trumpet, or…to sound like a nightmare or a memory or an alien language? Following that tangent, is it more interesting to think about synthesis techniques in terms of what they do, as opposed to their originary principles? Whence the motivation to make standard/non-standard distinctions?

I can’t see the contents of Döbereiner’s paper, but the emphasis on composition sounds like it renders the technique in service of art or creative practice…whereas for me the beauty and relevance of this Segmod technique lies in the perceived intimacy with digital processes.

The term “microsound tracker” is great, by the way, and thank you @Cementimental for sharing.

2 Likes

judging from the clicks i hear when I skip thru it, it’s of course DC offset ‘silence’ ha :slight_smile:

1 Like

Ah ha! Good call - it’s actually a minute-long single cycle of a sinewave. Nice. :slight_smile:

2 Likes

As I am very lazy I decided to write a small DSL for segmod so I don’t have to type a lot. Main idea was that I can write something like:

[<short 1> <short 2>]*2

which would output short duration of index 1, short duration of index 2 and repeat that sequence twice:

1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
2 2 2 2 2 2 2 2 
1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 1 
2 2 2 2 2 2 2 2

The whole syntax is outlined in source README.md https://github.com/kfirmanty/wave-dsl
live demo is here: http://firmanty.com/wave/
Hopefully someone else will find this useable (I was also thinking of maybe also generating output audio file in browser?) and feel free to fork the project :slight_smile:

6 Likes

Instaparse :heart: Makes me wonder if we can squeeze segmod into webassembly and turn it into a web playground :open_mouth:

4 Likes

I think even if webassembly compilation would fail then the whole segmod source with includes etc. is around 300 lines long so it should be fairly straightforward to port? I haven’t worked before with creating raw audio buffers in JS but from the quick skim it looks like plain WebAudio AudioBuffer should do the trick. Another idea that I had for segmod extension was to allow users to draw waveforms which then could be used alongside inbuilt sine, triangle etc.
And if I had to chose my favourite Clojure library I think Instaparse would be the choice :smiley:

1 Like

I’m currently learning Rust, mostly for use with WebAssembly. Not sure if I’m already familiar enough with it to port the code, but sounds like a nice project for the upcoming days of isolation :slight_smile:

2 Likes

Almost done with the webassembly integration! Tomorrow morning I’ll do the last bit (playback) and hook it up to your DSL editor! :smiley:

3 Likes

Oh I think this would be very fun to do in Rust!

1 Like

Just took some time to listen through the compilation, really good stuff! I was actually quite surprised by the diversity of sounds, considering the restricted approach to sound design and composition.

I really like those snappy percussice sounds on FREQUENCIES III:

Does anyone have an idea how something like this can be done with segmod? The album description on BC says:

Here, all the used frequencies are octaves of one another. They are arranged in such a way that the sum of their wavelengths equals the wavelength of the lowest fundamental frequency used. This arrangement gives rise to a rhythmic structure that is indeed danceable, especially since beats repeatedly emerge whose timbre is strongly reminiscent of a bass drum.

Not sure what exactly this means though. Maybe some kind of multi-layer technique, mixing several individual tracks created with segmod? Also, at least some of the percussive hits sound like having a frequency envelope - I guess this could be emulated by continuously lowering the frequency of the waveform…

Fascinating stuff - just the kind of rabbit hole I’ve been waiting to fall into! :rabbit2:

Ok! I’ve managed to get the audio playback working! Now working on adding the missing features and adding wave-dsl in :smiley:

https://jellea.github.io/segmod

code’s here

Quick UI idea, inspired by Orca:

10 Likes

Nice work! :slightly_smiling_face: I really like the minimal UI design. Do you already have plans on how to implement it? Text editors can be quite a pain, even with sophisticated libraries like draft.js

This WASM port of Vim looks pretty interesting, seems like they are rendering everything directly into a HTML canvas. So no broken by default <textarea> here :wink: Haven’t figured out yet where the framebuffer’s data is coming from though…

twenty characters of appreciation of minimal UI idea <3 Now I am starting to think this would look really nice as terminal app built using ncurses or something similar :smiley:

2 Likes

Hah yeah that has crossed my mind as well. Would be fun with trikl, but I don’t know much about cross platform audio.

1 Like

This is absolutely wonderful. Endless gratitude!

2 Likes

This reminds me of how SID Wizard for the C64 handles ‘instrument tables’ by allowing you to switch between waveforms inside an instrument!

2 Likes

If I recall correctly one of the things that gave SID chip its distinctive sounds is that the fastest that any updates could happen (changing waveform, filter frequency etc.) was at TV refresh rate (so 50Hz for PAL region).

1 Like

UI is online and waveforms now also work, next up wave-dsl (so the two bottom left text areas part aren’t working yet) :slight_smile: Can’t wait to add a simple sharing functionality so we can start sharing patches :smiley: Oh and you can drag and drop different themes on using @neauoire’s theming system.

https://jellea.github.io/segmod/

7 Likes

I checked it again and I see that you already implemented sharing patches, that’s really cool!
I won’t comment on internals because I see that you are still working on it, but on UI side there is this weird thing that on safari the row with frequency, controls and scope has a height of 0. Setting flex-basis to auto for row class style fixes this.
And while we are on topic maybe someone could shed some light why following behaviour was implemented in css:
default values for flex are 0 1 auto but if you set it to single value like flex: 1 then the two latter values become 1 0 so effectively when you type flex: 1 you define flex: 1 1 0. That is totally not what I would expect. I would expect the values that were not defined to default to default values which seems to not be the case with flex-basis.

1 Like

Hi, thanks for porting this, looks awesome! :smiley:

Does this iteration produce sound or is it just a UI concept?
Can’t get any audio playback or download functionality to work. :confused:

Here’s my console output: image