|
Post by isaac on Jan 23, 2014 19:03:47 GMT
Hi there, Is it possible to use MIDI Bridge to quantize a MIDI input? Something related to BPM or MIDI clocks may be too complicated, but just the option of saying "accept a given note event a maximum of 1 time each 250 milliseconds, discard all other events above that limit" would be extremely helpful when working with old / faulty MIDI keyboards with a tendency to trigger repeatedly on each keystroke. I know I know, I should buy a better keyboard Thanks in advance for the help! Isaac.
|
|
|
Post by karramba on Jan 24, 2014 13:17:22 GMT
I now also solve this problem. You can try to filtering F8 or SPP messages but engine of SByter can't process arithmetical tasks and saves variables.
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jan 24, 2014 14:24:19 GMT
Hi Isaac,
Right now, that isn't something MidiBridge can do I'm afraid.
If it is possible to nut out here what is required for both the faulty keyboard problem as well as karramba's problems, maybe I can add something to a future update if it is feasible?
Regards, Nic.
|
|
|
Post by isaac on Jan 24, 2014 22:00:24 GMT
Hi Nic,
That would be great, thank you for your consideration. Adding to what I described above and thinking of the most elegant way to implement the feature, I would call it "Quantize" with three parameters: on/off switch, BPM and note type (4th, 8th, 16th...).
Once it is ON, you (1) don't allow more than one event of the same note per unit of time and (2) you adjust the time of the note off event so that it fits a whole multiple of the unit of time.
Please note that you don't need to when the song starts or ends or etc... you just quantize from the point the note begins to the point the note ends. In that way we split responsibilities: it is my responsibility to strike the right note at the right time, it is your responsibility to adjust the duration of the note to the tempo.
Does it make sense?
Best regards,
Isaac.
|
|
|
Post by karramba on Jan 25, 2014 0:01:42 GMT
Yeah Nic, it's not problem, it's perfectionism and overachieving! I'm trying to organize pattern cycling and pattern switch feature in BeatMaker 2 with MidiBridge and hardware controller. Now it work, but drop outs happen because I use many awkward decisions because SB can't save and read MIDI messages
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jan 27, 2014 9:47:06 GMT
Seems like we have two different feature ideas here:
1. Live quantisation. This sounds like something that would need a new MidiBridge module or maybe even a separate app. Could be described as the timing equivalent of auto-tune. AutoTime?
2. Stream Byter expansion to have some sort of memory of historic MIDI messages. Sounds difficult!
I cannot promise anything, but I will look into this further for a future update. I may need more input on the Stream Byter expansion, but I think I get the live quantisation idea.
Regards, Nic.
|
|
|
Post by karramba on Jan 27, 2014 10:57:36 GMT
Yeah, AutoTiming feature would be great expansion! ) but if SByter could count or create sequence of rules anybody script-maker can make AutoTiming function himself. By the way, StreamByter have big brother in hardware area : www.midisolutions.com/prodepp.htmIt's limited 32 strings of rules but in this device included ideas of effective rules organization. I had this thing before dive into MidiBridging )))
|
|
|
Post by isaac on Jan 27, 2014 22:24:07 GMT
Hi Nic, AutoTime is a great name for the feature. Good job! I implemented the algorithm in Java in case it could be of help. It is published here: dl.dropboxusercontent.com/u/90478853/Perm/SongQuantizer.jarUsage: java -jar SongQuantizer.jar 'inName' 'inVendor' 'inVersion' 'outName' 'outVendor' 'outVersion' BPM beatsToQuantize Aside of the 6 strings to identify MIDI in and out endpoints in a desktop, if you want to quantize to a quarter note (1 beat) at 120 beats per minute: BPM = 120 and beatsToQuantize = 1 The JAR file also contains the full source code of course. Please feel free to use as you want. I am sure you can do a much better implementation. For starters, I only check that the "off" event doesn't happen before the end of the beat, not at a given multiple of the beat. So, as to say, if the 'off' happens at 0.8 I delay it until 1, but if it happens at 1.2 I don't delay it until 2. However even in this clunky form the algorithm has solved all my issues with the keyboard on Windows, Mac and Linux... I wish I knew more Objective C to avoid pestering you with this topic Thank you and best regards, Isaac.
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jan 28, 2014 10:05:26 GMT
Hi isaac,
Very cool!
I downloaded your .jar file, unzipped it and found the source in there with your algorithm. I have always stayed away from java (despite working for Sun - I was in the Solaris group so java were the 'other side') but I can understand it OK.
If I get an opportunity I might try and create a quick app using the MidiBus library that implements your algorithm and see how I go. Maybe AutoTime has a future...
Regards, Nic.
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Jan 28, 2014 10:12:38 GMT
Hi karramba,
Your link to the Midi Solutions site is very informative. I wasn't aware of this before.
Their programming tool looks very sophisticated compared to the Stream Byter and maybe I can get some ideas on how I could expand the Stream Byter to be more versatile. What would be really cool was if someone wrote an iOS version of the Midi Solutions firmware as an app then you could use their tool to program the app.
Regards, Nic.
|
|