Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Roland V-Drums? #368

Open
mslinn opened this issue Dec 1, 2024 · 5 comments
Open

Roland V-Drums? #368

mslinn opened this issue Dec 1, 2024 · 5 comments

Comments

@mslinn
Copy link
Contributor

mslinn commented Dec 1, 2024

I just got a Roland TD-07 drum sound module. It seems like KnobKraft should be able to interoperate with it. Looking at the README, it seems I need a starting point. What might that be?

Also, I wonder if there is any correlation between Pro Tools .middev and .midnam files and KnobKraft.

@christofmuc christofmuc added the question Further information is requested label Dec 1, 2024
@christofmuc
Copy link
Owner

Roland has a standardized MIDI format, and KnobKraft has a standard Roland module.

That doesn't mean it can't be intimidating to understand the format...

First thing, we can find the TD-07 MIDI implementation document here: https://www.roland.com/de/support/by_product/td-07kv/owners_manuals/77ff2b46-7cf2-4fd7-bbcd-c17175865ab5/

What we need is the parameter map.

As an example, this is how the KnobKraft support for the JV-80 synth looks like in the adaptation:


# JV-80. The JV-880/JV-90/JV-1000 share the model ID of the JV-80, but have one respectively two bytes more size than the JV-80. How do I handle that?
_jv80_patch_data = [DataBlock((0x00, 0x00, 0x00, 0x00), 0x22, "Patch common"),
                    DataBlock((0x00, 0x00, 0x08, 0x00), 0x73, "Patch tone 1"), 
                    DataBlock((0x00, 0x00, 0x09, 0x00), 0x73, "Patch tone 2"), 
                    DataBlock((0x00, 0x00, 0x0A, 0x00), 0x73, "Patch tone 3"), 
                    DataBlock((0x00, 0x00, 0x0B, 0x00), 0x73, "Patch tone 4")] 
_jv80_edit_buffer_addresses = RolandData("JV-80 Temporary Patch"
                                         , num_items=1
                                         , num_address_bytes=4
                                         , num_size_bytes=4
                                         , base_address=(0x00, 0x08, 0x20, 0x00)
                                         , blocks=_jv80_patch_data)
_jv80_program_buffer_addresses = RolandData("JV-80 Internal Patch"
                                            , num_items=0x40
                                            , num_address_bytes=4
                                            , num_size_bytes=4
                                            , base_address=(0x01, 0x40, 0x20, 0x00)
                                            , blocks=_jv80_patch_data)
_jv80_system_common = RolandData("JV-80 System Common", 1, 4, 4, (0x00, 0x00, 0x00, 0x00),
                                 [DataBlock((0x00, 0x00, 0x00, 0x00), 0x21, "System common")])
jv_80 = GenericRoland("Roland JV-80",
                      model_id=[0x46],
                      address_size=4,
                      edit_buffer=_jv80_edit_buffer_addresses,
                      program_dump=_jv80_program_buffer_addresses,
                      device_detect_message=_jv80_system_common)

jv_80.install(this_module)

So we can see we need to find out a variety of parameters for the TD-07: The number of messages for one patch (kit?), the size of each message and it's base address. Then there will be locations inside the memory of the synth where the edit buffer (temporary patch) is stored, and where the program buffers are. Those are configured, and then everything is put together with a device detedct message (where we use the system configuration in this case) into a paramterization of the GenericRoland module.

If I look at the MIDI document, the the "Kits" (programs) are stored at 03 00 00 00, 03 02 00 00, etc., the setup at 01 00 00 00. (page 5). Each Kit though is split into a lot of messages where the JV-80 had only 5 messages: A kit has a common message, a MIDI message, 15 unit common etc. . So that's a bit more table data than for the JV-80, but the principle is the same.

The size of the messages can be found for each message in the pages after page 5, for example a Kit common message has size 1B hex (page 8). We don't need to bother with the content of the messages which are described in detail in the document, we just need the size. So the Kit Unit Common message has the size 19 hex (page 33) and so on.

I think everything is there for giving it a try.

@christofmuc
Copy link
Owner

Also, I wonder if there is any correlation between Pro Tools .middev and .midnam files and KnobKraft.

That's a very good question, and deserves its own issue to disucuss!

@christofmuc
Copy link
Owner

Here is first shot of an adaptation for the TD-07. There will be two problems we need to fix - it has 48 messages per Kit (!), which might throw off our code as normal is about 10, and it might slow things down. And then we need to look at the weird distance between the kit addreses.

Can you get a MIDI file with some real data from the TD-07? It would make it possible to test the adaptation without running the Orm.

Roland_TD-07.zip

@christofmuc christofmuc added New device and removed question Further information is requested labels Dec 13, 2024
@christofmuc
Copy link
Owner

On another note. I made a quick branch that contains a function that can write a midnam file of the current bank. There are many variables and options however, so it would be great to get an idea of what we could try first to see if it works.

I don't use ProTools personally, so if you have an idea which synth to test I could make a midnam file and we could try it on your machine.

@christofmuc
Copy link
Owner

@mslinn That was a useful link! I actually made a mistake and did not update the family ID, will make a new version of the TD-07 module!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Projects
None yet
Development

No branches or pull requests

2 participants