1. We're currently conducting systematic tests with the release version of macOS 11 (Big Sur) in order to offer full compatibility of our products as soon as possible. You can find our latest compatibility status - here


    Please note that although announced at the same time as macOS Big Sur, Apple Silicon processors are an independent release with separate compatibility concerns for NI products. Compatibility with macOS Big Sur will not yet ensure compatibility with Apple Silicon processors. At the moment, Native Instruments products are not supported on computers with Apple Silicon processors. Read more - here

    Dismiss Notice

New (old now ;-p) bytebeat synth "digit 8' uploaded to UL

Discussion in 'REAKTOR' started by colB, Feb 24, 2014.

  1. colB

    colB NI Product Owner

    Messages:
    3,458
    Hi Folks, Just uploaded my latest creation to the UL. Amazingly it's my first synth upload!

    Screen Shot 2014-02-24 at 02.31.44.png

    Digit 8 is an editor and processor for bytebeat expressions, heavily influenced by the '8-bit' synth in Caustic 3. I love the sounds and the pseudo-retro feel of bytebeat, also the fact that it's something new and different synthesis wise.

    Building this was quite a challenge. After lots of thinking and tinkering, I realised there was no way to do it other than build an editor, an expression parser and an interpreter, and Reaktor is not close to being an ideal environment for that sort of thing :). As a result, Digit 8 has no ternary operator, conditionals or assignment. Also missing are some of the more esoteric c and javascript syntax features that are occasionally used in bytebeat expressions (I really don't fancy trying to implement a complete recursive descent parser in Reaktor).

    This version doesn't have much in the way of error checking, so you may find bugs if you keep forcing it to process malformed expressions. If so, please post details so I can fix it.

    It should be pretty straightforward to use, all the non-obvious buttons and knobs have tool tips, so the only real trick is understanding how the expressions work. Fortunately, there is some good info available. Particularly helpful after you've got bored with the trial and error approach is this document: http://arxiv.org/abs/1112.1368 (click on the PDF link at the top right of the page).

    It would be great to build up a few banks of snapshots, so if you make any interesting ones, post them here, or upload a bank to the UL.

    cheers,

    colB
    (Colin Brown)
     
    • Like Like x 3
  2. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    This is amazing!
     
    • Like Like x 1
  3. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    I can't resist Ring Modulation, so I always check out possibilities with modules like this.

    I know I could probably just multiply two expressions together to get the same result, but anyway...

    Here's the simple-minded approach:

    Digit8-RM.png

    And here is a sample:

    http://www.arachnaut.net/Reaktor/Digit8-RM.mp3
     
  4. salamanderanagram

    salamanderanagram NI Product Owner

    Messages:
    3,446
    hmm i tried to make something like this and ran into some core compiler problems (ie, code worked, but took forever to open, even simple stuff...) nice work!
     
  5. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
  6. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    I find it easier to show the values of a and b - I can explore with them and then use the numbers in a hard-coded formula.
    Clipboard-1.png
     
  7. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    MIDI note 62 is controlling the Octave knob. I think you want to turn that off.
     
  8. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
  9. colB

    colB NI Product Owner

    Messages:
    3,458
    Yes, I hummed and hawed about that. I really don't like the look of the numeric displays, cant control font or colours etc. It really spoils the look, and doesn't even work for some values (eg. the P(hase) knob). Maybe I'll work on the B panel to have numerics and a few other bits and pieces for tweaking sounds.

    Thanks for the heads up, I'll check it out.

    Col
     
  10. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    I put some stuff in the ensemble structure and made it visible as shown below. I know you have a hidden display, but I like the scope.

    I added a display for 'a' and 'b' values as well as a knob for the input 'i' (-127..127).
    digit8.png
     
  11. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    The operator for complement '~' is not implemented. Some formulae I've seen use it.
     
  12. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    It may be interesting to have a switch that allow 't' to free-run.
     
  13. colB

    colB NI Product Owner

    Messages:
    3,458
    Hi Jim,

    t does 'nearly' free run. I did have a version where it could be limited to various bit lengths, but that was no good. AFAIR, the uploaded version still has that implemented, but it is hidden and set to maximum bit length anyway. So t wraps when it reaches 31 bit maximum. The current dev version has that scrapped, so the clock just wraps at 4294967295 ticks.

    I'll put ~ in there. maybe I'll ditch the 'i' button ? that way I still have a neat three rows of eleven buttons. If anyone really wants to keep the 'aux input' feature, I suppose the 'a' variable could have a switch to toggle between knob or aux input

    As far as the display, my current version has a dual display with a scope and a 'visualization' thing that shows the Sierpinski gasket type graphing of the expressions, But I'm not sure whether to leave it in. Maybe a separate instrument Like you have is the way to go - it looks good.

    I think I have a satisfactory solution for displaying the control values without compromising the look of the unit, just have to see how much hassle it is to implement.

    It'll be a while before it's ready, because I have to redo some of the gui graphics to accommodate the new two line 84 character edit window ;). The new version also sound better, because I re-wrote the pitch interpolation, now it doesn't act as a low pass filter. No need for an HQ switch any more.

    And anyway, I'm gonna hold off uploading until they fix that 44 year bug.

    Here's work in progress:

    Screen Shot 2014-02-27 at 21.52.14.png
     
  14. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    But doesn't t get reset on each note-on? It sounds like it does.
    I meant that t can keep on running despite notes being played.
     
  15. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    As for value displays, now that HQ is gone you can use that area for a merged value display element.
     
  16. colB

    colB NI Product Owner

    Messages:
    3,458
    Ah, I see what you're getting at. Yes, it gets reset each time you press a key. Won't be difficult to try an option to toggle that functionality.
     
  17. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    For some complex expressions, one may need to wait a while for t to reach a certain value.
    Also, one might want to just change the pitch without resetting t.
     
  18. colB

    colB NI Product Owner

    Messages:
    3,458
    FWIW, you can achieve the same result using ^-1, so until ~ is implemented, you can edit expressions that use it to get them working.

    e.g. ~(123*t) is the same as -1^(123*t)
     
  19. arachnaut

    arachnaut NI Product Owner

    Messages:
    3,046
    Oh yes, I had forgotten all my truth tables... (I had a minor in Logic, shame on me).
     
  20. colB

    colB NI Product Owner

    Messages:
    3,458
    Ok, I have a question about this free running clock business...

    Does the clock just run all the time without ever resetting, or does it only run when the gate is open, just without resetting on each note on?

    I guess the former is probably what you want, but it's more work to implement efficiently, so I want to be sure :).