par Xenova
Open source · 2k downloads · 51 likes
MusicGen Small est un modèle d'intelligence artificielle conçu pour générer de la musique à partir de descriptions textuelles ou d'instructions. Il permet de créer des morceaux originaux en quelques secondes, avec une qualité sonore adaptée aux applications web grâce à ses poids optimisés pour ONNX. Ce modèle se distingue par sa simplicité d'utilisation et son accessibilité, notamment via une démo en ligne qui facilite les tests sans installation complexe. Il s'adresse aussi bien aux créateurs de contenu qu'aux développeurs souhaitant intégrer la génération musicale dans leurs projets. Son approche légère et efficace en fait un outil polyvalent pour l'expérimentation musicale ou la production rapide de bandes-son.
https://huggingface.co/facebook/musicgen-small with ONNX weights to be compatible with Transformers.js.
If you haven't already, you can install the Transformers.js JavaScript library from NPM using:
npm install @huggingface/transformers
Example: Generate music with Xenova/musicgen-small.
import { AutoTokenizer, MusicgenForConditionalGeneration, RawAudio } from '@huggingface/transformers';
// Load tokenizer and model
const tokenizer = await AutoTokenizer.from_pretrained('Xenova/musicgen-small');
const model = await MusicgenForConditionalGeneration.from_pretrained('Xenova/musicgen-small', {
dtype: {
text_encoder: 'q8',
decoder_model_merged: 'q8',
encodec_decode: 'fp32',
},
});
// Prepare text input
const prompt = 'a light and cheerly EDM track, with syncopated drums, aery pads, and strong emotions bpm: 130';
const inputs = tokenizer(prompt);
// Generate audio
const audio_values = await model.generate({
...inputs,
max_new_tokens: 500,
do_sample: true,
guidance_scale: 3,
});
// (Optional) Write the output to a WAV file
const audio = new RawAudio(audio_values.data, model.config.audio_encoder.sampling_rate);
audio.save('musicgen.wav');
We also released an online demo, which you can try yourself: https://huggingface.co/spaces/Xenova/musicgen-web
Note: Having a separate repo for ONNX weights is intended to be a temporary solution until WebML gains more traction. If you would like to make your models web-ready, we recommend converting to ONNX using 🤗 Optimum and structuring your repo like this one (with ONNX weights located in a subfolder named onnx).