Hy.. BeatSpace it Nice, but not quite.. The beats inside of it are not really my style and I really want to be able to load My Own patches and random between them. For example I should be able to load a folder of patches in each constellation , and then random between them. Maybe we can get an update ?!!!
The points in BeatSpace are not actual copies of presets from Patternarium but created through a neural network that I trained to produce beats in the style of the beats we find in Patternarium. Training such networks requires a lot of GPU power, but more importantly, for good results, you need a lot of data to train it on (tens of thousands of beats).
For fun, I tried to train a net using only the Microtonic factory presets, and the results were, to say the least, lame.
What you are asking for sounds more like a pattern interpolator, morphing between existing beats. It's obviously possible to create such a script, but it would be quite different to BeatSpace in implementation.
Thanks 4 Reply .. That's why I made the other post with the script error, because first of all I want to create a script that the morphs between two Microtonic presets found in a certain folder.. In this direction I managed to translate the "Random Morph" PikaScript into a JS script.. Now I'm struggling to understand how to upload a Random Preset in the'0' point of morph and other preset in the ''1 point of morph, each one having also the Midi information .. If I will succeed this, I can make another script that randoms patterns, i hope :) .. What I'm trying to achieve is this: Let's say I have 10 presets that I made, ( in my style Minimal Micro House ) in a folder with the given name, after I set one patch in the left and order patch in the right, the right patch load also the midi information ( note, velocity and accent ), but if I move the slider to the left the actual random morph script is randomising only the controllers for the present and I want to be able to morph also the Midi information...
Now imagine this idea of morphing also with the Midi information combined with the BeatSpace idea in this fashion : Let's say each Constellation it a folder full with MicroTonic presets, and the 'y' and 'x' are functions for choosing presets from top to bottom or bottom to top, but also the percentage of Randomisation interaction with the other Constellations that are doing the same thing.
There are a few plug-ins that morphs or randomise between patterns from a folder, and the most brilliant one it MDrummer ... This idea of using 'y' and 'x' for morphing between different patterns it's a magical in my opinion. And I don't think it's very hard to achieve this ! My problem is that I am not good with the scripting part, but even so I managed to translate the "Random Morph" PikaScript into a JS script.. Yes it's complicated for somebody that didn't do that at all, but y started to understand it..a bit :))
Maybe you want to help me :) I am also making another skin :)
// Get directory path
const PRESET_PATH = DIRS.PRESETS + 'All/';
const presets = dir(PRESET_PATH, '.mtpreset');
// Select random preset
const randomIndex = Math.floor(Math.random() * presets.length);
const randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
error:
Error performing action "scriptPopup":
SyntaxError: Illegal use of keyword at /Library/Application Support/Sonic Charge/Microtonic Scripts/A-Velocity.js:2.
Anyone here who can Write Script Codes ??? Let's build the Random Midi patterns and Presets Script... Come on let's have fun :))
The script engine is only ES3 compliant (with a few ES5 extensions). (Basically, because I had to "start somewhere".)
This means you can't use "const". Replace with "var".
yep..thank you ... now i I realised that Xcode has Autocompletion function.. :))) i added the Microtonic SDK in the project .. the fun begins :) I am at the very beginning point of "start somewhere" :))))
// Get directory path
var PRESET_PATH = DIRS.PRESETS + 'All/';
var presets = dir(PRESET_PATH, '.mtpreset');
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
////////////
// Get directory path
var PRESET_PATH = DIRS.PRESETS + 'All/';
var presets = dir(PRESET_PATH, '.mtpreset');
// Check if presets array is empty
if (presets.length === 0) {
console.log("No presets found in directory: " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
}
////////
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
}
/////////////
// Get directory path
var PRESET_PATH = DIRS.PRESETS + 'All/';
var presets = dir(PRESET_PATH, '.mtpreset');
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
}
//////
var files = dir(PRESET_PATH);
display(files);
var files = dir(PRESET_PATH);
print(files);
////////
var PRESET_PATH = DIRS.PRESETS + 'All/';
var presets = dir(PRESET_PATH, '.mtpreset');
if (presets.length === 0) {
display("Error: no presets found in directory ");
} else {
for (var i = 0; i < presets.length; i++) {
display(presets[i].name);
}
}
//////////
var presets = dir(PRESET_PATH, '.mtpreset');
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
}
/////////
var PRESET_PATH = DIRS.PRESETS + 'All/';
var presets = dir(PRESET_PATH);
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Load selected preset
load(PRESET_PATH + randomPreset.name);
}
///////////
var PRESET_PATH = DIRS.PRESETS + 'Sonic Charge/Microtonic Presets/All/';
var presets = dir(PRESET_PATH, '.mtpreset');
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Check if the file exists
var presetFile = new File(PRESET_PATH + randomPreset.name);
if (!presetFile.exists) {
display("Error: preset file does not exist: " + presetFile.path);
} else {
// Load selected preset
var result = load(PRESET_PATH + randomPreset.name);
if (result !== null) {
display("Error loading preset: " + result);
} else {
display("Loaded preset: " + randomPreset.name);
}
}
}
///////////
var PRESET_PATH = DIRS.PRESETS + '/Desktop/All/';
var presets = dir(PRESET_PATH, '.mtpreset');
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Check if the file exists
var presetFile = new File(PRESET_PATH + randomPreset.name);
if (!presetFile.exists) {
display("Error: preset file does not exist: " + presetFile.path);
} else {
// Load selected preset
var result = load(PRESET_PATH + randomPreset.name);
if (result !== null) {
display("Error loading preset: " + result);
} else {
display("Loaded preset: " + randomPreset.name);
}
}
}
/////////
var PRESET_PATH = DIRS.HOME + '/All';
var presets = dir(PRESET_PATH, '.mtpreset');
if (presets.length === 0) {
display("Error: no presets found in directory " + PRESET_PATH);
} else {
// Select random preset
var randomIndex = Math.floor(Math.random() * presets.length);
var randomPreset = presets[randomIndex];
// Check if the file exists
var presetFile = new File(PRESET_PATH + '/' + randomPreset.name);
if (!presetFile.exists) {
display("Error: preset file does not exist: " + presetFile.path);
} else {
// Load selected preset
var result = load(PRESET_PATH + '/' + randomPreset.name);
if (result !== null) {
display("Error loading preset: " + result);
} else {
display("Loaded preset: " + randomPreset.name);
}
}
}
////////
Error performing action "scriptPopup":
Error: Error listing file directory : /Library/Application Support/Sonic Charge/Microtonic Scripts/undefined/All/ [260].
Any help :)
- JBDS1 wrote:
Any help :)
Huh, what are all those different variants of the same code? DIRS.HOME (in the last variant) doesn't exist, and I suspect that is why you get the error.
Don't include the leading .
for the extensions when you call dir
. Do like this:
var presets = dir(PRESET_PATH, 'mtpreset');
Hi thanks for answer in all those variation I am trying to Load a Random preset from the Microtonic Presets ' All' folder, but every time I got different errors, I even use the JS console but no success.. i will keep try :)
As I said before I want to create a script that loads a random preset on the left side of the morph and another random preset to the right side of the mouth. After that they will try create the rectangular window and then y will define the four corners and mark all 4 point as a loading random preset point, and I will create a slider that morphs between all this 4 points loaded with midi information also.. And eventually with a small random button in each corner for choosing random present in any time ... And I can't keep going but I will keep my energy for the time when I would finish the script, if else :)))
It's super nice to have 4 drum loops made by you and then Morph between them, I am doing this with PlayBeat 3, but playbeat 3 dose Not have import function, you have to put every step by hand which sucks a lot and it more nice to have it this way :)
You need to be signed in to post a reply