Miamuy-midi / transformer.js
Clemylia's picture
Create transformer.js
66838c8 verified
// Définition de la classe du modèle Miamuy-midi
class MiamuyMidiModel {
// Cette méthode est requise par Hugging Face, mais ne fait rien ici
static async getInstance(progress_callback = null) {
return new MiamuyMidiModel();
}
// La méthode 'generate' qui va créer la séquence de notes
// 'prompt' sera la note de départ (ex: 'C4')
// 'options' sera un objet pour les paramètres de génération
async generate(prompt, options = {}) {
// Liste des notes (do-ré-mi-fa-sol-la-si) avec 4 octaves
const noteNames = ['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'];
// Convertir la note de départ en une représentation numérique
const startNote = this.noteToMidi(prompt);
// Définir la longueur de la séquence
const sequenceLength = options.length || 8;
let generatedNotes = [startNote];
// Boucler pour générer le reste de la séquence
for (let i = 1; i < sequenceLength; i++) {
// Ajouter une note aléatoire dans un intervalle de 5 demi-tons
const nextNote = startNote + Math.floor(Math.random() * 11) - 5;
generatedNotes.push(nextNote);
}
// Convertir les nombres MIDI en noms de notes
const formattedNotes = generatedNotes.map(note => {
const octave = Math.floor(note / 12) - 1;
const noteIndex = note % 12;
return `${noteNames[noteIndex]}${octave}`;
});
// Le format de sortie doit correspondre à ce que Hugging Face attend
// On peut aussi inclure les notes MIDI si on le souhaite
return [{
generated_text: formattedNotes.join(' '),
midi_notes: generatedNotes
}];
}
// Fonction utilitaire pour convertir un nom de note en nombre MIDI
noteToMidi(note) {
const noteMap = {
'C': 0, 'C#': 1, 'D': 2, 'D#': 3, 'E': 4, 'F': 5,
'F#': 6, 'G': 7, 'G#': 8, 'A': 9, 'A#': 10, 'B': 11
};
const octave = parseInt(note.slice(-1));
const noteName = note.slice(0, -1);
return noteMap[noteName] + (octave + 1) * 12;
}
}
// Exportez la classe pour qu'elle puisse être utilisée
export default MiamuyMidiModel;