home.social

#saulang — Public Fediverse posts

Live and recent posts from across the Fediverse tagged #saulang, aggregated by home.social.

fetched live
  1. v0.5.7 adds the "a.l" ladder effect distortion at last, 2 years after I experimented with it.

    There were many things that seemed silly not to have, while adding the le, so I did all those other things first. Including frequency filter for audio generators in general, instead of placing a filter only inside the distortion.

    Now a line like this at the top of a SAU script sets a Sega MD-like sound:
    "S a.lC a.f2840 c.pf"

  2. #saugns v0.5.7 adds the "a.l" ladder effect distortion at last, 2 years after I experimented with it.

    There were many things that seemed silly not to have, while adding the le, so I did all those other things first. Including frequency filter for audio generators in general, instead of placing a filter only inside the distortion.

    Now a line like this at the top of a SAU script sets a Sega MD-like sound:
    "S a.lC a.f2840 c.pf"

    #LadderEffect #YM2612 #SAUlang

  3. Now the shortest script using PM (with 2 oscillators) in my language will be this:

    W[W]

    Or with self-modulation:

    W.a1

    Now to bundle up the new PD options in the coming v0.5.0 so that more than one can be written without requiring the " p." prefix for those after. They can go first, before an oscillator, in W[...] -- there's nothing else using that context.

  4. Now the shortest script using PM (with 2 oscillators) in my language will be this:

    W[W]

    Or with self-modulation:

    W.a1

    Now to bundle up the new PD options in the coming v0.5.0 so that more than one can be written without requiring the " p." prefix for those after. They can go first, before an oscillator, in W[...] -- there's nothing else using that context.

    #SAUlang

  5. I recently figured out that I have a clunky asymmetric clipper in my SAU language.

    The recipe is "A0.r+1[A0[...]]" to half-rectify the "..." -- where "A-1.r+1[A1/2[S a1/2 ...]]" avoids such clipping and is like just "...". In-between values like "A-1/3.r+1[A1/4[S a3/4 ...]]" clips only below -1/3 amplitudes, as in -(1/4)/(3/4).

    "A" makes DC offset. Same result is got using a square wave at 0 Hz and phase inside the positive half in place of "A", setting the number to amplitude "a".

  6. I recently figured out that I have a clunky asymmetric clipper in my SAU language.

    The recipe is "A0.r+1[A0[...]]" to half-rectify the "..." -- where "A-1.r+1[A1/2[S a1/2 ...]]" avoids such clipping and is like just "...". In-between values like "A-1/3.r+1[A1/4[S a3/4 ...]]" clips only below -1/3 amplitudes, as in -(1/4)/(3/4).

    "A" makes DC offset. Same result is got using a square wave at 0 Hz and phase inside the positive half in place of "A", setting the number to amplitude "a".

    #SAUlang

  7. Phase self-modulation a.k.a. "feedback FM" now added to / as "p.a" parameter for both wave and random line segment oscillators.

    I use stronger filtering than Yamaha did, trivial 1-pole + 1-zero filters both, allowing roughly twice the feedback without too much noise.

    Self-PM sawtooth-ifies all smooth noise types nicely. I made the level of self-PM sweepable and modulatable in turn.

    Straightforward implementation for random line oscillator, but ~4x slower than no self-PM code.

  8. Phase self-modulation a.k.a. "feedback FM" now added to #saugns / #SAUlang as "p.a" parameter for both wave and random line segment oscillators.

    I use stronger filtering than Yamaha did, trivial 1-pole + 1-zero filters both, allowing roughly twice the feedback without too much noise.

    Self-PM sawtooth-ifies all smooth noise types nicely. I made the level of self-PM sweepable and modulatable in turn.

    Straightforward implementation for random line oscillator, but ~4x slower than no self-PM code.

  9. Another change coming up, merging '{...}' subparameters (currently only used for sweeps) into '[...]' lists, where they come first.

    To make that work, modulator '[...]' lists when assigned, will be appended to the previous list, instead of replacing it. Unless a dash is written before the opening '[', for the old behavior.

    I'm thinking of further expanding list features -- assigning them to variables, concatenation more generally, and insertion of objects from list variables.

  10. Another #SAUlang #syntax change coming up, merging '{...}' subparameters (currently only used for sweeps) into '[...]' lists, where they come first.

    To make that work, modulator '[...]' lists when assigned, will be appended to the previous list, instead of replacing it. Unless a dash is written before the opening '[', for the old behavior.

    I'm thinking of further expanding list features -- assigning them to variables, concatenation more generally, and insertion of objects from list variables.

  11. Before I change focus to work on new features to , including a quest for some usable/concise way to do patterns/sequences/rhythms, here's basically how good/interesting I've got drumming.

    Pseudo-random rhythm, two beat types, bassy sound gliding around. (Uses saugns v0.4.1 features.)

    'bpm=280
    'strength=30
    Wcat f0[
    Wsaw f$bpm/240 a$strength*2
    ] p[
    Rxpe mvb f$bpm/120 a$strength*(240/$bpm)/2.r$strength*(240/$bpm)[
    Rcos mf p1/2
    ]
    ] a1/8.r1[
    Rcub mf f$bpm/120*2
    ] t60

  12. Before I change focus to work on new features to #SAUlang, including a quest for some usable/concise way to do patterns/sequences/rhythms, here's basically how good/interesting I've got drumming.

    Pseudo-random rhythm, two beat types, bassy sound gliding around. (Uses saugns v0.4.1 features.)

    'bpm=280
    'strength=30
    Wcat f0[
    Wsaw f$bpm/240 a$strength*2
    ] p[
    Rxpe mvb f$bpm/120 a$strength*(240/$bpm)/2.r$strength*(240/$bpm)[
    Rcos mf p1/2
    ]
    ] a1/8.r1[
    Rcub mf f$bpm/120*2
    ] t60

  13. I'm reworking the named available in my program (and ).

    Inspired by Donald Tillman's suggested waveform palette ( till.com/articles/wavepalette/ ), I made a set of 3 waveforms in-between his mellow and bright, too.

    My "catear" waveform adding even harmonics happens to look like stylized cat ears on a cat's head. It's made by adding sine and my "mellowtooth" all-harmonics type, then subtracting the all-odd-harmonics type (blue, square root of sine, below).

  14. I'm reworking the named #waveforms available in my #saugns program (and #SAUlang).

    Inspired by Donald Tillman's suggested waveform palette ( till.com/articles/wavepalette/ ), I made a set of 3 waveforms in-between his mellow and bright, too.

    My "catear" waveform adding even harmonics happens to look like stylized cat ears on a cat's head. It's made by adding sine and my "mellowtooth" all-harmonics type, then subtracting the all-odd-harmonics type (blue, square root of sine, below).

  15. I've put up a page with some new examples with rendered audio to listen to, CC0 licensed. sau.frama.io/examples.html

    It's going to grow over time; the latest addition to it is the "Noise-on-noise" section (basically about a simple way to use noise to shape noise).

    Features allowing new kinds of will be showcased there. There's still much I find missing in my language and program, and I'll only add these kinds of examples as they become possible with short scripts.

  16. I've put up a page with some new #SAUlang examples with rendered audio to listen to, CC0 licensed. sau.frama.io/examples.html

    It's going to grow over time; the latest addition to it is the "Noise-on-noise" section (basically about a simple way to use noise to shape noise).

    Features allowing new kinds of #sounddesign will be showcased there. There's still much I find missing in my language and program, and I'll only add these kinds of examples as they become possible with short scripts.

  17. I've now released v0.3.12 of (sau.frama.io), which fixes old bugs and refines old features. It's meant to be the last version with only normal oscillators.

    Following another insane git rebase marathon, the new version does away with some code, and splits out a static C library for the implemented.

    Next, to add the new signal generators from the (otherwise less usable) "mgs0.1" branch mentioned earlier.

  18. I've now released v0.3.12 of #saugns (sau.frama.io), which fixes old bugs and refines old features. It's meant to be the last version with only normal oscillators.

    Following another insane git rebase marathon, the new version does away with some code, and splits out a static C library for the #SAUlang implemented.

    Next, to add the new signal generators from the (otherwise less usable) "mgs0.1" branch mentioned earlier.

    #scriptinglanguage #audioprogramming