Copy paste macro

dumbrabbit
dumbrabbit Member Posts: 22 Member
edited November 2022 in Building With Reaktor

So I've got three multi-displays to use that get sent to my sine bank, an additive synth, and when I draw on them, they sound as they are supposed to.

Are there any resources that teach about manipulating multi-displays? I would like to be able to copy/paste between multi-displays so I don't have to draw on each of them. I've looked at the sequencers in Reaktor library, and it seems that their copy/paste macros are much more advanced and too large for a beginner to copy by hand. I understand they should be read into an event table from a snap value array. Tried to follow a couple of tutorials to build off of, but they ended up locking my multi-displays from being drawn.

So my question, is what is the very bare-bones needed to set this up? Not many youtube videos that go this far.

«1

Comments

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member

    I believe I am on to something. I finally have the multi-display writing to the event table properly, but I am not quite sure how to set up the copy paste button. Am I even remotely close?

    Thanks!

  • colB
    colB Member Posts: 762 Guru

    Copy paste only makes sense in the context of a clipboard type system, which seems like overkill. Probably what you want is some sort of clone button... so a clone A->B and a clone B->A, or similar. That would be simple enough to implement using iterators and just reading from one table and writing the read value to the other table at the same index

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member
    edited December 2022

    If you want an example of what I'm after, check the Sequencers. Going to try copy and pasting the draw and copypaste macros into my ensemble to see if that will work at all.

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member

    Okay, I think I have the basic idea down, however it's hard to test. They're connected to the copy/paste buttons that I have on my panel, which, when I put wire debugging on, shows "Inactive", so I can't really test the code. How can I test the code to see if it will properly write to my event table buffers?

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member

    Ditching my first idea of copy/paste system for now as couldn't make it work out. I'll use the Event Table's saving and loading file system. Attached is what I have so far.

    When I want to load in a file into the event table, I need it to update the multi display table. What's the simplest method to do this?

    Thanks!


  • Studiowaves
    Studiowaves Member Posts: 451 Advisor

    I know what you mean about reading from one and writing into another. Is it possible to copy the entire table and paste it along side the original. Then use some logic to switch between the two. If so it's possible to have a set of presets if you can switch between them. Kind of like stacked macros.

  • Studiowaves
    Studiowaves Member Posts: 451 Advisor

    Are you familiar with stacked macros. I personally don't have a clue what you are doing. But stacked macros are nice as you can switch between macro's and keep them in the same area of the screen. So you can basically duplicate whatever you are doing and put it in a separate macro. So lets say you have 10 macros. By using switches you can select one of the ten and rig it up to display in the same area of the screen. The panel switch comes in real handy for that. If you take that route keep in mind the switches can be set to track one another using IC send and receive.


  • dumbrabbit
    dumbrabbit Member Posts: 22 Member
    edited December 2022

    Sorry, I didn't see your post until now. I am using stacked macros to stack each Multi-display that powers each oscillator.

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member
    edited December 2022

    Attached is what I have so far. The buffer macro is in its own macro outside of the stacked oscillator macros. The buffer oscillator is not editable, It currently reads every change I make to the oscillator display, but I only want to update when I hit "Copy", and retrieve its values for the the selected oscillator when I click "Paste".

    I've had a couple of ideas recently that worked in my head but failed, I don't think I understand how to wire buttons correctly, as they are hard to debug values with.

  • Studiowaves
    Studiowaves Member Posts: 451 Advisor

    yeah, that's always been a problem with reaktor and trying to save temporary values. It's not really designed to take a true snapshot of current values. It only runs a routine. In reality you need values that are stored in the tables. But the tables themselves need to be indexed with the values your talking about. So you may be able to have an up and down button to change a value but it won't be stored in the snapshot. The only solution to this that I know of is the panel list button.

    This module can hold something like 1024 numbers. It has an up and down button when in the spin mode. I use it a lot because it holds the last value selected when a snap shot is taken. It's an old module and a bit flaky when you change the modes for list to drop down list etc. I have asked them to fix it before and they might have done so. So save your projects before and after changing modes. It eventually works itself out after it gets used and actually saved in a patch. In reality it has many advantages over knobs as each entry can have any value. I do wish you could import a text file like the lookup tables but it can auto fill values. Like 0-1023 or -1 to -1024. Check it out, it's well worth it.

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member

    The Sequencer in Reaktor's library has the copy/paste function exactly the way I want. It has a multi display function and mouse area. I can copy it's values and paste them to another section, so it is possible to do it the way I kind of want it to.

  • colB
    colB Member Posts: 762 Guru

    Yes it's definitely possible.

    As yours is a very specific requirement where the thing to be copy/pasted is always the same type, you don't need to store all the data to be copied in an intermediate buffer!

    Instead, when hitting copy, you could store the index of the osc to be copied, and set a flag to say that a copy has been made. Then when paste is hit, use an iterator to copy directly from the source to the destination.

    This mighy be easier if all shared the same data table and each used a different section of it. With a separate table per osc, you will need a whole bunch of routing logic.

    I would suggest that you still create a simpler 'clone' function as described earlier. Just to make sure that your basic copy iteration code works properly... divide and conquer as they say!

    Also good to know that stacked macros are not the only way to achieve this. They make simple stuff easier, but sometimes make complex stuff much more difficult, particularly when different layers need to interact with each other.

    E.g. you could have a single display, and when a different osc is selected, the same display switches to show the data for that osc.

    It's more of a data driven approach where the oscs are just data in a table. This is accessed by the gui for display and interaction, and accessed by the audio engine for generating output.

    Keeping things separate like this can be a powerful strategy, but does require a bit more planning ;)

  • colB
    colB Member Posts: 762 Guru

    Why don't you use the snap value module? Seems strange to be using a list for this functionality instead.

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member
    edited December 2022

    edit: never mind

  • dumbrabbit
    dumbrabbit Member Posts: 22 Member
    edited December 2022

    So I have my second oscillator currently reading the first oscillator in real-time. I guess I am not sure how to wire a switch to clone oscillator a -> oscillator b, Once I can figure the proper usage of a button like that I could figure out the copy/paste method. Merging buttons with the W output of my snap value array seems to crash Reaktor.

    I am more used to text-based code that can run a piece of code on a button on click method.

Back To Top