@magenta/music
Version:
Make music with machine learning, in the browser.
43 lines • 1.8 kB
JavaScript
import * as tf from '@tensorflow/tfjs';
import * as test from 'tape';
import { MusicRNN } from './model';
const MEL_CKPT = 'https://storage.googleapis.com/magentadata/js/checkpoints/music_rnn/basic_rnn';
const MEL_TEAPOT = {
notes: [
{ pitch: 69, quantizedStartStep: 0, quantizedEndStep: 2, program: 0 },
{ pitch: 71, quantizedStartStep: 2, quantizedEndStep: 4, program: 0 },
{ pitch: 73, quantizedStartStep: 4, quantizedEndStep: 6, program: 0 },
{ pitch: 74, quantizedStartStep: 6, quantizedEndStep: 8, program: 0 },
{ pitch: 76, quantizedStartStep: 8, quantizedEndStep: 10, program: 0 },
{ pitch: 81, quantizedStartStep: 12, quantizedEndStep: 16, program: 0 },
{ pitch: 78, quantizedStartStep: 16, quantizedEndStep: 20, program: 0 },
{ pitch: 81, quantizedStartStep: 20, quantizedEndStep: 24, program: 0 },
{ pitch: 76, quantizedStartStep: 24, quantizedEndStep: 32, program: 0 }
],
quantizationInfo: { stepsPerQuarter: 4 },
totalQuantizedSteps: 32,
};
let model;
let initialBytes;
test('MusicRNN can be initialized', async (t) => {
initialBytes = tf.memory().numBytes;
model = new MusicRNN(MEL_CKPT);
await model.initialize();
t.true(model.isInitialized);
t.end();
});
test('MusicRNN can continue a sequence ', async (t) => {
const startMemory = tf.memory().numBytes;
const temperature = 1;
const continuation = await model.continueSequence(MEL_TEAPOT, 20, temperature);
t.ok(continuation);
t.true(continuation.notes.length > 0);
t.isEqual(tf.memory().numBytes, startMemory);
t.end();
});
test('MusicRNN can be disposed', async (t) => {
model.dispose();
t.isEqual(tf.memory().numBytes, initialBytes);
t.end();
});
//# sourceMappingURL=model_test.js.map