Synthesia 10.8 - Looping to beginning of first measure cuts off VSTi audio prematurely

Trouble with Synthesia, your keyboard, or adapter? Think you found a bug?
When describing problems, always mention your OS and game version (shown at the bottom of the title screen).

If your keyboard has USB or MIDI ports, there is a tremendously high chance (>99%) it will work with Synthesia. See what you'll need on the keyboards page.
Post Reply
tommai78101
Posts: 766

Post by tommai78101 »

App Version: Synthesia 10.8.5686 Stable
MIDI Keyboard: Roland FP-10 88-keys
OS: Windows 10 Pro x64 21H1 (Build 19043.1348)
MIDI Input: Roland FP-10 Piano
MIDI Output: Using LoopMIDI to output to a MIDI port in which a VSTi instrument plugin, Salamander Piano, can listens to.
MIDI file: Flamesgrace, Guiding Light - By Yasunori Nishiki


Currently encountering an issue with Synthesia where if I set a loopback on the first measure, and I play the first chord correctly, then play the next note incorrectly, the note sound immediately gets cut off when it's returning to the position where the loop starts. This only happens when Synthesia is re-routing MIDI inputs from the MIDI keyboard to MIDI output ports; Bug cannot be reproduced using Microsoft GS Wavesynth.

Here's a video showcasing this bug. I play very softly, but the audio should still be audible.




I can re-record the bug if you need me to.

Steps to reproduce:
  1. On a Windows 10 machine, open LoopMIDI (if installed) and set a new port (named "Synthesia OUT"). This will be the MIDI Output port that Synthesia will connect to.
  2. Have a MIDI keyboard connected to the PC.
  3. Open Synthesia first.
  4. Set it up so Synthesia can pick up the MIDI keyboard as MIDI Input.
  5. Next, set it up so Synthesia sends MIDI Output to the MIDI port, "Synthesia OUT".
  6. Then open a VSTi instrument plugin that will listen to "Synthesia OUT" LoopMIDI port.
  7. In Synthesia, click "Play a Song".
  8. Select any MIDI song that has at least 2 notes on the first beat of the first measure. Meaning, you play the chord notes simultaneously on the first beat of the first measure.
  9. Click on "Both Hands" under "Practice the Melody".
  10. When Synthesia is waiting for your MIDI input, on the sheet music, press and hold down right mouse button on the first measure, and drag your mouse to select the entire first measure, before letting go of the right mouse button.
  11. Either press the sustain pedal or hold down the keys, while playing the chords note-by-note. For example, if you see G#, B, and E notes requiring to be pressed simultaneously on the keyboard, press and hold down G#, then press and hold B, then finally press and hold E (as shown in the video above).
  12. Immediately, press a wrong key anywhere on the piano keyboard.
  13. Notice how Synthesia jumps back to the beginning of the loop of the first measure, and observe the audio of the VSTi instrument plugin gets cut off immediately. This does not happen on subsequent measures; only the first measure.
I've used MIDI-OX, a MIDI signal monitoring app, to investigate what's going on with MIDI signals. I can confirm from MIDI-OX that I haven't let go of the G#, B, and E keys while the audio was getting cut off.
Hardware Information: Dell Alienware 15 R4, Intel Core i7-8750H @ 2.20GHz / 2.21 GHz, 16GB RAM, Nvidia RTX 2070 / Nvidia GTX 1060 dual-GPU, Roland FP-10, MIDI-OX + LoopMIDI combo.
Nicholas
Posts: 13135

Post by Nicholas »

Hey tommai, long time no see!

My guess is that the song has some preparatory MIDI events right at the beginning (maybe a SysEx GM Reset or something like an "All Notes Off" or "All Sounds Off" message?) Looping back to the very beginning would cause those events to be resent, too.

In MIDI-OX, which messages are sent when the loop triggers?
tommai78101
Posts: 766

Post by tommai78101 »

Nicholas wrote: 11-16-21 2:47 pm Hey tommai, long time no see!

My guess is that the song has some preparatory MIDI events right at the beginning (maybe a SysEx GM Reset or something like an "All Notes Off" or "All Sounds Off" message?) Looping back to the very beginning would cause those events to be resent, too.

In MIDI-OX, which messages are sent when the loop triggers?
Hi Nicholas, long time no see as well!

I'm going to be using a different MIDI file, because I figured it might be caused by bad MIDIs? But when I tried it on a different MIDI file, I can reproduce the issue without any effort. Only the first 2 notes are selected for looping.

MIDI file: Wet Hands - Minecraft

Image

This is the raw input from MIDI-OX.

Code: Select all

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 0018DB2F   1  --     90    31    1A    1  C# 3 Note On               
 0018DDD7   1  --     90    2D    32    1  A  2 Note On               
 0018DDEA   1  --     80    31    66    1  C# 3 Note Off              
 0018E038   1  --     90    31    1F    1  C# 3 Note On               
 0018E069   1  --     80    2D    5F    1  A  2 Note Off              
 0018E281   1  --     90    2D    3B    1  A  2 Note On               
 0018E295   1  --     80    31    67    1  C# 3 Note Off              
 0018E48B   1  --     90    31    2C    1  C# 3 Note On               
 0018E4AF   1  --     80    2D    5F    1  A  2 Note Off              
 0018E6AF   1  --     90    2D    3B    1  A  2 Note On               
 0018E6C2   1  --     80    31    60    1  C# 3 Note Off              
 0018E8A7   1  --     90    31    38    1  C# 3 Note On               
 0018E8DD   1  --     80    2D    63    1  A  2 Note Off              
 0018EAAA   1  --     90    2D    4A    1  A  2 Note On               
 0018EAC0   1  --     80    31    5A    1  C# 3 Note Off              
 0018ECBF   1  --     90    31    48    1  C# 3 Note On               
 0018ECE8   1  --     80    2D    65    1  A  2 Note Off              
 0018EEC9   1  --     90    2D    54    1  A  2 Note On               
 0018EEE2   1  --     80    31    4B    1  C# 3 Note Off              
 0018F0CB   1  --     90    31    45    1  C# 3 Note On               
 0018F0FE   1  --     80    2D    66    1  A  2 Note Off              
 0018F2B3   1  --     90    2D    54    1  A  2 Note On               
 0018F2CC   1  --     80    31    38    1  C# 3 Note Off              
 0018F4B8   1  --     90    31    44    1  C# 3 Note On               
 0018F4E1   1  --     80    2D    67    1  A  2 Note Off              
 0018F670   1  --     90    2D    48    1  A  2 Note On               
 0018F68C   1  --     80    31    45    1  C# 3 Note Off              
 0018F821   1  --     80    2D    64    1  A  2 Note Off              
        
This is the output from MIDI-OX. It doesn't take long to reproduce the bug.

Code: Select all

 TIMESTAMP IN PORT STATUS DATA1 DATA2 CHAN NOTE EVENT               
 0018DB2F   1   3     90    31    1A    1  C# 3 Note On               
 0018DB2F   1   4     90    31    1A    1  C# 3 Note On               
 0018DDD7   1   3     90    2D    32    1  A  2 Note On               
 0018DDD7   1   4     90    2D    32    1  A  2 Note On               
 0018DDEA   1   3     80    31    66    1  C# 3 Note Off              
 0018DDEA   1   4     80    31    66    1  C# 3 Note Off              
 0018E038   1   3     90    31    1F    1  C# 3 Note On               
 0018E038   1   4     90    31    1F    1  C# 3 Note On               
 0018E069   1   3     80    2D    5F    1  A  2 Note Off              
 0018E069   1   4     80    2D    5F    1  A  2 Note Off              
 0018E281   1   3     90    2D    3B    1  A  2 Note On               
 0018E281   1   4     90    2D    3B    1  A  2 Note On               
 0018E295   1   3     80    31    67    1  C# 3 Note Off              
 0018E295   1   4     80    31    67    1  C# 3 Note Off              
 0018E48B   1   3     90    31    2C    1  C# 3 Note On               
 0018E48B   1   4     90    31    2C    1  C# 3 Note On               
 0018E4AF   1   3     80    2D    5F    1  A  2 Note Off              
 0018E4AF   1   4     80    2D    5F    1  A  2 Note Off              
 0018E6AF   1   3     90    2D    3B    1  A  2 Note On               
 0018E6AF   1   4     90    2D    3B    1  A  2 Note On               
 0018E6C2   1   3     80    31    60    1  C# 3 Note Off              
 0018E6C2   1   4     80    31    60    1  C# 3 Note Off              
 0018E8A7   1   3     90    31    38    1  C# 3 Note On               
 0018E8A7   1   4     90    31    38    1  C# 3 Note On               
 0018E8DD   1   3     80    2D    63    1  A  2 Note Off              
 0018E8DD   1   4     80    2D    63    1  A  2 Note Off              
 0018EAAA   1   3     90    2D    4A    1  A  2 Note On               
 0018EAAA   1   4     90    2D    4A    1  A  2 Note On               
 0018EAC0   1   3     80    31    5A    1  C# 3 Note Off              
 0018EAC0   1   4     80    31    5A    1  C# 3 Note Off              
 0018ECBF   1   3     90    31    48    1  C# 3 Note On               
 0018ECBF   1   4     90    31    48    1  C# 3 Note On               
 0018ECE8   1   3     80    2D    65    1  A  2 Note Off              
 0018ECE8   1   4     80    2D    65    1  A  2 Note Off              
 0018EEC9   1   3     90    2D    54    1  A  2 Note On               
 0018EEC9   1   4     90    2D    54    1  A  2 Note On               
 0018EEE2   1   3     80    31    4B    1  C# 3 Note Off              
 0018EEE2   1   4     80    31    4B    1  C# 3 Note Off              
 0018F0CB   1   3     90    31    45    1  C# 3 Note On               
 0018F0CB   1   4     90    31    45    1  C# 3 Note On               
 0018F0FE   1   3     80    2D    66    1  A  2 Note Off              
 0018F0FE   1   4     80    2D    66    1  A  2 Note Off              
 0018F2B3   1   3     90    2D    54    1  A  2 Note On               
 0018F2B3   1   4     90    2D    54    1  A  2 Note On               
 0018F2CC   1   3     80    31    38    1  C# 3 Note Off              
 0018F2CC   1   4     80    31    38    1  C# 3 Note Off              
 0018F4B8   1   3     90    31    44    1  C# 3 Note On               
 0018F4B8   1   4     90    31    44    1  C# 3 Note On               
 0018F4E1   1   3     80    2D    67    1  A  2 Note Off              
 0018F4E1   1   4     80    2D    67    1  A  2 Note Off              
 0018F670   1   3     90    2D    48    1  A  2 Note On               
 0018F670   1   4     90    2D    48    1  A  2 Note On               
 0018F68C   1   3     80    31    45    1  C# 3 Note Off              
 0018F68C   1   4     80    31    45    1  C# 3 Note Off              
 0018F821   1   3     80    2D    64    1  A  2 Note Off              
 0018F821   1   4     80    2D    64    1  A  2 Note Off              
            
From MIDI-OX, I see that it's picking up Note On and Off signals twice, but each of those note signals are routed to different MIDI ports. Is it possible that Synthesia is picking up the simultaneous Note On signals somehow, because the channels are all the same in the outputs?
Hardware Information: Dell Alienware 15 R4, Intel Core i7-8750H @ 2.20GHz / 2.21 GHz, 16GB RAM, Nvidia RTX 2070 / Nvidia GTX 1060 dual-GPU, Roland FP-10, MIDI-OX + LoopMIDI combo.
Bavi_H
Posts: 116

Post by Bavi_H »

MIDI-OX Information:

In MIDI-OX, if you have selected two MIDI Outputs, MIDI-OX will by default send a copy of MIDI Input port messages to both of the MIDI Output ports.

For example, in the following picture, I sent a Middle C press and release to Virtual Cable 1. MIDI-OX sent the same Middle C press and release to Microsoft GS Wavetable Synth and to Virtual Cable 2.

ports.png
ports.png (56.31 KiB) Viewed 1804 times
tommai78101
Posts: 766

Post by tommai78101 »

@Bavi_H

I finally understood what your post is talking about. Wished you could've made it clearer to explain what it is though.

In Synthesia, there is the option to resend incoming MIDI signals out to specific MIDI ports.
In MIDI-OX, it also has the option to send incoming MIDI signals out to all specified MIDI ports.
What will happen if the specified MIDI ports are selected by both Synthesia and MIDI-OX?

For the VSTi audio software, when both Synthesia and MIDI-OX outgoing MIDI signals are received, it can cause undefined behaviors, such as Synthesia MIDI out signals overwriting MIDI-OX MIDI out signals, and vice-versa. This undefined behavior will cause a high-pitched popping sound when the VSTi audio is played.

This is the main cause as to why the VSTi audio gets cut off prematurely, because it cannot handle simultaneous MIDI signals at the same time.

This is a user error (misconfiguration of the MIDI setups), and not a software error.

Not sure how to close this bug report.
Hardware Information: Dell Alienware 15 R4, Intel Core i7-8750H @ 2.20GHz / 2.21 GHz, 16GB RAM, Nvidia RTX 2070 / Nvidia GTX 1060 dual-GPU, Roland FP-10, MIDI-OX + LoopMIDI combo.
Bavi_H
Posts: 116

Post by Bavi_H »

Sorry for any confusion! I was trying to explain things without getting too technical, but maybe I was too brief.
  • In MIDI-OX, when you select multiple MIDI Inputs or MIDI Outputs (Options menu → MIDI Devices), by default it connects every input to every output.

    You can see the connections it uses in the "MIDI Port Routing" window (View menu → Port Routings). In this window, I like to right click and choose Disconnect All, then drag lines from input to outputs to manually make the connections I want.

    The "Monitor - Output" window shows what it getting sent to every output port. If a single input message is going to multiple outputs, it shows a copy of the same input message that is going to each output port.

    The "Monitor - Input" window (View menu → Input Monitor) shows the data fresh from the input port.
In your MIDI-OX logs, the input log only showed Note On and Note Off messages, and the output log only showed the same messages doubled. So I suspected you had multiple outputs selected in MIDI-OX and just wanted to make sure you were aware of that.


By the way, I was interested in trying to figure out what could be causing your problem, but...
  • When I originally tried to recreate your issue, the loop never restarted for me. I finally figured out that when I click the loop icon and it turns yellow, I have to set the option "Restart Loop After Errors" to the value of 1. (It was originally on "Disabled", so the loop never restarted for me.)

    Now that I have "Restart Loop After Errors" set to 1, when I play a wrong note, it seems like Synthesia always cuts off all the notes by sending Note Off messages and goes back to the start of the loop -- it doesn't matter what output device or input device I am using, or if it's a chord or a single note, or if it's the first measure or not.
So I'm not sure if I understood your problem correctly. To me it seems like Synthesia always cuts off the notes when it restarts a loop.
Post Reply