woolball-client
Version:
Client-side library for Woolball enabling secure browser resource sharing for distributed AI task processing
65 lines (64 loc) • 2.36 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
exports.musicGeneration = void 0;
let musicRNN = null;
let musicVAE = null;
async function generateWithMusicRNN(sequence, steps = 64, temperature = 1.0) {
const mm = await import('@magenta/music');
if (!musicRNN) {
musicRNN = new mm.MusicRNN('https://storage.googleapis.com/magentadata/js/checkpoints/music_rnn/basic_rnn');
await musicRNN.initialize();
}
try {
const result = await musicRNN.continueSequence(sequence, steps, temperature);
const player = new mm.Player();
return {
generatedSequence: result,
play: () => player.start(result),
stop: () => player.stop(),
midi: mm.sequenceProtoToMidi(result)
};
}
catch (error) {
throw error;
}
}
async function generateWithMusicVAE(numOutputs = 1, temperature = 1.0, modelType = 'mel_4bar') {
const mm = await import('@magenta/music');
if (!musicVAE) {
musicVAE = new mm.MusicVAE(`https://storage.googleapis.com/magentadata/js/checkpoints/music_vae/${modelType}`);
await musicVAE.initialize();
}
try {
const samples = await musicVAE.sample(numOutputs, temperature);
const player = new mm.Player();
return {
generatedSequences: samples,
play: (index = 0) => player.start(samples[index]),
stop: () => player.stop(),
midis: samples.map((sample) => mm.sequenceProtoToMidi(sample))
};
}
catch (error) {
throw error;
}
}
async function musicGeneration(data) {
const { input, model = 'music-rnn', temperature = 1.0, steps = 64, numOutputs = 1, modelType = 'mel_4bar', ...options } = data;
try {
const parsedInput = typeof input === 'string' ? JSON.parse(input) : input;
if (model === 'music-rnn') {
return await generateWithMusicRNN(parsedInput.sequence, steps, temperature);
}
else if (model === 'music-vae') {
return await generateWithMusicVAE(numOutputs, temperature, modelType);
}
else {
throw new Error(`Modelo não suportado: ${model}. Use 'music-rnn' ou 'music-vae'.`);
}
}
catch (error) {
throw error;
}
}
exports.musicGeneration = musicGeneration;