• Free to test Reactive Grand Piano - work in progress

    26
    2 Votes
    26 Posts
    4k Views
    hisefiloH

    @jadg yes, will create a .zip with all of them

  • This topic is deleted!

    1
    0 Votes
    1 Posts
    3 Views
    No one has replied
  • Free Brush Drums Kit (VSTi Mac Only)

    17
    2 Votes
    17 Posts
    2k Views
    hisefiloH

    Just added a video... :)
    https://youtu.be/_Y1W5Bvw_6w

  • Melodica download (VST/AU Mac Only)

    5
    1 Votes
    5 Posts
    2k Views
    hisefiloH

    @christoph-hart yesss! I found that days ago. Wavetable based melódica :). Thanks will do the .gitignore thing. So sorry. Im basically a marketer and musician, not a developer

  • Template for beginners needed

    8
    0 Votes
    8 Posts
    1k Views
    d.healeyD

    @tibo Thanks :) if you check out the video tutorials on the main HISE website they are mine and you can find some more on YouTube. I'll be doing more when I find the time.

  • audio demo with my HISE creations

    3
    3 Votes
    3 Posts
    826 Views
    staiffS

    @remarkablex said in audio demo with my HISE creations:

    Sounds Cool, good job.... I've followed you on soundcloud ;) :)

    Gasp ! Damned ! ;)

    Thanks. Other creations on soundcloud was unfortunaly old and bad mixed. played with another VST than HISE.
    My goal now is to create songs with 70/80 % of HISE creation (maybe it's just me but it's really easier to create a patch on MY synth that I created - so i know exactly how it works/sound)

    My dream : 100 % Personnal creations - 0% other ;)

  • Pitch and Mod wheel display

    6
    2 Votes
    6 Posts
    2k Views
    Christoph HartC

    Yes good idea, will do.

  • scrolldown for samplemap menu

    2
    0 Votes
    2 Posts
    668 Views
    staiffS

    answered by mylself.
    but the dark grey scrolling on black BG...
    but i love the "behaviour" of the dropdown panel when move center wheel mouse button ;)

  • Factory Preset Creator

    45
    0 Votes
    45 Posts
    10k Views
    Christoph HartC

    Ah you're right, I changed this after writing this blog entry because the combination of hardcoded presets with user presets was a mess. I'll update the post.

  • About after touch controller number

    4
    0 Votes
    4 Posts
    1k Views
    Christoph HartC

    yes, the pitch wheel uses 14bit resolution = +16384. Aftertouch is 7 bit.

  • CC To Sync

    1
    2 Votes
    1 Posts
    623 Views
    No one has replied
  • Lost with presets/banks

    7
    0 Votes
    7 Posts
    2k Views
    Dark BoubouD

    Thank you that seems logical! :)

  • General Purpose Microphone Mixer

    1
    3 Votes
    1 Posts
    895 Views
    No one has replied
  • This topic is deleted!

    1
    0 Votes
    1 Posts
    2 Views
    No one has replied
  • Multi CC Remapper

    1
    0 Votes
    1 Posts
    573 Views
    No one has replied
  • Controller Value To Note On Velocity

    3
    1 Votes
    3 Posts
    762 Views
    d.healeyD

    Oh I'd completely forgotten Math.max(). Good idea! I'll update my original post

  • Zero-effort sustain controller

    6
    1 Votes
    6 Posts
    2k Views
    d.healeyD

    I think most samplers respond to the sustain pedal correctly by default, I'm not sure what you'd put on the UI for this, maybe a sustain pedal on/off indicator? Seems a little unnecessary though and would just take up space. Probably best to just mention it in the manual if it isn't already.

  • Retrigger On Release

    2
    1 Votes
    2 Posts
    834 Views
    Christoph HartC

    Nice. I have nothing to add about the functionality - it pretty much says what it does :) However I'd like to propose another way of posting these kind of snippets.

    Post only the script (Edit -> Save Script to clipboard) with Javascript syntax highlighting (you can use ```javascript for the start tag to enable Javascript syntax highlighting). /** * Auto Retrigger on Release * Author: David Healey * Date: * Modified: * License: GPLv3 - https://www.gnu.org/licenses/gpl-3.0.en.html */ //INIT Content.setHeight(50); const var velocities = Engine.createMidiList(); const var btnEnable = Content.addButton("Enable", 0, 10); const var cmbCC = Content.addComboBox("CC Trigger", 150, 10); for (i = 0; i < 128; i++) { cmbCC.addItem(i); } //FUNCTIONS //CALLBACKS function onNoteOn() { velocities.setValue(Message.getNoteNumber(), Message.getVelocity()); } function onNoteOff() { if (btnEnable.getValue()) { Synth.playNote(Message.getNoteNumber(), velocities.getValue(Message.getNoteNumber())); } } function onController() { if (Message.getControllerNumber() == cmbCC.getValue()-1) { Message.getControllerValue() > 64 ? btnEnable.setValue(1) : btnEnable.setValue(0); } } function onTimer() { } function onControl(number, value) { } Then you can add an example patch as HiseSnippet that demonstrates the behaviour. This is a sine generator with an AHDSR Envelope (important because you'll get stuck notes otherwise!): HiseSnippet 1320.3oc4XskbaaCEkzxbZDiiaxLs8aL9KIGaJI+HMiScsdXKakHaqQTws8qTHRHILgDPgDTNpcxlnqftT5RnKkrCZAHHMorYsi5zlXOgeQbu2CvAmKvEfriG0B46S8TTueuoiQJpKoYNkvF0XDDSTZsuh5xZGC8YHOfzT8oig99HaEU0bGJLnleQkvm2uWcnCjXgRLonbFEagZicwrDq+b0WfcbZBsQ8vtohdqpsrnjFTGZ.mO4zJqLFZ8Z3PzIPQXKnoLAiN2WQsr1laX385J8+kZF7mIM2n9l8di30mW2nqqQ3Smydd4VxWUrB77PD1Yb3JpZp+E+QU6.aLi5YxfLDuOWrN0dp4H54D4PeF1G22AIZTQwjyIo4lTGawjW7tRiQXG6NwRnuBuu6jHn4jB5WocL1Feg8Dg8ggN.IHRKspKbczqRZ5UNS5UIC5ojhcKJYGmDT6.GHaVlIxrQNvzYS5sHLDwGyllNy+IktORqClYMJa9tPF7kmn9+luQI+GncvfAHKVBYWTq4O9wMSurjJ2WyDSPgatCIxWG1F7CvIHvgHBxSHpWy16+7+9s2mZw3idOOHweL0elN1D4h6QIBAIw3K8QM8PuoqHIm1dCJzKSWueul74XlXLgr.uvUK0boAD1LqNx8AmRRWaX1MMohOiBEK9InPwbTGS8pa8djlokGdLKwifaeiVWDyCObH+.hSIftHGDjmISyPILkE9sbZkVcUcvpfZALJHAG8BbQNGQ81ArObB1FbDB5flJruOe9sCP7FWiwCvH6cDMZyW.R74dNrS6IaBVGLhwF6uSoRme94FCIAFTugkbjA4WZ3Xm02znrAhXLh45nuZIc8RkZcRqd5MnhBELCeD6HDd3HVgsKW7Y5570r9LvDnGXBxgZgYXjOXWvAjg7kVFVdHNuD4m1XeVgYAzmQNf.4pOO93tGZaWOfwnjBqH8sxZfxqApHFqDjVt8azXVTMnt8o0ousvJbO8jRGGaksiQqOf5AJf4nJ+L.F7cfJa7T9KO9wE0+U87g8nneZwPtEv73emXp27kmznWqSOwTznQs1sqWqwKL0GDPrDKh44lSnLzojBgcRhBHjoyfNAnBGyWLvOi1XHhIB8j.29HuBEWCjxwYRbSKTTNtWt6GLP1+3AfBWHZg.CGhhE0yy8lOr3kwXG3TAp+4QNEMGdCzTPn7u6RbRn5dTGGQ.wzJE9D2w8BX2ckorTbd8JEyKoclPihB78fmrEXujkJIBakhfcxxd4rnrnTaDa4dt5bo.IjpbsQzGwwckJc5eXUOrjKKSEHkzhfYmNFcQa45lXKkUtHUm1Thdj1Z3jIivRLkwIdQaUDmsGENOTVXoqkiJcI23of4kktmlTVUB0izmXnbYzOLBc7FvP7KokrK7R8Q0NUuUbQq+kk6WRx2uPq1Q6a1Mhlguyq4I1YMFcyzrFiwu5di.uIybp99HK3zqXUF7UszFwGtzlOhOKRZaTMr6tvvu2upYfOalKs7S+Q7IRotFxk0vbeXZ3Mbc+qKO+.M4LBDdina22ld4XtJk+a2jcIsv0.2Ez0uTKZ04cBgcYsnMN2Ej1q8C.y844G.1kFvvjgGC42x9s7JU7qpXx+vKKDmIDBxwW7iPVPbtorcYQa4WdQrKG+WRhbVQzVMxYkXmeTFCWnkG8UVxyjE0buWnE97lD9WgxqcrnMnR7ovBswkee7WYYID604pS1H1XtQr4biXq4Fw1yMhmL2H914FwSuFDhO9Q7EctxsdJJ+8GlOHe

    This allows both to check out the functionality faster as well as making the code more readable in the forum - also then you don't need to specify the license since it's already in the code - DRY :)

  • Zimmer Bend

    2
    2 Votes
    2 Posts
    1k Views
    Christoph HartC

    Amazing, the cluster sound when used with the sines that go both up and down really gives that Joker Theme vibe (you just need to replace the sines with cello samples and run it through a guitar amp :)

  • Random, Cycle, Synthetic, Hybrid Round Robin

    13
    1 Votes
    13 Posts
    3k Views
    d.healeyD

    Version 3.0: Major revision.

    Incorporated Christoph's randomising system. Added namespace for RRTypes Removed random no repeat mode - I could see no point in keeping it when we have the random full cycle Aimed for simpler code and lower CPU usage so the RR is no longer per note it is for the whole keyboard. Reset timer is still per note though CPU usage of on note callback is now around 0.60 on average on my system (before it was running up to 3.5!) Added sample range knob for synth and hybrid modes. This is used to set how far from the played note the sample borrowed modes will take samples from. So setting it to 1 means the samples 1 down and one up from the played note will be used, as well as the actual note's sample. /** * Multi-Round Robin script v3.2 * Author: David Healey, Christoph Hart * Date: 07/01/2017 * Modified: 20/02/2017 * License: GPLv3 - https://www.gnu.org/licenses/gpl-3.0.en.html */ //INIT reg noteNumber; reg groupList = []; reg groupIndex; reg offsetList = []; reg offsetIndex; reg offset; namespace RRTypes { const var OFF = 1; const var REAL = 2; const var SYNTH = 3; const var HYBRID = 4; }; namespace RRModes { const var CYCLE = 1; const var RANDOM = 2; const var RANDOM_CYCLE = 3; }; const var timer = Engine.createMidiList(); const var excludedIds = "(elease)"; //Regex string of words in sampler IDs to exclude RR from const var samplerNames = Synth.getIdList("Sampler"); //Get the ids of all child samplers const var samplers = []; //Get child samplers for (samplerName in samplerNames) { if (Engine.matchesRegex(samplerName, excludedIds) == true) continue; //Skip excluded IDs samplers.push(Synth.getSampler(samplerName)); //Add sampler to array samplers[samplers.length-1].enableRoundRobin(false); //Disable default RR behaviour } //GUI Content.setHeight(100); //RR Type and Mode Combo Boxes const var cmbType = Content.addComboBox("Type", 0, 10); cmbType.set("items", ["Off", "Real", "Synthetic", "Hybrid"].join("\n")); const var cmbMode = Content.addComboBox("Mode", 150, 10); cmbMode.set("items", ["Cycle", "Random", "Random Full Cycle"].join("\n")); //Number of groups knob const var knbNumGroups = Content.addKnob("Num Groups", 300, 0); knbNumGroups.setRange(1, 100, 1); //Playable Range controls const var knbLowNote = Content.addKnob("Low Note", 450, 0); knbLowNote.setRange(0, 126, 1); const var knbHighNote = Content.addKnob("High Note", 600, 0); knbHighNote.setRange(1, 127, 1); //Reset timeout knob const var knbReset = Content.addKnob("Reset Time", 0, 50); knbReset.setRange(1, 60, 1); knbReset.set("suffix", " Seconds"); //Microtuning knob const var knbMicroTuning = Content.addKnob("Microtuning", 150, 50); knbMicroTuning.setRange(0, 100, 0.1); //Borrowed Sample Range const var knbSampleRange = Content.addKnob("Sample Range", 300, 50); knbSampleRange.setRange(1, 12, 1); //----------------- //FUNCTIONS /** Swaps two elements in an array randomly. */ inline function swapRandomly(arr) { local firstIndex = Math.randInt(0, arr.length); local secondIndex = Math.randInt(0, arr.length); local temp = arr[firstIndex]; arr[firstIndex] = arr[secondIndex]; arr[secondIndex] = temp; } /** Swaps every element in the array. */ inline function swapEntirely(arr) { local i = 0; while(++i < arr.length) swapRandomly(arr); } inline function resetGroupList(count) { local i; for (i = 0; i < count; i++) { groupList[i] = i; } } inline function resetOffsetList(count) { local i; //Build array going from -value to +value+1 (always need to account for 0) for (i = 0; i < count*2+1; i++) { offsetList[i] = i-count; } } //CALLBACKS function onNoteOn() { noteNumber = Message.getNoteNumber(); if (cmbType.getValue() != RRTypes.OFF && noteNumber >= knbLowNote.getValue() && noteNumber <= knbHighNote.getValue()) { //Group based RR if (knbNumGroups.getValue() > 1 && (cmbType.getValue() == RRTypes.REAL || cmbType.getValue() == RRTypes.HYBRID)) //Real or Hybrid RR { switch (cmbMode.getValue()) { case RRModes.CYCLE: groupIndex = (groupIndex + 1) % groupList.length; break; case RRModes.RANDOM: groupIndex = Math.floor(Math.random() * groupList.length); break; case RRModes.RANDOM_CYCLE: if (++groupIndex >= groupList.length) { groupIndex = 0; swapEntirely(groupList); } break; } } //Reset groupIndex to 0 if only one group is present or the reset time has elapsed if (knbNumGroups.getValue() == 1 || Engine.getUptime() - timer.getValue(noteNumber) > knbReset.getValue()) { groupIndex = 0; resetGroupList(knbNumGroups.getValue()); } //Set active group for each sampler if (samplers.length > 0) { for (sampler in samplers) { sampler.setActiveGroup(1 + groupList[groupIndex]); } } //Synthetic sample borrowed RR if (cmbType.getValue() == RRTypes.SYNTH || cmbType.getValue() == RRTypes.HYBRID) //Synthetic or Hybrid RR { switch (cmbMode.getValue()) { case RRModes.CYCLE: offsetIndex = (offsetIndex + 1) % offsetList.length; break; case RRModes.RANDOM: offsetIndex = Math.floor(Math.random() * offsetList.length); break; case RRModes.RANDOM_CYCLE: if (++offsetIndex >= offsetList.length) { offsetIndex = 0; swapEntirely(offsetList); } break; } //If reset time has elapsed, reset index if (Engine.getUptime() - timer.getValue(noteNumber) > knbReset.getValue()) { offsetIndex = parseInt(Math.floor(offsetList.length / 2)); resetOffsetList(knbSampleRange.getValue()); } //If the played note + the offset are within the playable range if (noteNumber + offsetList[offsetIndex] > knbLowNote.getValue() && noteNumber + offsetList[offsetIndex] < knbHighNote.getValue()) { Message.setTransposeAmount(offsetList[offsetIndex]); //Transpose the note Message.setCoarseDetune(-offsetList[offsetIndex]); //Use coarse detune so setting can be picked up by later scripts } } //Apply random microtuning, if any if (knbMicroTuning.getValue() > 0) { Message.setFineDetune(Math.random() * (knbMicroTuning.getValue() - -knbMicroTuning.getValue() + 1) + -knbMicroTuning.getValue()); } timer.setValue(noteNumber, Engine.getUptime()); //Record time this note was triggered } } function onNoteOff() { } function onController() { } function onTimer() { } function onControl(number, value) { switch(number) { case knbNumGroups: groupList = []; resetGroupList(value); break; case knbSampleRange: offsetList = []; resetOffsetList(value); break; case cmbType: switch (value) { case RRTypes.REAL: knbSampleRange.set("visible", false); if (knbNumGroups.getValue() == 1) { number.setValue(RRTypes.OFF); } break; case RRTypes.SYNTH: knbSampleRange.set("visible", true); break; case RRTypes.HYBRID: knbSampleRange.set("visible", true); if (knbNumGroups.getValue() == 1) //If there are no RR groups then Hybrid defaults to synth { number.setValue(RRTypes.SYNTH); } break; } break; case cmbMode: resetGroupList(knbNumGroups.getValue()); resetOffsetList(knbSampleRange.getValue()); offsetIndex = 0; groupIndex = 0; break; } }

36

Online

1.6k

Users

11.4k

Topics

99.4k

Posts