190 postsPage 9 of 10
1 ... 6, 7, 8, 9, 10
shadiradio wroteEDIT: My MiniLab is double triggering. Oh my god. I wonder if all of these controllers use the same sourced sensors/mechanisms for pads.


Could be. All these devices are amazingly inexpensive when you think about it. I guess there’s not as much of a market for a space-efficient high-quality (and price) combination controller.

I also think it’s why companies like Nektar tuned their velocity response so you have to slam it for it to register. I’d bet money that if the Nektar pads registered light hits they would double trigger like others.

If you’re OK with having a separate keyboard and pad surface I suggested a couple in my last posts.

Mac OS X Catalina 10.15.7
Mac Pro 6.1
3 GHz 8-Core Intel Xeon E5
32 GB 1066 MHz DDR3
Dual AMD FirePro D500 3072 MB
Quantum 2
User avatar
by shadiradio on Fri Jul 02, 2021 1:26 am
I just ended up writing my own C# program to make my controller behave the way I want. I added conversions to make the MiniLab's encoders send relative values that Studio One likes, and modifying plugin parameters in Studio One is now smooth and great, just like the SQ.

More importantly, I also fixed the double triggering and this would work for any controller.

I just store the last timestamps for every note, and if the current note is within 50ms (my double trigger threshold after some tests), I just don't pass it along to the output. Storing the timestamps for every single key is a tiny amount of data (less than a kilobyte), and the processing is so trivial, I don't see why this isn't handled in firmware of all the controllers out there. It took maybe a couple hours to write, and most of that time was just spent finding a C# MIDI library to use for a dotnet app, and reading its documentation.

I don't get it... this is a hardware issue easily resolved by software. At least I can just run my app whenever I need to and it'll do its filtering in the background now.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by robertgray3 on Fri Jul 02, 2021 9:03 am
shadiradio wroteStoring the timestamps for every single key is a tiny amount of data (less than a kilobyte), and the processing is so trivial, I don't see why this isn't handled in firmware of all the controllers out there. It took maybe a couple hours to write


I bet if you were already familiar with that library, the time would likely dwindle down to an hour at most. I don't get it either; ignoring impossibly close same-note triggers is definitely the simplest solution.

As the OP pointed out, it's more likely that the cause of delays is everything that happens before and after the actual coding, like project management, scheduling, approval, deployment, or urgency.

Mac OS X Catalina 10.15.7
Mac Pro 6.1
3 GHz 8-Core Intel Xeon E5
32 GB 1066 MHz DDR3
Dual AMD FirePro D500 3072 MB
Quantum 2
User avatar
by PreAl on Fri Jul 02, 2021 9:47 am
shadiradio wroteI just ended up writing my own C# program to make my controller behave the way I want. I added conversions to make the MiniLab's encoders send relative values that Studio One likes, and modifying plugin parameters in Studio One is now smooth and great, just like the SQ.

More importantly, I also fixed the double triggering and this would work for any controller.

I just store the last timestamps for every note, and if the current note is within 50ms (my double trigger threshold after some tests), I just don't pass it along to the output. Storing the timestamps for every single key is a tiny amount of data (less than a kilobyte), and the processing is so trivial, I don't see why this isn't handled in firmware of all the controllers out there. It took maybe a couple hours to write, and most of that time was just spent finding a C# MIDI library to use for a dotnet app, and reading its documentation.

I don't get it... this is a hardware issue easily resolved by software. At least I can just run my app whenever I need to and it'll do its filtering in the background now.


If you have time maybe chuck it on GitHub and maybe Presonus could clone your code (and we could use it!).
Thx.

Intel i9 9900K (Gigabyte Z390 DESIGNARE motherboard), 32GB RAM, EVGA Geforce 1070 (Nvidia drivers).
Dell Inspiron 7591 (2 in 1) 16Gb.
Studio One Pro 6.x, Windows 11 Pro 64 bit, also running it on Mac OS Catalina via dual boot (experimental).
Presonus Quantum 2626, Presonus Studio 26c, Focusrite Saffire Pro 40, Faderport Classic (1.45), Atom SQ, Atom Pad, Maschine Studio, Octapad SPD-30, Roland A300, a number of hardware synths.
User avatar
by shadiradio on Fri Jul 02, 2021 12:19 pm
PreAl wroteIf you have time maybe chuck it on GitHub and maybe Presonus could clone your code (and we could use it!).
Thx.

Maybe if I can clean it up, make it handle port errors and stuff, and easier for people to just download and run I'll put it up there. In the meantime, here's the basic C# program for a dotnet console app. The double trigger filtering out logic is extremely simple - infinitely more simple than anything else the Atom SQ firmware is doing with all its capabilities. The relevant bit is basically just the short OnMessageReceived() function.

EDIT: Forgot to mention this program uses the managed-midi package here:
https://github.com/atsushieno/managed-midi

Code: Select all
using System;
using Commons.Music.Midi;

namespace DoubleTriggerFilter
{
    class Program
    {
        static IMidiAccess manager = MidiAccessManager.Default;
        static IMidiInput input;
        static IMidiOutput output;
        static long[] timestamps = new long[127];   // timestamps for 128 keys (channel independent)
        static long doubleTriggerThreshold = 65;    // milliseconds to ignore new NoteOn messages for each key

        static void Main(string[] args)
        {
            // make sure to clean up on exit
            AppDomain.CurrentDomain.ProcessExit += new EventHandler(OnProcessExit);

            // get input port
            Console.WriteLine("\nChoose a MIDI input port:");
            foreach (IMidiPortDetails port in manager.Inputs)
            {
                Console.WriteLine($"{port.Id}) {port.Name}");
            }
            string choice = Console.ReadLine();
            input = manager.OpenInputAsync(choice).Result;

            // get output port
            Console.WriteLine("\nChoose a MIDI output port:");
            foreach (IMidiPortDetails port in manager.Outputs)
            {
                Console.WriteLine($"{port.Id}) {port.Name}");
            }
            choice = Console.ReadLine();
            output = manager.OpenOutputAsync(choice).Result;

            // MIDI message listener
            input.MessageReceived += new EventHandler<MidiReceivedEventArgs>(OnMessageReceived);

            // handle exiting
            Console.WriteLine("\nProcessing incoming MIDI.\nPress any key to exit...");
            Console.ReadKey();
        }

        static void OnMessageReceived(object sender, MidiReceivedEventArgs args)
        {
            // only allow notes > double trigger time threshold
            if (args.Data[0] >= MidiEvent.NoteOn && args.Data[0] < MidiEvent.NoteOn + 16)
            {
                if (args.Timestamp - timestamps[args.Data[1]] < doubleTriggerThreshold)
                {
                    // do not send note
                    Console.WriteLine($"{args.Timestamp} DOUBLE TRIGGER FILTERED");
                    return;
                }
                timestamps[args.Data[1]] = args.Timestamp;
            }

            // passthrough
            output.Send(args.Data, 0, args.Length, 0);
        }

        static void OnProcessExit(object sender, EventArgs e)
        {
            Console.WriteLine("\nClosing MIDI ports...\n");
            input.CloseAsync();
            output.CloseAsync();
        }
    }
}


Image
Last edited by shadiradio on Fri Jul 02, 2021 3:09 pm, edited 1 time in total.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by PreAl on Fri Jul 02, 2021 12:43 pm
^ Well that's the post of the month so far!! Thx!

Intel i9 9900K (Gigabyte Z390 DESIGNARE motherboard), 32GB RAM, EVGA Geforce 1070 (Nvidia drivers).
Dell Inspiron 7591 (2 in 1) 16Gb.
Studio One Pro 6.x, Windows 11 Pro 64 bit, also running it on Mac OS Catalina via dual boot (experimental).
Presonus Quantum 2626, Presonus Studio 26c, Focusrite Saffire Pro 40, Faderport Classic (1.45), Atom SQ, Atom Pad, Maschine Studio, Octapad SPD-30, Roland A300, a number of hardware synths.
User avatar
by aduki on Tue Jul 06, 2021 4:40 pm
I get double triggers but hitting the pad not in the centre as mentioned here really is a workaround I can cope with.

Not great though.
User avatar
by shadiradio on Wed Jul 07, 2021 11:23 am
I spent the weekend making the little tool more flexible and a little more user friendly. You can add different types of filters, configure & re-order the chain, and import/export your configuration. I think after a little more work I'll just put this up on my site to download... it should solve double triggers for any controller.

So far all the filters I've added were to solve needs I have but it's pretty easy now to add more types in the future:
  • Block double notes: Solves double triggering from any pad controller.
  • Block PolyAftertouch: I needed this to solve an issue with sampling using Renoise Redux.
  • Block CCs: I needed this to block the MiniLab sending CC 0 messages in the encoder output.
  • Translate CCs: I needed this to remap the MiniLab's relative encoder output to values Studio One likes.

Image

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by aduki on Wed Jul 07, 2021 12:07 pm
Wow that's great. Is this Windows only and if it is, is a Mac port possible?
User avatar
by shadiradio on Wed Jul 07, 2021 12:20 pm
aduki wroteWow that's great. Is this Windows only and if it is, is a Mac port possible?

Thanks! It'll work on Mac too. It's basically a terminal app, but it supports mouse interaction too.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by aduki on Wed Jul 07, 2021 1:30 pm
OK went to your Github. Amazing work! But..I know nothing when it comes to this.

Are you going to make a version for dummies? That would be amazing as it's something that is clearly happening to lots of Atom owners and it doesn't look like Presonus have a fix.
User avatar
by shadiradio on Thu Jul 08, 2021 6:53 pm
aduki wroteOK went to your Github. Amazing work! But..I know nothing when it comes to this.

Are you going to make a version for dummies? That would be amazing as it's something that is clearly happening to lots of Atom owners and it doesn't look like Presonus have a fix.


Thanks! I don't actually have anything up on Github yet, but I'll probably just host the download on my own site when I'm done (shouldn't be too long). I can't really support anything like this or promise anything, but it should work for most people - just choose the MIDI in and out ports (like using a virtual midi cable or the built in IAC bus on Mac), and then add a block doubles filter and that's it.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by shadiradio on Tue Jul 13, 2021 11:21 pm
Image

For anyone that this may help, I packed up my little MIDI tool and put it up on my site for download:

http://www.shadiradio.com
(the app is called "midimado")

You'll need a virtual MIDI cable of some sort, but the setup should be pretty easy. Just run the app, choose your MIDI in/out ports, and add some filters. The most relevant filter for this topic is blocking double note triggers, and you can specify your time interval. I found 70ms to basically catch all the double triggers coming out of my MiniLab, so experiment with the value to fix the Atom SQ ones.

I can't promise this will work on everyone's machine, but it's a simple terminal app and I've tested it on my Mac and my PC. I hope it's helpful, and I'll probably be improving it over time now that I can make MIDI controllers work for me.

It should fix double triggering from any controller regardless of manufacturer if you leave it running while you make music.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by aduki on Thu Jul 22, 2021 8:36 am
Thanks for this.
Trying it now and I think it needs to go below 5ms on my Atom SQ. Any chance of having 1 to 5ms available?

Brilliant app!
User avatar
by shadiradio on Thu Jul 22, 2021 11:33 am
aduki wroteThanks for this.
Trying it now and I think it needs to go below 5ms on my Atom SQ. Any chance of having 1 to 5ms available?

Brilliant app!


Wow that's interesting - the Atom SQ must be double triggering immediately. I've updated the app (v0.1.1) and you can set it from 1-250ms now. BTW If you have the + or - buttons highlighted when editing values, holding down the spacebar will make them go through the timing values faster. I'm interested to know if going below 5ms works for your SQ.

macOS: https://midimado.s3.amazonaws.com/midimado-macOS.zip
windows: https://midimado.s3.amazonaws.com/midimado-Windows.zip

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by aduki on Thu Jul 22, 2021 2:00 pm
Fab, thank you..not at my Atom right now but will let you know as soon as..

Yes it seems like the pads are double triggering immediately.

I'm looking forward to finding out. :thumbup:
User avatar
by aduki on Fri Jul 23, 2021 8:17 am
Sadly the Atom SQ seems to be dependent on the software used. This is strange I know but with Wave Alchemy's excellent Drumvolution I cannot consistently eliminate double triggers even at 1ms.
But then if I go over to NI's Drumlab I can.
User avatar
by shadiradio on Fri Jul 23, 2021 9:43 am
aduki wroteSadly the Atom SQ seems to be dependent on the software used. This is strange I know but with Wave Alchemy's excellent Drumvolution I cannot consistently eliminate double triggers even at 1ms.
But then if I go over to NI's Drumlab I can.

Hmm this is actually strange... also I just realized I didn't need to update the software since midimado will capture all double triggers below the threshold set, so it should be capturing 0ms as well.

Are you using a virtual midi cable to pipe the messages between midimado and the software? It's necessary for this to work:

Atom SQ -> virtual midi port A -> midimado -> virtual midi port B -> DAW

The only other thing I can think of is to open a midi monitor (like the one built in to Studio One) and tap pads until you hear/see a double trigger, and then look at the times of the two NoteOn messages. The difference will be the ms, in this case my MiniLab is showing 41ms.

Image

I have a third unopened Atom SQ, but I don't want to open it because I already have it listed for sale on Reverb, so I can't test with it.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM
User avatar
by aduki on Fri Jul 23, 2021 11:04 am
I did wonder about the 'below n ms' parameter and what that meant, makes sense.
Midi path:
I'm selecting Atom SQ as the input in Midimado then selectin IAC for midi output. Then in Kontakt I select IAC bus as input and make sure to de-select the Atom SQ as an input.
I think that's correct?

So now, later in the day, no double hits at all even without Midimado. Totally random!
Atom SQ needs warming up it seems :roll:
User avatar
by shadiradio on Fri Jul 23, 2021 11:20 am
aduki wroteI did wonder about the 'below n ms' parameter and what that meant, makes sense.
Midi path:
I'm selecting Atom SQ as the input in Midimado then selectin IAC for midi output. Then in Kontakt I select IAC bus as input and make sure to de-select the Atom SQ as an input.
I think that's correct?

So now, later in the day, no double hits at all even without Midimado. Totally random!
Atom SQ needs warming up it seems :roll:


Hmm yeah that sounds like the right setup. I noticed that with my SQ way back too - it wasn't consistent. I wonder if temperature has anything to do with it, or even some kind of internal data buffer makes things behave differently the more you play it or something. If it does start double triggering again for you, I'd love to see the timestamps from the midi output readout.

shadiradio.com | Studio One Pro 5, Atom SQ, Windows 10 Pro 64bit, macOS Big Sur, AMD Ryzen 7 3700x, 32 GB RAM

190 postsPage 9 of 10
1 ... 6, 7, 8, 9, 10

Who is online

Users browsing this forum: No registered users and 9 guests