AudioLoopPlayer load
-
Can you write the lines I need in this example
So that I can get an idea of it and understand it.
That would be nicereg myList = Engine.loadAudioFilesIntoPool(); //Console.print(trace(myList)); const ss = myList.substring(s.indexOf("}") + 1, s.indexOf("/")); Knob 1 - Select Folder Synth.getAudioSampleProcessor("Audio Loop Player_S1").setFile Knob 2 - Select Sample Synth.getAudioSampleProcessor("Audio Loop Player_S1").setFile
-
@MikeB I often find my self in very simmilar situations, and not only in working with HISE :)
In my case i found out that leaving projects aside for a while helps me understand them better and often rethink the initial ideas and find solutions. Also i work on at least 7 or 8 other projects in paralel and sometimes problems/solutions relate between them.But, i doubt i would have gotten anywhere without the help from community here in HISE forum. Especialy since i know almost nothing in regards to scripting and i can therefore easely relate to your problems and frustration.
-
@MikeB Take a break Mike
-
Here's a simple version that splits the audio files list into two arrays, one for folders, and one for files.
const audioFiles = Engine.loadAudioFilesIntoPool(); const folders = []; const files = []; inline function splitAudioFilesList() { for (x in audioFiles) { local folder = x.substring(x.indexOf("}") + 1, x.indexOf("/")); if (folders.indexOf(folder) == -1) // Prevents duplicate folder names folders.push(folder); files.push(x.substring(x.indexOf("/") + 1, x.length)); } } splitAudioFilesList(); Console.print(trace(folders)); Console.print(trace(files));
And here's another way (my preferred choice) which organises the samples into one array per folder. All of the arrays are stored in a single object so you can access them with
sorted.folderName[index]
.const audioFiles = Engine.loadAudioFilesIntoPool(); const sorted = {}; inline function sortAudioFilesList() { for (x in audioFiles) { local folder = x.substring(x.indexOf("}") + 1, x.indexOf("/")); local file = x.substring(x.indexOf("/") + 1, x.length); if (!isDefined(sorted[folder])) sorted[folder] = []; sorted[folder].push(file); } } sortAudioFilesList(); Console.print(trace(sorted));
-
@d-healey
Then, thanks to you, I have made a small step forward today. And the day was not completely in vain.
Thank you very much David.I will deal with this tomorrow
-
@d-healey
New day - new misfortuneJust kidding :-)
I have now implemented your scriptsnippet.
It works in principle - but unfortunately the samples are not
from the respective folder are loaded but always the first samples in the order.
So the bass samples appear in the Kick folder.
The bass samples appear in the HiHat folder.The array folders goes from 0-8
The array files goes from 0 -490
But in each folder there are only 55 samplesWith your 2nd method I don't know how to distribute them to the two knobs. The first one selects the folder and the second one selects the samples in the folder.
const audioFiles = Engine.loadAudioFilesIntoPool(); const folders = []; const files = []; var InstrumentID_S1; var VariationID_S1; inline function splitAudioFilesList() { for (x in audioFiles) { local folder = x.substring(x.indexOf("}") + 1, x.indexOf("/")); if (folders.indexOf(folder) == -1) // Prevents duplicate folder names folders.push(folder); files.push(x.substring(x.indexOf("/") + 1, x.length)); } } splitAudioFilesList(); Console.print(trace(folders)); //Console.print(trace(files)); //Knob-KitSelector---------------------------------------------------------------------- inline function onKitSelector_Knob_S1Control(component, value){ InstrumentID_S1 = parseInt(value); //Knobvalue 1-55 Console.print("{PROJECT_FOLDER}"+folders[InstrumentID_S1]+"/"+files[VariationID_S1]); }; Content.getComponent("KitSelector_Knob_S1").setControlCallback(onKitSelector_Knob_S1Control); //End -------------------------------------------------------------------------------------- //Knob-SampleSelector----------------------------------------------------------------- inline function onSampleSelector_Knob_S1Control(component, value){ VariationID_S1 = parseInt(value-1); //Knobvalue 1-55 Console.print("Variation_S1" + "{PROJECT_FOLDER}"+folders[InstrumentID_S1]+"/"+files[VariationID_S1]); }; Content.getComponent("SampleSelector_Knob_S1").setControlCallback(onSampleSelector_Knob_S1Control); //End ---------------------------------------------------------------------------------------------------
-
Here's a hybrid approach, a mix between my previous two versions. This one sorts the file paths into a 2D array. The first index is the folder, the second index is the file name.
So you can access them directly with the knob values.
sorted[knob value 1][knob value 2];
const audioFiles = Engine.loadAudioFilesIntoPool(); const folders = []; const sorted = []; inline function sortAudioFilesList() { for (x in audioFiles) { local folder = x.substring(x.indexOf("}") + 1, x.indexOf("/")); local file = x.substring(x.indexOf("/") + 1, x.length); if (folders.indexOf(folder) == -1) { folders.push(folder); sorted.push([]); } sorted[folders.indexOf(folder)].push(file); } } sortAudioFilesList(); Console.print(trace(sorted));
-
Unfortunately, absolutely nothing - nothing happens at all.
const audioFiles = Engine.loadAudioFilesIntoPool(); const folders = []; const sorted = []; var InstrumentID_S1; var VariationID_S1; inline function sortAudioFilesList() { for (x in audioFiles) { local folder = x.substring(x.indexOf("}") + 1, x.indexOf("/")); local file = x.substring(x.indexOf("/") + 1, x.length); if (folders.indexOf(folder) == -1) { folders.push(folder); sorted.push([]); } sorted[folders.indexOf(folder)].push(file); } } sortAudioFilesList(); //Console.print(trace(sorted)); //Knob-KitSelector---------------------------------------------------------------------------------------------------------------------- inline function onKitSelector_Knob_S1Control(component, value) { InstrumentID_S1 = parseInt(value); //Knobvalue 1-9 Console.print(sorted[InstrumentID_S1][VariationID_S1]); }; Content.getComponent("KitSelector_Knob_S1").setControlCallback(onKitSelector_Knob_S1Control); //Knob-SampleSelector---------------------------------------------------------------------------------------------------------------------- inline function onSampleSelector_Knob_S1Control(component, value) { VariationID_S1 = parseInt(value-1); //Knobvalue 1-55 Console.print(sorted[InstrumentID_S1][VariationID_S1]); }; Content.getComponent("SampleSelector_Knob_S1").setControlCallback(onSampleSelector_Knob_S1Control);
-
You have this in your onKitSelector_knob_S1Control callback
Console.print(sorted[InstrumentID_S1][VariationID_S1]);
VariationID_S1
doesn't exist in that callback (unless it's a scriptwide variable, but I'm not seeing it in your code). -
@d-healey
they were commented out - of course you can't work like that :-)Now I see in Console.print:
Interface: 41_EctoplasmKick_747.wav
Interface: 41_EctoplasmKick_747.wav
Interface: 45_SundayPerc_01_737.wav
Interface: 45_SundayPerc_01_737.wav
Interface: 47_ProvTom_809.wav
Interface: 47_ProvTom_809.wav2x the sample - no folder
correct would be:
02-Kick/41_EctoplasmKick_747.wavMaybe I should make a snippet - or?
-
@MikeB You get the folder name from the folders array.
-
@d-healey
Sorry but here is a snippet - it doesn't workHiseSnippet 1293.3ocyW0saiSDEdba8BwKfXk.o8xQ4pD0lzDX6xJUUQZSSPk9WTSYEqpJUSrmzLpimwxdbaiVEIdM16PhWDdK3EfG.dCfyX6Da25VZhDBFkKxb9a9N+M9L87k1zf.oOxnzoi8nHiOwr+XgZT6QDl.s2tHiWZ1hdoDuOS0mxo1JoOdaeexXzNi8HAATGjgwxemVZiRqfhV+42tCgSD1zTRHzakLa5ALWlJkZuV6y37tDG5oL2LR+pV6YKEskbYHfrkMaf7H1WQtjdDQK1RlHim0wgAXouhnnAfL6HcF2ej7FQr7ukEvFvo5MMQ8ACESF0dDi6zapWGfPFqzKMFrbbL3KLOj4vlQOMV74QLvoZjMFXrTdHsRNH07gfTWI2QafG.dFYf2Jwv6El8s8YdpTNZr8by8DJp+PBD1yBqXYQKc5GY1VBRHT0cIWQ65CaloQkW2nwZ3MZzn5lVVPnOPgul3mMoew9B4fK52DuEdpYtjpZKc8jBXSkxEHaYvZoFqOw0iSex1qXwKmBPRnCS1kwoAfM5HtjIn04Rhy1ynCtmrmTxqLCGC0AaesBmc9TZP.TQcRHYoQ5d.Y+PW.F6sKblaFQ7sDeFQwjhDZVLAGNR7vPgslbjcRO6CXApJUsduUogPGSkawLQFDW0pDvoDWZS3IfB.vs0CBG.GMSbYkaqyDNzaOdXkxSJWEuJt4Z3LzVubUvolYAvlOr9qmpOmJtTMJRS3GaHtRRDYlzw6qh2ZKbsl.LivYooR4EFLZpHZiTJN3ES+ryinMQSOx9wLO6ANhySrFfcsdSrlXYUTLbSq0WGJQBjbZcOv2TUT95R1XqqCCf.cgf7.oZD9JnNI.qFQ0gUt7FHVfcC0kKddTHMRTQLoBGbMLrdeuSN966z9zK5d7A614jIQsi9B3dl0iq.0+s9MjqszGitJrVlJ8Z+mrtWomTTP2mtsxGJ9sm1SsFzFxCoQEk2oDGJd7H9ATnioRrPahi81nc3F0diEjQymFJe2XW4UmlqOeUnpa0j7+cNqyOKeqjtpYxlVywsJ0CzxD4csIb9.3aCUdrPPbIRTtK+sJ+uI8U7kcOZFLeP7dIPn4MeJrYsM1.xg3j0+XpLey6bkzdnqtKNu8n9tN0YYkIRcjTQOVDeyJbiA9trFNrPdIliS8Kjsd7C+GSwJhP2AT+rI.sfv2jy+Q+m+z9nucbbKifPbUvTG6QS1mNVflWrWOkaCzLmMKoTeLK0HWq.wRIc+oNPI4UX9ikRDGDUEM8wmkL8QeNCJLPL.ieoYA8dnnHUxLc+xG9vxsPOAS8RyhKGxYMzu+qa1B8C6sKQQziHkfVvC7n9JlNOXrK8ZXdy3AlJYtKM3JkzKxcRJSQFlyoCc6rATa8tVims429oVtjTdHr1QmcHOa9cUvVlFqZfPi0+4O.Sl09+79sbyOrM59iHBCpJcB4DU9oW0iomv.ptyMlndTPQ.SMNqkmiQZaT3HsMKp35IB2WX1iorGULdWp.7pqV+WFuIOP3SM6LbHjzRA6Jlc+wE80.yATNQFpfIZNj.C4oKSNJzsO7FIaJfDgfxCzULKoafi22PuWGY5CC7Ds4ufUByl58FILaNkITrY6KuvNtWU+DjONhBfIQzquJYdndOdVOooYi5MPtvKitv1VGJp0DgJVmuZAz4qW.cd0BnyFKfNudAz4aV.cdyipi9QoaGpjtwsI.gdchtazvnif.UYQUjn+1Uy+3n
-
@MikeB said in AudioLoopPlayer load:
it doesn't work
It does exactly what you've told it to do.
Array elements are accessed by their index. So if you want the string in the folders array at index 0 you need to write
folders[0]
. Replace0
with the knob's value. -
It works fantastic
Here is the complete working snippet for all those who want to load kits or instruments and samples into the AudioLoopPlayer.
From David (the complex part) and from MikeB (the simple stuff)for example:
{PROJECT_FOLDER}05-Cymbal/JitterCymbal.wavThe whole thing looks for which folders are in the AudioPool and which samples are in them. And gives you the possibility with 2 Knobs
a. to select the folder and
b. the sample.HiseSnippet 1797.3oc4X0saaaCEVJIpsVscXcqCnWRXLf4fz3X2lzVrff5zDmgrlzXDmFLfrf.FIZahHSpIQmePQvta2tWgd2dM1ivdT1av1gT+QknjZ600VrI3KLO7vy4iG9wCOjsB3NjvPdfgYocNymXXdGq1mwD8VoGlxLVeUCyuv5kTQahGwQvCVNH.elwKNyGGFRbMLMm76j5YVZJC02e97Wf8vLGRlHCic4TGxFz9TQlzVMdI0yaMrKYGZeMsmuw5Nb1JbO9..SSZUyvG6bDtK4UXoZSXYXdiltT.JsEXAIzvbpWvcOqcO9IrH82kFROziHaT2nMXnHwqw8bkHV9eiU5Q8bakL2CMLLsZkEIlLJRbeqMotzT4YQjOW0AJaD5wCyItN3UeLgmoF7lJBd2ypsS.0Wj0iDa21ZclfDzACKA5vJRWiI9rRVqvAMXhp8wGQVK.ZjNhJOoVsGhVnVsoWz1FVFBEniwAnkG3R4av49s7vmQBpiVBo3HU6RDJnpZUorROjTQTrlkACkYGMdzAujwO7f1RSk.Gow3884LnQkxEnadi0F222iLz1qX0KmMQwRvuF0iDB1nIqKkQp5wwtKmJGBS7VbtWkTbzQtnEHGvd6mHCVHDD2XQ1RjtNHNXPe.FquJ3yEUB2EGPwBJmEKylx7.Wh5Lf4HEqrSlu2fFJpLs8arK0gGfpbJhxzP7z1kfdJ4wcvdwfB.voUCGbH3ZJqakSqRYtjS2pSkxmWdZzLn5ODoIatxSCSpTK.17pG+bYi2iv5J5oFI7i1AUINhjpcT6oQKsDZ15.LU3rThV9CB6knhzHkhBdQx2aekrykxU1Opy8tBWrer0.rKG241maaWTLbQ64lCnHgbORUeXtIpHBjT+HqKCCfBqAA4C4hdni.dRHRziHCqd7SfXAp+.Icw2m.KiXgpSByEMKB9dSqs256atxNGr1VarZysOWssNfA4tlKhAJ+a0SvGaKcijENqFSe1OJeWh5wYEr6StsJ.H+NI6odHrMza.Ih6cANNvd7wAgDXKSkHsVDEMcUsP0l8Y1kxuJT9hgtxyDuRu2EL99y.bvYhYCWru8xuwRwglatzzUJ1PzJQZdy3DWZI3JOc0PhPRZJBVYtDbvk..ZzPGBnpKZOB4.kHKdsXErm2gvoiUttErHBshokOG3mLjshSMe07MEgKef7R7MHYSdFW8YWXgObTNYpfOsYcRDdkDuq5vxh4dW65mj9YaqsZ+JtfrEK5rLHGM5hc0oSg8EaNORPgcKKhL35FXE1f9GRBRIQwJBUSkubsaObkq4DE2zTDBtLpXKeRb6rB5j8EMqS5slQ5jUWT1bTWpZpUfZYhtb8hFwqqPkiSDqNnpPU23mEW2XaOJP0Mn.F+JqBxeXnhTwUli9we0tgwPXpGXULcHm0dq+R2ogwqWeUr.KKtMFsvLvmDHnx0AyUIGC2ZHpT2RVqRBORv8MLuYJMEpYeDmPmlcMiW23rrFG0nOVqOjbhl5jaL5S0LagDZ9owE7yW2ne9qNo61aF416F61MvGR7Td8VVp+q6kF6pOabaHHmBV3ajw.TB3P0fBTNEgdkZa.h2Io3UiSnthdPvz7mgA2iP61SFZMenghFMz.5Q5S6AZ.5sNw.pRb7JCS0kPJCQgpt0PTubH5oiHhdr9BtJDYYVwzvHBMyaEAizp6bi.grULPjEYKapRTKq7OCY+RNj87QDYyqgLecJhePihPWDddegta8NP2BZn62aqSs1HFcqC2VlDP9oAPxQHqIBGPPGSwe667dSHYOvsiRlBYP92L0g71fy5OvSPk0J.IClv3x2+EtEN2cfGVj+p4x2iHtC3.fb2AVdOWFf3yz2zMB2WuVg2WudQ4eGR3dOqVTgSuhw6DEfWYB8+kwa7qebWqlc5.LvLvNk0Z+v39TGiGT9xDnjVpDI5UNtu0keqgq4Uo9ig8Uo7G5WkBpsyAV1H5TI0Z4NvsIOBtlntqjvrICCwBWcway4BYY.5uJV7QJBbf.LeNsIGCoqyaA49qzGFScZhkoTt5bln+5A9VYNcAMYtIMMmbrdup7ayzzufGuZpOBus16+8p+ySsL4vA22wy+UJAisoRpRS1wDOXiQ7a0tJoCFRblHM+thM4LteONi5jmXIBnc6RBzwdgSnkEBfbmI49M1FNkBGRzKpYCHkMN3h6MFgXQ8gOVbcqWOvJBtH4VYz+MNRXx+edjv17ABHk5lXfnJSrAkL1FxD6P.jvXDuPYxrIjU4D0tVRxs1DlqpweAewcVW11Lty5Ic9AwG8wNA7CbhtEkjKeKkDXdyTIwKYsorMJ81RVV0pVCRr6ROvwQFtmstgQwi4QiwXd7XLl4GiwrvXLlmLFi4oiwXd10NF4gQKOPv6GsUDDzpo5VqlloGnaNoweiCcCZf
Cost David a smile and me 3 days of life :-)
Thanks David