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

D-50 Adaptation No Connect - wrong device ID sent #407

Open
summersetter opened this issue Feb 2, 2025 · 10 comments
Open

D-50 Adaptation No Connect - wrong device ID sent #407

summersetter opened this issue Feb 2, 2025 · 10 comments

Comments

@summersetter
Copy link

Running Orm version 2.5.1
Connecting to Roland D-50 original version (S/N 827746)
Using Focusrite Scarlett 4i4 interface

  • D-50 adaptation selected. On detection, the program is sending out query sysex messages to device ID range 0x10 to 0x1f (these are also the MIDI channels of course).
  • The sysex documentation for this synth indicates a valid device ID range of 0x00 to 0x0f.
  • The D-50 does not respond to the incorrect device ID messages.
  • When I manually edit the sysex message to send device ID = 0x00, the D-50 responds normally.

Image

  • Although the function 'buildRolandMessage()' in the RolandD50.py file appears correct (masks the channel correctly), it seems like this function is not actually used in the detection of the D-50.
  • Was not able to find a way to modify RolandD50.py to correct the sysex message format.

Image

One anomaly noted is that the Scarlett 4i4 seems to have two logical MIDI interfaces. In Studio One I can select either of these interfaces, but in Orm only the second one appears "2- Focusrite USB MIDI ". Sending and receiving MIDI to the D-50 using Studio One works fine with either interface selected, but perhaps this is an issue for Orm?

Thanks for any help with this issue. Not ready to try digging into the main source.

@christofmuc
Copy link
Owner

Thanks for reporting back! I am motivated to finish the D-50 adaptation, it has been sitting around for a long time now and I remember there was a peculiar problem with data addresses, but we can figure that out.

You are correct the correct message is not used, what is used is the code in the GenericRoland class:

 @knobkraft_api
    def createDeviceDetectMessage(self, channel: int) -> List[int]:
        if self.device_family is not None:
            # Detecting the Roland via an Identity Request message
            # This is a sysex generic device detect message
            return [0xf0, 0x7e, channel, 0x06, 0x01, 0xf7]
        elif self.device_detect_message is not None:
            # Might be an older (pre XV-3080) Roland, try to query for the system common first data block and see if it answers
            address, size = self.device_detect_message.address_and_size_for_sub_request(0, 0)
            return self.buildRolandMessage((channel + 0x10) & 0x1f, command_rq1, address, size)
        else:
            print(f"{self._name} adaptation: No auto detection implemented. Specify either device family for identity reply, or data block")
            return []

It seems though the D-50 is old enough that it doesn't play along with all other Rolands. Seems I need to extend the Generic Roland module (or copy the stuff over into the D-50 module first to get it working and later standardize. I think we'll do that).

On the MIDI device thing - I am using the JUCE library which is using the OS functions for MIDI devices. Bypassing that is not feasible, we'd need to find out why JUCE is seeing only one of the interfaces. Which OS are you on?

@summersetter
Copy link
Author

Thanks for the detailed response. I am using Windows 10 Enterprise 22H2 build 19045.5371.
I would be interested in testing out any updated code on the D-50.

@christofmuc
Copy link
Owner

@summersetter There you go, this passes all internal tests, but as I don't have a device, suprises are likely:

RolandD50.zip

This should work with the current release, I copied all fixed code from the Generic Roland module into this file so it is standalone.

@summersetter
Copy link
Author

Sorry, the submodule knobkraft_api can't be found, and after looking around on git, I couldn't find it either.

Image

Regards.

@christofmuc
Copy link
Owner

Ah bummer, it was still in the Roland file. Try this:

RolandD50_V2.zip

@summersetter
Copy link
Author

That fixed it.

  • Confirmed device detection (auto-detect all MIDI channels),
  • import edit buffer from D-50 works fine
  • send to edit buffer in D-50 working correctly

I understand that a number of other functions are not yet implemented.

  • Attempted to load a D50 sysex file, failed with errors - see log. Not sure if that was supposed to be working or not.

d50 sysex file import debug log 2.zip

@summersetter
Copy link
Author

Oops, didn't mean to close this item.

@summersetter summersetter reopened this Feb 4, 2025
@christofmuc
Copy link
Owner

Ok, great! Rename should also work, and does bank sync work?

The D-50 has a data format for full banks somehow, there is already an implementation but it might not be enabled. Also, adaptations currently can not create bank dumps other than list of program dumps/edit buffers, there is an open ticket somewhere for the DX7 who needs this as well.

@christofmuc
Copy link
Owner

Uh, that log looks weird. Can you share the file so I can have a look? Did you open it via the Import from disk..menu?

@summersetter
Copy link
Author

RobsColl.zip
Grabbed this from a website that has a pile of D50 patches.

I tried about 5 different sysex files and they all had similar errors.

Opened via 'Patches/Import from files into database'.

I''ll try rename and bank sync next.

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