Oh damn I just had a shining moment of hope! I forgot I had installed a midi loopback demo on the desktop!
But then I checked and there was none on the laptop or MacBook that was also doing it.
I was able to replicate the behavior with the file you posted
here ...sort of. Here's what's going on.
TL;DR:
Somehow, your original preset is corrupted. I have no idea how it got the values written into it that it has, but the values for the Chorus block's Speed are negative and invalid. The initial load-up value for Speed (which ignores Snapshot values) is 2.5, which causes it to look "normal" when you load it, but as soon as you try to interact with the Chorus block, such as copy/pasting, it loads the invalid stored Snapshot value. Since the value is negative, it reverts to 0 instead. Editing your preset and saving it with valid values for Speed causes it to work fine, and can be copy/pasted without any issues.
All the gory details:
In the original file you posted, we see these relevant pieces:
Code:
"Speed" : {
"@controller" : 19,
"@max" : 1.0,
"@min" : 0.0,
"@snapshot_disable" : false
},
That's the snapshot controller assignment.
Then we see this:
Code:
"block10" : {
"@enabled" : true,
"@model" : "HD2_Chorus",
"@no_snapshot_bypass" : false,
"@path" : 1,
"@position" : 7,
"@stereo" : true,
"@type" : 0,
"Depth" : 0.680,
"Level" : 0.0,
"Mix" : 0.20,
"Predelay" : 0.320,
"Speed" : 0.250,
"Spread" : 0.80,
"SyncSelect1" : 6,
"TempoSync1" : false,
"Tone" : 0.750,
"WaveShape" : 2
},
This is where the settings for the block are defined, when you first load it. Notice the "speed" value is 0.25 here, which corresponds to a speed value of 2.5 in the GUI. Thus, when you first load this preset, no matter which snapshot it loads into, the speed value will first be set to 2.5.
(Important side note: this value *should* be identical to the value in the snapshot where you last saved the preset. I don't know of any way to get a different value here than what it stores in the snapshot definition, unless it's manually edited.)
So far, so good. Now we continue down the file, and see these values for the snapshot assignments:
Code:
"Speed" : {
"@fs_enabled" : false,
"@value" : -15.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -12.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -12.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -28.1174
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -15.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -15.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -12.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : -15.0
},
Every one of those is an illegal value for the Speed parameter, which should range from 0.0 to 1.0. This is why copy and paste is appearing not to work. It actually doesn't have anything to do with copy and paste. The problem is that the preset first loads with an allowed value of 0.25 (2.5 in the GUI), which is independent of the snapshot, and then as soon as you change the snapshot or try to do anything with the preset that accesses the stored value for the snapshot, it loads one of those illegal negative values. Instead of crashing and burning, it treats negative values as zero, causing every snapshot to show 0 if you change between the snapshots after loading the preset.
As a test, I edited your preset in HX Edit with the following values for speed in each successive snapshot:
0.0
1.4
2.8
4.2
5.6
7
8.4
10.0
And I then saved the preset to a new name. After opening this one in the text editor, we now see this:
Code:
"Speed" : {
"@controller" : 19,
"@max" : 1.0,
"@min" : 0.0,
"@snapshot_disable" : false
},
Code:
"block10" : {
"@enabled" : true,
"@model" : "HD2_Chorus",
"@no_snapshot_bypass" : false,
"@path" : 1,
"@position" : 7,
"@stereo" : true,
"@type" : 0,
"Depth" : 0.810,
"Level" : 0.0,
"Mix" : 0.50,
"Predelay" : 0.320,
"Speed" : 0.0,
"Spread" : 0.80,
"SyncSelect1" : 6,
"TempoSync1" : false,
"Tone" : 0.80,
"WaveShape" : 2
},
(Note that the Speed value here now matches the saved value for Snapshot 1, which was the active Snapshot when I saved the preset.)
Code:
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.0
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.140
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.280
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.420
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.560
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.70
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 0.840
},
"Speed" : {
"@fs_enabled" : false,
"@value" : 1.0
},
Notice that all of the speed values now match the inputs I gave it (divided by ten, as the code maps 0->1 to 0->10 in the GUI).
When I copy and paste this corrected block to the Chorus in your original preset, it works as expected for all Snapshots.
As a final check, I tried editing the initial load-up value to this, but kept all the Snapshot values the same:
Code:
"block10" : {
"@enabled" : true,
"@model" : "HD2_Chorus",
"@no_snapshot_bypass" : false,
"@path" : 1,
"@position" : 7,
"@stereo" : true,
"@type" : 0,
"Depth" : 0.810,
"Level" : 0.0,
"Mix" : 0.250,
"Predelay" : 0.320,
"Speed" : 0.230, <----- This line is edited to be different from any of the stored Snapshot values
"Spread" : 0.80,
"SyncSelect1" : 6,
"TempoSync1" : false,
"Tone" : 0.50,
"WaveShape" : 2
},
Doing this replicates the behavior you're seeing: it loads up with a value of 2.3 for the speed, no matter which Snapshot was active when it was last saved, but as soon as I change to a different Snapshot, it loads up with the stored value for that particular Snapshot. I suppose this hack could be used to force a certain value for a parameter when a preset first loads, which differs from any stored Snapshot value, but I'm not sure why anyone would want to do that, and it might cause other unforeseen issues. I didn't test it much other than verifying that this is why your preset is loading with a speed of 2.5 and then changes to 0 as soon as you try to do anything with it.