|
Post by darius on Feb 15, 2018 20:22:11 GMT
Hello Nic, since I have been trying to program StreamByter I have learnt a lot about MIDI - and that is fun. For example I have a USB MIDI controller from Novation that can be programmed using a special software on PC. But thanks StreamByter I can replace the standard MIDI data (factory settings) from the controller by those I need - all this performed directly on the Ipad, no need any more to reprogramm my controller on the PC. That is really good. And sometimes I think "yes, I get it", but then I find myself stopped by some basic programming...
Like this one : I would like StreamByter to send a C#7 just once, when I load the scene. I have written: IF LOAD SND N0 61 127 END
and I get an error. Can you please help? By the way I have not unterstood the difference between N, 8 and 9 - if you have time to explain. Best regards, Darius
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Feb 15, 2018 21:58:10 GMT
Hi darius , There are two parts to a MIDI note - note on and note off. To sound (and then stop) a note, you would send a note on MIDI message (starts with hex 9) and then a note off MIDI message (starts with hex 8) afterwards. The 'N' is a Stream Byter specific notation that can only be used on the left hand side of a rule and it means to match either a note on or note off event. What you probably want is something like: IF LOAD SND 90 61 127 SND 80 61 00 +D500 ENDThis will sound the note when you load the module and stop it sounding 500ms later. Regards, Nic.
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 7, 2018 1:45:22 GMT
Hi Nic. In the interest of keeping topics together, I'm going to post an add-on question to darius' original question here.
I'm attempting to do what he was doing, and with one note it worked as I'd expected.
However, I'm trying to send a succession of five notes. When I do this, the first one sounds, and then it all cuts off. Event monitor shows all the notes being sent over to the module.
There's something about the note off '80' that I think is causing this...
I'm sending as follows: IF LOAD SND 90 43 70 SND 80 43 00 +D0250 SND 90 41 70 +D0250 SND 80 41 00 +D0250 SND 90 3C 70 +D0250 SND 80 3C 00 +D0250 SND 90 41 70 +D0250 SND 80 41 00 +D0250 SND 90 43 70 +D0250 SND 80 43 00 +D0250 END I've gotten multple notes to play, but only if I remove the 80's. I've also set the iPad synth to MONO and only sent an 80 for the last note. I've also tried adding +I parameters to each line, the functionality of which I don't understand at all.
Any advice would be welcome. Thanks Tom
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 7, 2018 2:03:40 GMT
never mind... I think I figured it out. I needed to understand that all those delays (+Dnnnn) are from when the entire event begins, not relative to the line above it. Cool.
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 8, 2018 0:47:25 GMT
never mind... I think I figured it out. I needed to understand that all those delays (+Dnnnn) are from when the entire event begins, not relative to the line above it. Cool. So.... I spoke too soon. I can get this to work if the delay intervals are really long. But for the most part, what I posted above does NOT work with sub-second delay intervals... Some notes don't seem to play, or the volumes are off, or, most intriguingly, the middle of the five notes plays first or at the same time as the first one. I've pointed the same load routine to three different iPad synths with the same outcome. Is doing what I'm trying to do recommended/supported? I'm trying to sound G3-F3-C3-F3-G3 in that order, when loading a certain scene. Also, is it possible to set a variable for the delay? I'd like to be able to set it once on top and then have the delay parameter be something like +DL0 where L0 would be 0250 or whatever I need at the time? thanks Tom
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Mar 8, 2018 1:12:22 GMT
Hi tap , Please post your current attempt and I will look into it. The +D flag (completely inconsistently) expects a decimal literal. Maybe that is causing grief. You can indeed specify the delay with value of variable. Be aware that if you do that, the correct stored value will be used: ASS L0 = 3E8 SND 90 40 50 +DL0 Would delay 1000 ms. (I think - no hex calc to hand). Note also max delay you can set is 65535 ms Finally, be aware that the delay is only applied when the event *leaves* MidiFire. If you send delayed events into an Event Monitor they will show up immediately (in order they are sent) but if you expand the monitor and inspect the detail, you will see that the timestamps of each event will be different and deltas will correspond to delays set. CoreMIDI will use those timestamps to deliver events to destination at correct time. Hmm. What are you connecting to your sound generator with? Virtual, physical, network or Bluetooth? Regards, Nic.
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 8, 2018 13:22:15 GMT
Hi tap , Please post your current attempt and I will look into it. The +D flag (completely inconsistently) expects a decimal literal. Maybe that is causing grief. You can indeed specify the delay with value of variable. Be aware that if you do that, the correct stored value will be used: ASS L0 = 3E8 SND 90 40 50 +DL0 Would delay 1000 ms. (I think - no hex calc to hand). Note also max delay you can set is 65535 ms Finally, be aware that the delay is only applied when the event *leaves* MidiFire. If you send delayed events into an Event Monitor they will show up immediately (in order they are sent) but if you expand the monitor and inspect the detail, you will see that the timestamps of each event will be different and deltas will correspond to delays set. CoreMIDI will use those timestamps to deliver events to destination at correct time. Hmm. What are you connecting to your sound generator with? Virtual, physical, network or Bluetooth? Regards, Nic. Attachments:
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 8, 2018 13:25:23 GMT
The variables for the delay look like they work... the yellow activity indicator pulses slowly, but I don’t see it in the event monitor detail nor am I hearing anything. The modules on the right are software synths, except the Mi.1 which is a Bluetooth midi receiver on a Nord keyboard.
Edited to add: I am watching the MIDI activity light on the Nord and it is now flashing at an interval that would suggest that this is working. But I'm not hearing anything so now I'm completely baffled. :-) I apologize for being so high-maintenance.
Thanks Tom
|
|
nic
Soapbox Supremo
Troublemaker
Press any key to continue
Posts: 2,011
|
Post by nic on Mar 8, 2018 14:24:31 GMT
Hi tap , OK, so your delays are going to be increasing by 4 seconds, since 1000 in hex is 4096 ms. I can see the timestamps are wrong in the event monitor, but this is a known bug that I have fixed. I think I also fixed a problem with delays being doubled too which might also be coming into play. I think it would be better for you to work with a pre-release version of MidiFire via Apple's TestFlight so we're not trying to debug stuff that may have been fixed. If you're willing to install the TestFlight version, just send me a PM with the email address you would like me to use with Apple and then I'll organise an invite. Regards, Nic.
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 8, 2018 15:15:22 GMT
Hi tap , OK, so your delays are going to be increasing by 4 seconds, since 1000 in hex is 4096 ms. I can see the timestamps are wrong in the event monitor, but this is a known bug that I have fixed. I think I also fixed a problem with delays being doubled too which might also be coming into play. I think it would be better for you to work with a pre-release version of MidiFire via Apple's TestFlight so we're not trying to debug stuff that may have been fixed. If you're willing to install the TestFlight version, just send me a PM with the email address you would like me to use with Apple and then I'll organise an invite. Regards, Nic. PM sent. I did indeed see how slow this was and have been changing the variable to must faster intervals. thanks
|
|
tap
Converser
Posts: 35
|
Post by tap on Mar 8, 2018 18:11:43 GMT
This issue appears to be resolved. I also appreciated knowing that the delay +D parameter can include a variable (i.e. +DL0).
|
|