Demo of the HISE library I'm currently working on
-
I'm putting HISE through its paces with a full featured orchestral library, including multi-mics, multi-articulations, multi-dynamics (crossfading), tons of modulators, round robin, lots of scripting, fully tabbed GUI :) it seems to be holding up well.
(Excuse my clumsy keyboard playing)
https://youtu.be/xDMl21zD8N4 -
This is great. Have you tried exporting it yet?
I noticed a few minor things while watching the video:
- the staccato notes get chopped off if you play chords. You might want to change the Retrigger Behavior (or increase the voice amount)
- you are really pushing the engine to it's limit with preload sizes of 512 samples (and people without SSDs won't have a good time with this setting). I wouldn't go lower than 4096 samples (for non SSDs I would even recommend 8192 samples). Also, keep in mind that the streaming buffer size is at least
8 x audio buffer size
(this is necessary to have enough samples available when playing the samples with high pitches). - also CPU seems a bit high (what audio settings are you using and what are your CPU specs?) We might be able to peel off a few cycles. Did you check the latest "Debug Logger" feature I added recently? If you enable it, it profiles every module and spits out a warning if the CPU usage goes above a certain threshhold.
If you want, you can send me the current project - without the samples, I still got them somewhere (unless you changed the samples, obviously).
-
Yeah I noticed that with the staccatos too, I shall have to look into it. I haven't tried exporting a plugin from the latest version yet but I did a few weeks ago and it seemed to go okay, only the plugin kept asking me to direct it to the samples. I still need to implement a preset system before I'm ready to make the final plugins.
I've provided drop down menus on the first tab so the user can select a suitable buffer size, but yeah I should check that that isn't the reason for the higher CPU usage. I have my audio settings at 44100 and 256 samples. My CPU is a hex core i7 6850K @ 3.5Ghz. I'll checkout the debug logger feature and send across the project files, I'm sure you'll spot things that I've missed.
-
You were right abut the staccatos, I had it set to kill notes, changed it to do nothing now.
How to I access the debug logger?
-
Tools -> Enable Debug logger.
It will open a popup above the keyboard. When you press close and show it points you to the log file
-
Thanks. I know why I didn't see the option - I forgot to compile a new version :p
-
The debug logger thinks I'm on Windows 8, I'm actually on Windows 10 - is this important?
-
Not really - I am calling a standard JUCE function to get the OS version so it might be something wrong there. Shouldn't be too much of a problem though
-
Ok cool. The CPU readout seems all wacky in the latest build
I'm getting some performance warning messages from the debug logger with my staccatos. I don't have much scripting going on there so I'm going to isolate the sample to see what's happening
Update: I'm exceeding the voice limit when playing a lot of staccatos. So that's ok, not a scripting issue :)
-
Can you post the debug log? If you post it here, it should get formatted correctly (it's using markdown syntax).
RE the CPU meter, I think I fixed that meanwhile, but there are a lot of changes that I haven't commited yet (new colour schemes, faster graphic rendering on OSX, more logging features), so I have to clean up a bit before commiting.
-
# Debug Log file Product: **HISE** Version: **0.99** Time created: **03.April 2017 - 20:50:40** ## System specification Device: **** User name: **Dave** CPU vendor: **GenuineIntel** CPU cores: **12** CPU speed: **3473** Memory size: **65447** Page size: **4096** OS: **Windows 8.0 64bit** Host: **Standalone** Process bit architecture: **64 bit** Sandboxed: ** No** ### SampleRateChange - Time: **0.00** / CallbackIndex: **1** - Old: **-1** - New: **44100** ### BufferSizeChange - Time: **0.00** / CallbackIndex: **1** - Old: **-1** - New: **512** ### #0: PerformanceWarning - Time: **47.61** / CallbackIndex: **4102** - Location: `susRelease::SynthRendering` - Voice Amount: **270** - Limit: `15.0%` Avg: `0.32%`, Peak: `15.4%` ### #1: PerformanceWarning - Time: **47.75** / CallbackIndex: **4113** - Location: `susRelease::SynthRendering` - Voice Amount: **235** - Limit: `15.0%` Avg: `0.32%`, Peak: `16.5%` ### #2: PerformanceWarning - Time: **47.76** / CallbackIndex: **4114** - Location: `susRelease::SynthRendering` - Voice Amount: **235** - Limit: `15.0%` Avg: `0.32%`, Peak: `16.1%` ### #3: PerformanceWarning - Time: **47.77** / CallbackIndex: **4115** - Location: `susRelease::SynthRendering` - Voice Amount: **260** - Limit: `15.0%` Avg: `0.32%`, Peak: `17.3%` ### #4: PerformanceWarning - Time: **47.79** / CallbackIndex: **4116** - Location: `sustainMain::SynthRendering` - Voice Amount: **290** - Limit: `15.0%` Avg: `0.32%`, Peak: `24.4%` ### #5: PerformanceWarning - Time: **47.79** / CallbackIndex: **4116** - Location: `susRelease::SynthRendering` - Voice Amount: **290** - Limit: `15.0%` Avg: `0.32%`, Peak: `24.2%` ### #6: PerformanceWarning - Time: **47.79** / CallbackIndex: **4116** - Location: `Flute I::SynthChainRendering` - Voice Amount: **290** - Limit: `50.0%` Avg: `2.46%`, Peak: `53.2%` ### #7: PerformanceWarning - Time: **47.80** / CallbackIndex: **4117** - Location: `susRelease::SynthVoiceRendering` - Voice Amount: **290** - Limit: `20.0%` Avg: `0.03%`, Peak: `21.3%` ### #8: PerformanceWarning - Time: **47.95** / CallbackIndex: **4130** - Location: `susRelease::SynthRendering` - Voice Amount: **265** - Limit: `15.0%` Avg: `0.33%`, Peak: `18.0%` ### #9: PerformanceWarning - Time: **48.30** / CallbackIndex: **4161** - Location: `susRelease::SynthRendering` - Voice Amount: **175** - Limit: `15.0%` Avg: `0.33%`, Peak: `16.1%` ### #10: PerformanceWarning - Time: **48.81** / CallbackIndex: **4204** - Location: `susRelease::SynthRendering` - Voice Amount: **215** - Limit: `15.0%` Avg: `0.34%`, Peak: `18.0%` ### #11: PerformanceWarning - Time: **48.88** / CallbackIndex: **4211** - Location: `susRelease::SynthRendering` - Voice Amount: **210** - Limit: `15.0%` Avg: `0.34%`, Peak: `16.6%` ### #12: PerformanceWarning - Time: **48.91** / CallbackIndex: **4213** - Location: `susRelease::SynthRendering` - Voice Amount: **210** - Limit: `15.0%` Avg: `0.34%`, Peak: `17.6%` ### #13: PerformanceWarning - Time: **49.52** / CallbackIndex: **4265** - Location: `susRelease::SynthRendering` - Voice Amount: **245** - Limit: `15.0%` Avg: `0.36%`, Peak: `15.7%` ### #14: PerformanceWarning - Time: **49.53** / CallbackIndex: **4267** - Location: `susRelease::SynthRendering` - Voice Amount: **245** - Limit: `15.0%` Avg: `0.36%`, Peak: `15.2%` ### #15: PerformanceWarning - Time: **49.57** / CallbackIndex: **4270** - Location: `susRelease::SynthRendering` - Voice Amount: **295** - Limit: `15.0%` Avg: `0.36%`, Peak: `15.9%` ### #16: PerformanceWarning - Time: **49.57** / CallbackIndex: **4271** - Location: `susRelease::SynthRendering` - Voice Amount: **275** - Limit: `15.0%` Avg: `0.36%`, Peak: `15.6%` ### #17: PerformanceWarning - Time: **49.72** / CallbackIndex: **4283** - Location: `susRelease::SynthRendering` - Voice Amount: **255** - Limit: `15.0%` Avg: `0.36%`, Peak: `17.0%` ### #18: PerformanceWarning - Time: **49.73** / CallbackIndex: **4284** - Location: `sustainMain::SynthRendering` - Voice Amount: **285** - Limit: `15.0%` Avg: `0.36%`, Peak: `18.1%` ### #19: PerformanceWarning - Time: **49.74** / CallbackIndex: **4284** - Location: `susRelease::SynthRendering` - Voice Amount: **285** - Limit: `15.0%` Avg: `0.36%`, Peak: `19.8%` ### #20: PerformanceWarning - Time: **49.75** / CallbackIndex: **4285** - Location: `susRelease::SynthVoiceRendering` - Voice Amount: **275** - Limit: `20.0%` Avg: `0.08%`, Peak: `20.9%` ### #21: PerformanceWarning - Time: **49.76** / CallbackIndex: **4286** - Location: `susRelease::SynthRendering` - Voice Amount: **265** - Limit: `15.0%` Avg: `0.36%`, Peak: `17.5%` ### #22: PerformanceWarning - Time: **49.78** / CallbackIndex: **4288** - Location: `susRelease::SynthRendering` - Voice Amount: **265** - Limit: `15.0%` Avg: `0.37%`, Peak: `15.3%` ### #23: PerformanceWarning - Time: **49.83** / CallbackIndex: **4292** - Location: `susRelease::SynthRendering` - Voice Amount: **220** - Limit: `15.0%` Avg: `0.37%`, Peak: `18.6%` ### #24: PerformanceWarning - Time: **50.29** / CallbackIndex: **4333** - Location: `susRelease::SynthRendering` - Voice Amount: **130** - Limit: `15.0%` Avg: `0.37%`, Peak: `18.5%` ### #25: PerformanceWarning - Time: **50.47** / CallbackIndex: **4348** - Location: `susRelease::SynthRendering` - Voice Amount: **120** - Limit: `15.0%` Avg: `0.38%`, Peak: `17.0%` ### #26: PerformanceWarning - Time: **50.49** / CallbackIndex: **4350** - Location: `susRelease::SynthRendering` - Voice Amount: **120** - Limit: `15.0%` Avg: `0.38%`, Peak: `16.1%` ### #27: PerformanceWarning - Time: **56.06** / CallbackIndex: **4829** - Location: `staccRelease::SynthRendering` - Voice Amount: **205** - Limit: `15.0%` Avg: `0.41%`, Peak: `17.8%` ### #28: PerformanceWarning - Time: **56.16** / CallbackIndex: **4837** - Location: `staccRelease::SynthRendering` - Voice Amount: **205** - Limit: `15.0%` Avg: `0.41%`, Peak: `16.3%` ### #29: PerformanceWarning - Time: **59.82** / CallbackIndex: **5153** - Location: `staccRelease::SynthRendering` - Voice Amount: **290** - Limit: `15.0%` Avg: `0.44%`, Peak: `15.0%` ### #30: PerformanceWarning - Time: **59.88** / CallbackIndex: **5158** - Location: `staccRelease::SynthRendering` - Voice Amount: **255** - Limit: `15.0%` Avg: `0.44%`, Peak: `15.2%` ### #31: PerformanceWarning - Time: **60.49** / CallbackIndex: **5211** - Location: `staccRelease::SynthRendering` - Voice Amount: **195** - Limit: `15.0%` Avg: `0.45%`, Peak: `15.7%` ### #32: PerformanceWarning - Time: **60.52** / CallbackIndex: **5214** - Location: `staccRelease::SynthRendering` - Voice Amount: **195** - Limit: `15.0%` Avg: `0.45%`, Peak: `16.2%` ### #33: PerformanceWarning - Time: **60.57** / CallbackIndex: **5217** - Location: `staccRelease::SynthRendering` - Voice Amount: **195** - Limit: `15.0%` Avg: `0.45%`, Peak: `16.4%` ### #34: PerformanceWarning - Time: **108.44** / CallbackIndex: **9341** - Location: `sustainMain::SynthRendering` - Voice Amount: **130** - Limit: `15.0%` Avg: `0.47%`, Peak: `17.2%` ### #35: PerformanceWarning - Time: **108.45** / CallbackIndex: **9342** - Location: `sustainMain::SynthRendering` - Voice Amount: **130** - Limit: `15.0%` Avg: `0.47%`, Peak: `18.1%` ### #36: PerformanceWarning - Time: **108.46** / CallbackIndex: **9343** - Location: `sustainMain::SynthRendering` - Voice Amount: **130** - Limit: `15.0%` Avg: `0.47%`, Peak: `15.6%` ### #37: PerformanceWarning - Time: **108.57** / CallbackIndex: **9352** - Location: `sustainMain::SynthRendering` - Voice Amount: **145** - Limit: `15.0%` Avg: `0.47%`, Peak: `19.4%` ### #38: PerformanceWarning - Time: **108.68** / CallbackIndex: **9362** - Location: `sustainMain::SynthRendering` - Voice Amount: **155** - Limit: `15.0%` Avg: `0.47%`, Peak: `18.4%` ### #39: PerformanceWarning - Time: **108.71** / CallbackIndex: **9364** - Location: `sustainMain::SynthRendering` - Voice Amount: **155** - Limit: `15.0%` Avg: `0.47%`, Peak: `17.1%` ### #40: PerformanceWarning - Time: **108.72** / CallbackIndex: **9365** - Location: `sustainMain::SynthRendering` - Voice Amount: **140** - Limit: `15.0%` Avg: `0.47%`, Peak: `19.2%` ### #41: PerformanceWarning - Time: **108.73** / CallbackIndex: **9366** - Location: `sustainMain::SynthRendering` - Voice Amount: **140** - Limit: `15.0%` Avg: `0.47%`, Peak: `15.3%` ### #42: PerformanceWarning - Time: **108.77** / CallbackIndex: **9370** - Location: `sustainMain::SynthRendering` - Voice Amount: **140** - Limit: `15.0%` Avg: `0.47%`, Peak: `17.1%` ### #43: PerformanceWarning - Time: **108.83** / CallbackIndex: **9375** - Location: `sustainMain::SynthRendering` - Voice Amount: **195** - Limit: `15.0%` Avg: `0.47%`, Peak: `16.2%` ### #44: PerformanceWarning - Time: **108.84** / CallbackIndex: **9376** - Location: `sustainMain::SynthRendering` - Voice Amount: **180** - Limit: `15.0%` Avg: `0.47%`, Peak: `17.6%` ### #45: PerformanceWarning - Time: **108.86** / CallbackIndex: **9377** - Location: `sustainMain::SynthRendering` - Voice Amount: **165** - Limit: `15.0%` Avg: `0.47%`, Peak: `18.4%` ### #46: PerformanceWarning - Time: **108.87** / CallbackIndex: **9378** - Location: `sustainMain::SynthRendering` - Voice Amount: **165** - Limit: `15.0%` Avg: `0.47%`, Peak: `15.9%` ### #47: PerformanceWarning - Time: **108.88** / CallbackIndex: **9379** - Location: `sustainMain::SynthRendering` - Voice Amount: **165** - Limit: `15.0%` Avg: `0.47%`, Peak: `16.4%` ### #48: PerformanceWarning - Time: **108.98** / CallbackIndex: **9388** - Location: `sustainMain::SynthRendering` - Voice Amount: **200** - Limit: `15.0%` Avg: `0.47%`, Peak: `15.5%`
-
That looks OK. The performance warnings are slightly above the threshhold so it's nothing unexpected.
Are you using any filters? They are currently the most inefficient part of HISE.
-
No filters, I have 2 LFOs for vibrato, a few CC modulators, some envelopes, and a sample start modulator. I'm also using a simple gain for each channel.
-
Alright. I'll wait for your project files then I can hook up a real profiler to see if there is some unnecessary overhead somewhere.
-
Well done lads, nice to see optimisation getting some air space.
-
Private message with project download link sent. The new UI colour scheme looks good.
-
I noticed that LFOs seem to make quite an impact on CPU
-
Yeah, I recommend using LFOs as global modulators once and just grab their value at the various location (it seems like you have duplicated the LFO for gain & pitch vibrato, which also increases the complexity and kills the workflow - you'll need to change it at two locations every time).
I also noticed you are using a lot of MIDI controllers for a lot of crossfading stuff. There is a neat little trick with global modulators and that is to use a table on the receiving modulator:
HiseSnippet 1083.3oc6Y0sbhaCEVBPcy1scmlooyzoSufKZuZayfIIa+4lPBIjlYCILwT1d2VgQDzr1RTYYRIOk8QnOB6aPqj+AKm0PfoIjzMvEL9bjNxemiN57crcKA2g36yE.3yZOdHA.+Dj8XlbP8AXJCb7A.3yQMw9Rhnbjp8GOD66S5AfvhGoU.eZIP3u2s69XWLygjpB.5voNjSndTYp1V0dE00sAtGoM0yX1aW6XGNqN2kGnvSQTEvPryawWPNEqmVADXDkboO.VAsU0MEu0p6U6s4T+05L5Uc2O7RfSfPPXxNJyAPD7eT+fnC6QkbgsDKIp0DsOu2X6A7KYQ25NTeZWWhVvBXqvTj5Fb2dZmWe8wLUXoO1gXXFn9.pauVIgUe..tVqzfbwnf7FnlzdzI5SC1eV3.kSsvLbCKjExkx.YKSHWIWHakC7.FnqTD5Tff2KvEKyhL8tc7.Td1DAcjf4SkiMyFtWg65nVToyf7wagbvqZi5tFuwa9eJ5v98INxTvVB032Vt6zqEAkuBcjKuK1MM.xYREpHhPb80wCWdx3kSmvzKD7WyagfeetKD.KN2ADq4Nf.K8AwIyO+81k7uUObNsxe4DPgFP9im.YUbSm1H3ttwIVqGELMzdi.9W8IswgHJU2wrQDgTaTZdV5ZdZfWW0JaLeaONWNHatFs1Aj93.WYGra.I+UJ7Fe.VhAvuEUc6qQzL5L0e8eg9xepdn76UJo37EcuiJ2U7wY4ty4ARJ6hlXof9mJBdU9fspfhCQgDFi3pI8gEzazQxUzx5HiMg0qRReBwCZokgwCZkLno697H28YHaU4wvdnBc1uHTt7qwiHkOhnJbp23VtEOOyQpt6sEXl+PtelE1l3QayY5fdpR0QsFBxebtNQJ6ABrH2gd2tMT9Xt1XikAhvLx873ALYlLvhypErodJIaeHFy+QQ096z9vVfR8ELv6SRvqM0anK4PUYYWtRSTko35qSzdi.dOoT02eplMpcNwkfMyb+lZmnx3vBUbfbq5qV2Ds1r1a9RTDzKqOQV9AUuxwaQIczoAXGrfhYxI9QnKfPmvubQXigELXG2As0KSIFiYCab0q27E4wVFKqIZYJBBcfB9cynkye95MMbmrauhx8+MTtqmP4pYWSob2HTtOW38.gw0xbku1XUMG6.hLfkc5QpxLKs20P4cFyasZIJqZprElkYwTxYVol5coDw+d2kLgLZEg7+smNXEI7Gpjvpj8aIR3XR1567pMMeD0UjvOFdMeyttkp5+CfyGK4dFheymOAcJm5mTcL756qlEV8XvqXcWw5d+y59QnegdwfaWZ2o9ruIuo3Uztqd124mGaYbO7vNB9abhxzB+90gZT9MK7yv+TTSsbYKvnnuXhN13oxNeiiiNX+8pnS9VTcgsXqE1hsWXK1Ygs3kKrE+vBawONCKzkB1KPx8hN5A.+KvSZYNU
I'll have to make more tests but this approach looks like it is faster (because it doesn't have to process the MIDI events and apply the smoothing filter for every module, but only once in the global modulator). But it also looks a bit cleaner to me (plus you can change the "responsiveness of each MIDI controller by changing the table in the global modulator pretty easily)
-
Aha that looks interesting, thanks, I shall experiment.
-
Another library I'm building - woodwinds again :) Just need to implement a preset system for it