home.social

Search

1000 results for “joelkp”

  1. I've written a blog article about the ladder effect distortion. This gathers more links and provides a summary of key things I've read.

    joelkp.frama.io/blog/dist-ladd

    *Edit* - Added some about ways to vary it from accurate emulation. This includes how to handle signals too quiet for the distortion-pulse to be present; it sounds bad to just have the pure signal then, when the real effect has silence due to quantization. I picked a middle-option between pure and silenced signal.

  2. I've added a third part to my online blog/articles about this audio value stuff. Recently expanded to cover random sawtooth (mainly interesting as ), and a different random jagged waveform with inharmonic distortion.

    Those are now in the stable branch, additional flags for R which can be combined with the other options.

    Implementing the new modes just requires handling pairs of noise values a little differently, for slope polarity and/or jaggedness.

    joelkp.frama.io/blog/ran-extra

  3. I've made a fast soft-saturated approximation .

    joelkp.frama.io/blog/ran-softs

    It's based on the Box-Muller transform, but changes it to:
    1) Map each 32-bit integer input to two "independent" 32-bit uniform random numbers.
    2) Use polynomials to transform those into the output, instead of sqrt(), log(), and sin() or cos().

    For audio, when bounded amplitude is wanted, I think it's better than a real Gaussian PRNG. It's also in saugns v0.4.0 (sau.frama.io/language.html#rasg).

  4. 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"

  5. v0.5.6 is out. The never-heard-of command-line synthesizer that makes audio a text/script file format.

    Added 1-pole frequency filter options, for each audio generator, as well as a script-wide mix filters option. Ignore them for no filtering. (More filter options are planned for later... This adds some tone control, but not yet proper support for subtractive synthesis.)

    (I haven't announced versions consistently here, but anyway...)

  6. 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.

  7. 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".

  8. I've added MIDI note number constants for frequency in v0.4.7. (It also fixes just intonation so changing key rotates scale ratios.)

    So now `W fM57` beeps at 220 Hz for example. And the note suffixes for flat and sharp, including quartertone (1/2 a MIDI number), can be used here as well.

  9. 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.

  10. Finally getting to adding a cli feature to pre-set and pass variables to numbers. Not difficult at all to implement, I just wonder about how details should look.

    This seems a keeper, non-overriding numerical assignment syntax:
    'name?=value

    But what if scripts are written to take an argument? There's no print feature in the SAU language. Rather than no warning or some auto-warning, I added this optional syntax for use near the top of a script:
    !$name

    Warns if it doesn't hold a number.

  11. v0.4.3 was released earlier this week, adding the N generator -- previously found (with less features) in an older development branch. "Ngw t10" for example now makes 10 seconds of plain Gaussian noise.

    It's low-hanging fruit, another thing for generating simple signals with my program. All the bigger goals for new features remain, with several old incomplete development branches, but with some steps toward redesign taken since the previous version.

  12. Here's a simple PM sound fading out, with 8x strength "ladder effect" on the carrier. The peak at the beginning lets the pure PM timbre through, then you mainly hear the added noisy timbre, which then morphs near the end.

  13. 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.

  14. In , for the time only in the `ladderesque` git branch, I've toyed with adding a distortion based on the Sega MD I "ladder effect" (iconic DAC hardware bug, crossover distortion).

    I based it on Aly James's old description:

    alyjameslab.blogspot.com/2013/

    But I made the dist signal level a freely set parameter (default 0.01 matches Aly's 0.02).

    Sounds bad for some sounds, blends in softly with some, and makes a few sound nicer. `Rlin` noise sounds rich, fresh with a level of 0.025.

  15. 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.

  16. 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

  17. 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).

  18. 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.

  19. I've created some Codeberg issues for planned features and design changes. No feedback on such yet from anyone, but may as well write it down...

    Only today did it become clear to me: In theory, reducing the number of script processing passes *and* doing as much as possible at the parser end of the program is not a mistake, it'll be best in the end if only I think my way towards solving each problem that comes up. I just need to think better than a decade ago.

    codeberg.org/sau/saugns/issues

  20. This sweep and modulator list syntax unification is in v0.4.2, released today.

    The idea for this change was simple, but it took years before it popped into mind. It's done and that's great, but sometimes I wish I found somewhere to discuss such language ideas, it could lead to more sooner. Usually no one has had anything at all to say beyond either indifference or simply finding my program a bit interesting to play with.

  21. I've experimented with making further kinds of simple musical scripts for my program, mainly one-liners shorter than 80 characters.

    It's easy to make algorithmic music that may fit 90s-style video games. Here's a one-liner background track, remarkably complex for having one voice and 3 ops only, using randomness for both timbre and "note" variation.

    /seed(2) Rlin f2 t60*4 p[Wmto r8.r64[Ruwh f1] a2]

  22. A new git repository for extra scripts for my program.

    The very simple Makefile uses saugns and sox to "build" MP3s from any new/updated scripts placed in any new/updated first-level subdirectory:

    codeberg.org/sau/extra-scripts

    A list of any (re)written MP3s is printed when running `make`, nothing if none.

    Done to clear out my old local files, and put them somewhere sensible, And to make it easier to make MP3s to add to the website. Maybe later, it will have nicer scripts.

  23. Recently, I've finally made good-sounding drumbeats using my program. Some new ones which sound good enough they could be used as-is in EDM. As drum examples are growing, I gave them their own example page...

    sau.frama.io/examples/r-drums.

    The new drums use amplitude modulation for simplistic envelopes. It's trivial to make beat-pairs where the 2nd fades in rather than out, familiar from music I listened to in the past, without using a real dynamics compressor.

  24. I've played around more with this violet binary noise pattern, and I think it's generally catchy for drumming.

    I used the tag before, but then wondered if my sound may have been too un-noisy for that. So here is a much noisier drum. (This can now be ran using the stable branch version of .)

    Rsah mt3 f200/5 p[Rxpe mvb f5 a200/4] t30

  25. Imagine you're in an alternative universe in which, when you flip a coin, if you get the same outcome twice, it's a certainty that the next time, it will be different. But if it differed, then you don't know if the last outcome will repeat or not. There are also runs of single and pair outcomes.

    This is violet binary .

    Here's random drumming using it for the pattern. This will be added to the next version.

    Wsin f200/5 p[Rxpe mvb f5 a200/5] t30

  26. Here's a script showing roughly how complex the sounds are which can be made using < 80 characters, with v0.4.0.

    'f=10/3
    Rcos mg f$f t60 p[
    Wsin r10 a4 p[Wsin r-2.r+2[Rlin mt p0/4 f20*$f]]
    ]

    (In the previous post, the user 'm' was 'mentioned' by accident -- due to the '@' in the script. On another note, this time I set an image.)