Create transformer.js
Browse files- transformer.js +61 -0
transformer.js
ADDED
|
@@ -0,0 +1,61 @@
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
| 1 |
+
// Définition de la classe du modèle Miamuy-midi
|
| 2 |
+
class MiamuyMidiModel {
|
| 3 |
+
|
| 4 |
+
// Cette méthode est requise par Hugging Face, mais ne fait rien ici
|
| 5 |
+
static async getInstance(progress_callback = null) {
|
| 6 |
+
return new MiamuyMidiModel();
|
| 7 |
+
}
|
| 8 |
+
|
| 9 |
+
// La méthode 'generate' qui va créer la séquence de notes
|
| 10 |
+
// 'prompt' sera la note de départ (ex: 'C4')
|
| 11 |
+
// 'options' sera un objet pour les paramètres de génération
|
| 12 |
+
async generate(prompt, options = {}) {
|
| 13 |
+
// Liste des notes (do-ré-mi-fa-sol-la-si) avec 4 octaves
|
| 14 |
+
const noteNames = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'];
|
| 15 |
+
|
| 16 |
+
// Convertir la note de départ en une représentation numérique
|
| 17 |
+
const startNote = this.noteToMidi(prompt);
|
| 18 |
+
|
| 19 |
+
// Définir la longueur de la séquence
|
| 20 |
+
const sequenceLength = options.length || 8;
|
| 21 |
+
|
| 22 |
+
let generatedNotes = [startNote];
|
| 23 |
+
|
| 24 |
+
// Boucler pour générer le reste de la séquence
|
| 25 |
+
for (let i = 1; i < sequenceLength; i++) {
|
| 26 |
+
// Ajouter une note aléatoire dans un intervalle de 5 demi-tons
|
| 27 |
+
const nextNote = startNote + Math.floor(Math.random() * 11) - 5;
|
| 28 |
+
generatedNotes.push(nextNote);
|
| 29 |
+
}
|
| 30 |
+
|
| 31 |
+
// Convertir les nombres MIDI en noms de notes
|
| 32 |
+
const formattedNotes = generatedNotes.map(note => {
|
| 33 |
+
const octave = Math.floor(note / 12) - 1;
|
| 34 |
+
const noteIndex = note % 12;
|
| 35 |
+
return `${noteNames[noteIndex]}${octave}`;
|
| 36 |
+
});
|
| 37 |
+
|
| 38 |
+
// Le format de sortie doit correspondre à ce que Hugging Face attend
|
| 39 |
+
// On peut aussi inclure les notes MIDI si on le souhaite
|
| 40 |
+
return [{
|
| 41 |
+
generated_text: formattedNotes.join(' '),
|
| 42 |
+
midi_notes: generatedNotes
|
| 43 |
+
}];
|
| 44 |
+
}
|
| 45 |
+
|
| 46 |
+
// Fonction utilitaire pour convertir un nom de note en nombre MIDI
|
| 47 |
+
noteToMidi(note) {
|
| 48 |
+
const noteMap = {
|
| 49 |
+
'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5,
|
| 50 |
+
'F#': 6, 'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11
|
| 51 |
+
};
|
| 52 |
+
|
| 53 |
+
const octave = parseInt(note.slice(-1));
|
| 54 |
+
const noteName = note.slice(0, -1);
|
| 55 |
+
|
| 56 |
+
return noteMap[noteName] + (octave + 1) * 12;
|
| 57 |
+
}
|
| 58 |
+
}
|
| 59 |
+
|
| 60 |
+
// Exportez la classe pour qu'elle puisse être utilisée
|
| 61 |
+
export default MiamuyMidiModel;
|