I had an unfortunate event earlier with a corrupted .hip file and no recovery. hours worth of work gone but I did manage to salvage the Vector UI. anyhow:
Is it possible to change the shortcut CTRL+S to Save as XML from source?
I had an unfortunate event earlier with a corrupted .hip file and no recovery. hours worth of work gone but I did manage to salvage the Vector UI. anyhow:
Is it possible to change the shortcut CTRL+S to Save as XML from source?
i think .xml should be the default file format. I like it better. your project components are separate so less room for potential errors that would break the entire project file. (interface.js, etc).
and even if your main xml is broken, easier to fix than trying to fix .hip. afaik, the .hip file is an archive format.
@d-healey unfortunately none of the autosaves worked either. when I did an xml recovery, it was missing a lot and there's a lot of character errors.
Im a first time HISE user so i only really found out that it was more ideal to save as XML.
I should have listened to your tutorial when you said "save as XML often"
thanks for sharing that. i'll give it a try later.
I used this one instead of the stock release trigger because it is way more consistent.
For some weird reason the stock release trigger's Time Attenuation is giving me issues by not being consistent.
eg: when it supposed to give the velocity value at 0.500ms but instead it gives out the value at 0ms.
Only happens to me when the attenuation time table are maxed out.
Hello! My first time here on this website and first time using HISE this week! and I love it!
I was using @d-healey 's release trigger script that he shared here from 2017 and it was broken, so I fixed it.
for some reason using createMidiList() messes up the noteOn-noteOff timer so i just swapped it out with an array.
I re-arranged the UI as well to fit in better with the new HISE editor. Removed the Legato mode for now as it was also broken.
I didn't see anyone sharing a fixed version so i decided to share it for everyone else.
/**
* Release Trigger v2.0.0
* Author: Christoph Hart, David Healey, Lorenzo Artigas (Ensou)
* Date: 09/01/2017
* Updated: 10/26/2019
*/
//Includes
//Init
Content.setHeight(150);
Content.setName("Release Trigger");
reg attenuationLevel = 1.0;
reg timeIndex = 0;
reg time;
const var velocityValues = [];
const var lengthValues = [];
const var btnMute = Content.addButton("btnMute", 20, 20);
btnMute.set("text", "Mute");
const var btnAttenuate = Content.addButton("Attenuate", 20, 50);
const var knbTime = Content.addKnob("Time", 20, 80);
knbTime.setRange(0, 20, 0.1);
const var tblTime = Content.addTable("tblTime", 140, 0);
tblTime.setPosition(170, 20, 580, 110);
for(i = 0; i < 127; i++)
{
velocityValues[i] = 0;
lengthValues[i] = 0.0;
}
function onNoteOn()
{
Message.ignoreEvent(true);
if (!btnMute.getValue())
{
velocityValues[Message.getNoteNumber()] = Message.getVelocity();
lengthValues[Message.getNoteNumber()] = Engine.getUptime();
}
}
function onNoteOff()
{
//If not muted and a velocity was recorded in the note on callback - this prevents release triggering for the wrong articulation
if (!btnMute.getValue() && velocityValues[Message.getNoteNumber()] > 0)
{
Message.ignoreEvent(true);
//Calculate attenuation
if(btnAttenuate.getValue() == 1)
{
//time = Engine.getUptime() - lengthValues.getValue(Message.getNoteNumber());
time = Engine.getUptime() - lengthValues[Message.getNoteNumber()];
timeIndex = (time / (knbTime.getValue()) * 127.0);
if (timeIndex > 127) timeIndex = 127;
if (timeIndex < 0) timeIndex = 0;
attenuationLevel = /*velocityValues.getValue(Message.getNoteNumber()) **/ parseInt(tblTime.getTableValue(timeIndex) * 127);
} else {
attenuationLevel = velocityValues[Message.getNoteNumber()];
}
if (attenuationLevel < 1) attenuationLevel = 1;
Synth.playNote(Message.getNoteNumber(), attenuationLevel); //Play release note
velocityValues[Message.getNoteNumber()] = 0; //Reset velocity for note
}
}
function onController()
{
}
function onTimer()
{
}
function onControl(number, value)
{
switch (number)
{
case btnMute:
velocityValues.clear();
lengthValues.clear();
break;
case btnAttenuate:
knbTime.set("visible", value);
tblTime.set("visible", value);
break;
}
}