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;
}
}
@ustk yes i meant VSTi, it was just a typo.
Im using the latest build, whenever I export my plugin the default mapped midi cc doesnt export.
Also: the plugin does not create default presets when another different preset already exists in the preset folder or if the preset folder already exists. but these are just the minor issues.
My main issue is Custom Settings for Streaming Mode and Max Voices show no choices on the plugin. but inside HISE they work just fine.
I tried both the Master Build and Scripting node build they all show the same problems.
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.
what i did was basically salvage anything I could from my interface script but not including the code I suspected that caused the corruption (i started working on user presets so i think i did a stupid code mistake there)
and then i just rebuild the sampler from scratch as I still remember how I did it quite well. i even made it more efficient
@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"
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?
@d-healey i just tried your script, it had the same issues as the original one before.
Time Attenuation just "marches" across the table every note press instead of actually giving the note length.
EDIT: Here's a video for demonstration:
https://www.youtube.com/watch?v=Is_Q9DLsnK0&feature=youtu.be
I assume the fix is the same as i did for the first one, apparently changing the collection type for the noteLength to an Array fixes it for me.
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;
}
}