Export to HLAC monolith unsupported samplerate error
-
@Christoph-Hart Ok, I'll do this. Thanks
Edit : With conversion I loose loops metadata.
To share my plugin, I 'll have to give a folder with the wav files, I can't use the HLAC monolith : ( -
@Jerems134 Use a converter that preserves loops, SoX might do this
-
@d-healey I use Adobe Media encoder.
With SoX isn't too complicated to convert hundreds of samples ? -
@Jerems134 It's just a simple loop, you can almost certainly find a script to do it by Googling, what OS are you using?
-
This post is deleted! -
@Jerems134 I'll post a script in a little while
-
Well I can't get SoX or FFMPEG to retain the loops unfortunately, but it could just be me using the wrong commands. I've asked some others to see if they know a solution for that.
In the meantime you could try Reaper, it can definitely export loop points and it can do batch export.
There are a few ways to do it, first I'd try the batch file convert tool, if that doesn't work I'd just import all of your samples on to a single track, extract the loop points as markers and then do a batch export (with embedded markers enabled).
I show this second technique in this video:
https://youtu.be/90SmO_dMIJs?t=993 -
@d-healey Ok thank for taking time to find a solution. Adobe media encoder keeps the original metadata normally, but not the loop start/end too.
I 'll share the wav files with my plugin, it's too complicated to use SoX with the terminal or import/export in an DAW with the amount of samples I 've to convert.
Thanks for all things you do for Hise community, i follow you on Patreon. -
it's too complicated to use SoX with the terminal
Just run this script and it will convert a whole folder of wavs to 48k (no loop points yet though).
-
Another option is to "fix" the loop points inside HISE. Your basic samplerate is 24kHz when you've imported the samples and created the samplemaps, but now you've converted it to 48kHz. This means that every sample index is just being multiplied by 2, so if your loop start was at sample index 1000, it now needs to be at 2000.
Just drop this in a script processor that sits in a Sampler and it will operate on the currently loaded sample map (Be aware that if you paste this in the onInit callback it will get executed right away).
/** Select all samples in the current samplemap ".*" is Regex and means everything. */ const var allSamples = Sampler.createSelection(".*"); /** You'll get an array of all samples, which you can iterate */ for(s in allSamples) { /** Just multiply all sample properties with 2 */ s.set(Sampler.LoopStart, parseInt(s.get(Sampler.LoopStart)) * 2); s.set(Sampler.LoopEnd, parseInt(s.get(Sampler.LoopEnd)) * 2); s.set(Sampler.SampleEnd, parseInt(s.get(Sampler.SampleEnd)) * 2); } /** This needs to be called after a sample manipulation op in order to refresh the UI. */ Sampler.refreshInterface();
-
@Christoph-Hart Does this just need to be ran once, and then the sample map manually resaved?
-
yup, it's just a shortcut to selecting each sample and typing in the values by hand.
-
@Christoph-Hart Would it be possible to use some of this code to add controls to the user UI of the plugin itself and change the loop start and end points?
-
Signet is the way to go - https://github.com/SamWindell/Signet/
I just tested sample rate conversion and it does preserve the loop points.