Wiki IA
LLM et IA Générative

IA Musicale

Génération de musique par IA - Suno, Udio, MusicLM et la révolution de la création musicale automatisée

IA Musicale

L'IA générative transforme la création musicale. Des chansons complètes aux instrumentaux, des effets sonores aux voix synthétiques, la génération audio atteint une qualité quasi-professionnelle.

Évolution de la génération musicale

┌─────────────────────────────────────────────────────────────────┐
│           ÉVOLUTION DE L'IA MUSICALE                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  2018: MUSENET (OpenAI)                                         │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Génération MIDI, style classique/pop                    │   │
│  │  Pas de voix, qualité basique                           │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  2022: MUSICLM (Google)                                         │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Text-to-audio de qualité                               │   │
│  │  Instrumentaux, pas de voix                             │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  2023: AUDIOCRAFT (Meta)                                        │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Open source, MusicGen + AudioGen                       │   │
│  │  Bonne qualité, utilisable localement                   │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  2024: SUNO / UDIO                                              │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │  Chansons complètes avec voix                           │   │
│  │  Qualité quasi-professionnelle                          │   │
│  │  Virale sur les réseaux sociaux                         │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Suno AI

Capacités

┌─────────────────────────────────────────────────────────────────┐
│                         SUNO AI                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Input: "A melancholic indie folk song about leaving home"      │
│                                                                  │
│         ┌───────────────────────────────────────────┐           │
│         │              SUNO v3.5                     │           │
│         │                                            │           │
│         │  ┌──────────────────────────────────────┐ │           │
│         │  │         GÉNÉRATION                    │ │           │
│         │  │  • Mélodie originale                 │ │           │
│         │  │  • Paroles cohérentes                │ │           │
│         │  │  • Voix synthétique réaliste         │ │           │
│         │  │  • Instruments multiples             │ │           │
│         │  │  • Structure: intro/couplet/refrain  │ │           │
│         │  └──────────────────────────────────────┘ │           │
│         │                                            │           │
│         └───────────────────────────────────────────┘           │
│                          │                                       │
│                          ▼                                       │
│  Output: Chanson de 2-4 minutes, format MP3/WAV                 │
│          Qualité: proche production amateur/semi-pro            │
│                                                                  │
│  MODES:                                                         │
│  • Simple: Description → Chanson                               │
│  • Custom: Paroles + Style + Titre → Chanson                   │
│  • Extend: Continuer une génération existante                  │
│                                                                  │
│  STYLES SUPPORTÉS: 100+ genres                                  │
│  Pop, Rock, Hip-hop, EDM, Jazz, Classical, Folk, Metal...      │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Utilisation de Suno

# Suno n'a pas d'API publique officielle
# Utilisation via leur interface web: suno.ai

# Exemple de prompt efficace pour Suno:
"""
STYLE: Indie folk, acoustic guitar, melancholic

LYRICS:
[Verse 1]
The old wooden door creaks as I leave
Morning mist covers the street I know so well
Every corner holds a memory
Of the life I'm leaving behind

[Chorus]
But home is not a place anymore
It's the voices in my head
The laughter we shared
The tears we shed

[Verse 2]
...

TITLE: Leaving Home
"""

# Pour les développeurs, wrapper non-officiel:
# github.com/gcui-art/suno-api

from suno_api import Suno

client = Suno(cookie="YOUR_SESSION_COOKIE")

# Génération simple
songs = client.generate(
    prompt="upbeat electronic dance music with female vocals",
    make_instrumental=False,
    wait_audio=True
)

for song in songs:
    print(f"Title: {song.title}")
    print(f"URL: {song.audio_url}")

# Génération custom avec paroles
songs = client.custom_generate(
    prompt="Happy birthday song for a 5 year old named Emma",
    lyrics="""
    [Verse]
    Emma, Emma, it's your special day
    Five years old, hip hip hooray!

    [Chorus]
    Happy birthday Emma dear
    We're so glad that you are here
    """,
    title="Emma's Birthday",
    tags="children's music, cheerful, acoustic"
)

Udio

Comparaison avec Suno

┌─────────────────────────────────────────────────────────────────┐
│                    UDIO vs SUNO                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ┌─────────────────────────┐  ┌─────────────────────────┐      │
│  │          SUNO           │  │          UDIO           │      │
│  ├─────────────────────────┤  ├─────────────────────────┤      │
│  │ ✓ Génération complète   │  │ ✓ Qualité audio         │      │
│  │   en une passe          │  │   supérieure            │      │
│  │ ✓ Interface simple      │  │ ✓ Contrôle plus fin    │      │
│  │ ✓ Bon pour débutants    │  │ ✓ Génération par       │      │
│  │ ✓ Cohérence narrative   │  │   sections (32s)       │      │
│  │                         │  │ ✓ Meilleur pour        │      │
│  │ ✗ Moins de contrôle     │  │   genres complexes     │      │
│  │ ✗ Artifacts vocaux      │  │                         │      │
│  │   parfois audibles      │  │ ✗ Courbe apprentissage │      │
│  │                         │  │ ✗ Nécessite plus de    │      │
│  │                         │  │   travail pour chanson │      │
│  │                         │  │   complète             │      │
│  └─────────────────────────┘  └─────────────────────────┘      │
│                                                                  │
│  TARIFS (approximatifs):                                        │
│  ┌────────────────────────────────────────────────────────┐    │
│  │                 │ Gratuit   │ Pro      │ Premier    │    │
│  ├────────────────────────────────────────────────────────┤    │
│  │ Suno           │ 50/jour   │ $10/mois │ $30/mois   │    │
│  │ Udio           │ 100/mois  │ $10/mois │ $30/mois   │    │
│  └────────────────────────────────────────────────────────┘    │
│                                                                  │
│  Droits: Les deux permettent usage commercial sur plans payants │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Workflow Udio

┌─────────────────────────────────────────────────────────────────┐
│                 WORKFLOW UDIO                                    │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. GÉNÉRATION INITIALE (32 secondes)                          │
│     Prompt: "80s synthwave, driving beat, nostalgic"           │
│     → Génère un segment de 32 secondes                         │
│                                                                  │
│  2. EXTENSION                                                   │
│     ┌─────────────────────────────────────────────────────┐    │
│     │                                                      │    │
│     │   [Intro]──► [Extension]──► [Extension]──► [Outro]  │    │
│     │     32s        +32s           +32s          +32s    │    │
│     │                                                      │    │
│     │   Extend before / Extend after                      │    │
│     │                                                      │    │
│     └─────────────────────────────────────────────────────┘    │
│                                                                  │
│  3. INPAINTING (optionnel)                                     │
│     Remplacer une section spécifique                           │
│     "Ajouter un solo de guitare ici"                           │
│                                                                  │
│  4. REMIX                                                       │
│     Prendre une section et la régénérer                        │
│     avec des paramètres différents                             │
│                                                                  │
│  CONSEILS:                                                      │
│  • Générer plusieurs versions et garder la meilleure           │
│  • Utiliser des tags de genre précis                           │
│  • [Verse], [Chorus], [Bridge] pour structurer                 │
│  • Varier prompt_strength pour contrôler la créativité         │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

AudioCraft (Meta)

Architecture

┌─────────────────────────────────────────────────────────────────┐
│                    META AUDIOCRAFT                               │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Suite de modèles open source pour génération audio            │
│                                                                  │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                                                          │   │
│  │  MUSICGEN                     AUDIOGEN                   │   │
│  │  ┌──────────────────┐        ┌──────────────────┐       │   │
│  │  │ Musique à partir │        │ Sons et effets   │       │   │
│  │  │ de texte/mélodie │        │ à partir de      │       │   │
│  │  │                  │        │ descriptions     │       │   │
│  │  │ 300M → 3.3B     │        │                  │       │   │
│  │  │ paramètres      │        │ "Dog barking"    │       │   │
│  │  └──────────────────┘        └──────────────────┘       │   │
│  │                                                          │   │
│  │  ENCODEC                                                 │   │
│  │  ┌────────────────────────────────────────────────────┐ │   │
│  │  │ Codec neural - Compression audio haute qualité     │ │   │
│  │  │ 24kHz → 1.5kbps avec qualité quasi-CD             │ │   │
│  │  └────────────────────────────────────────────────────┘ │   │
│  │                                                          │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  Architecture MusicGen:                                         │
│  Text encoder (T5) → Transformer → EnCodec decoder → Audio     │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Utilisation de MusicGen

# Installation
# pip install audiocraft

from audiocraft.models import MusicGen
from audiocraft.data.audio import audio_write
import torch

# Charger le modèle
# Tailles: small (300M), medium (1.5B), large (3.3B), melody (1.5B)
model = MusicGen.get_pretrained('facebook/musicgen-medium')

# Configuration
model.set_generation_params(
    duration=30,  # secondes
    temperature=1.0,
    top_k=250,
    cfg_coef=3.0,  # Classifier-free guidance
)

# Génération depuis texte
descriptions = [
    "Upbeat electronic dance music with energetic synths",
    "Calm acoustic guitar melody, relaxing, peaceful",
]

# Génère 2 morceaux
wav = model.generate(descriptions)

# Sauvegarder
for idx, one_wav in enumerate(wav):
    audio_write(
        f'output_{idx}',
        one_wav.cpu(),
        model.sample_rate,
        strategy="loudness",
    )


# Génération conditionnée sur une mélodie
from audiocraft.models import MusicGen
import torchaudio

# Charger le modèle melody
model = MusicGen.get_pretrained('facebook/musicgen-melody')
model.set_generation_params(duration=30)

# Charger une mélodie de référence
melody_waveform, sr = torchaudio.load("my_melody.wav")
melody_waveform = melody_waveform.unsqueeze(0)  # Ajouter batch dim

# Générer de la musique suivant cette mélodie
descriptions = ["Epic orchestral version with strings and brass"]
wav = model.generate_with_chroma(
    descriptions,
    melody_waveform,
    sr,
)

audio_write('orchestral_version', wav[0].cpu(), model.sample_rate)

AudioGen pour les effets sonores

from audiocraft.models import AudioGen

# Charger AudioGen
model = AudioGen.get_pretrained('facebook/audiogen-medium')
model.set_generation_params(duration=5)

# Générer des effets sonores
descriptions = [
    "Thunder rumbling in the distance, rain falling",
    "Footsteps on wooden floor, creaking",
    "Car engine starting, revving",
    "Crowd cheering in a stadium",
]

wav = model.generate(descriptions)

for idx, one_wav in enumerate(wav):
    audio_write(f'sound_effect_{idx}', one_wav.cpu(), model.sample_rate)

Stable Audio (Stability AI)

┌─────────────────────────────────────────────────────────────────┐
│                    STABLE AUDIO                                  │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  Modèle de Stability AI pour génération audio                   │
│                                                                  │
│  STABLE AUDIO 2.0:                                              │
│  • Génère jusqu'à 3 minutes                                    │
│  • Audio-to-audio (remixing)                                   │
│  • 44.1kHz stéréo (qualité CD)                                │
│                                                                  │
│  Architecture: Latent Diffusion                                 │
│  ┌─────────────────────────────────────────────────────────┐   │
│  │                                                          │   │
│  │  Text ──► T5 Encoder ──► Cross-attention               │   │
│  │                              │                          │   │
│  │  Noise ──► U-Net Diffusion ◄─┘                         │   │
│  │                │                                        │   │
│  │                ▼                                        │   │
│  │  Latent ──► VAE Decoder ──► Waveform                   │   │
│  │                                                          │   │
│  └─────────────────────────────────────────────────────────┘   │
│                                                                  │
│  Avantages:                                                     │
│  • Open weights disponibles                                    │
│  • Bonne qualité instrumentale                                 │
│  • API accessible                                              │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘
# Stable Audio via API
import requests

API_URL = "https://api.stability.ai/v1/generation/stable-audio"
API_KEY = "your-api-key"

def generate_audio(prompt: str, duration: int = 30) -> bytes:
    """Génère de l'audio avec Stable Audio"""
    response = requests.post(
        API_URL,
        headers={
            "Authorization": f"Bearer {API_KEY}",
            "Content-Type": "application/json",
        },
        json={
            "text_prompts": [{"text": prompt}],
            "duration": duration,
            "cfg_scale": 7.0,
        }
    )

    if response.status_code == 200:
        return response.content
    else:
        raise Exception(f"Error: {response.text}")

# Générer
audio = generate_audio(
    "Ambient electronic music, dreamy pads, slow tempo",
    duration=60
)

with open("output.wav", "wb") as f:
    f.write(audio)

Synthèse vocale musicale

Voix chantées par IA

┌─────────────────────────────────────────────────────────────────┐
│              SYNTHÈSE VOCALE MUSICALE                           │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  APPROCHES:                                                     │
│                                                                  │
│  1. TEXT-TO-SINGING (direct)                                   │
│     Paroles + mélodie (MIDI) → Voix chantée                   │
│     Ex: Synthesizer V, ACE Studio                              │
│                                                                  │
│  2. VOICE CLONING + SINGING                                     │
│     Clone une voix → Applique au chant                         │
│     Ex: ElevenLabs, Respeecher                                 │
│                                                                  │
│  3. STYLE TRANSFER                                              │
│     Voix source → Voix cible                                   │
│     Ex: so-vits-svc, RVC                                       │
│                                                                  │
│  OUTILS POPULAIRES:                                             │
│  ┌────────────────────────────────────────────────────────┐    │
│  │ Outil         │ Type         │ Qualité │ Prix       │    │
│  ├────────────────────────────────────────────────────────┤    │
│  │ Synthesizer V │ Text-to-Sing │ ★★★★★  │ $100+     │    │
│  │ ACE Studio    │ Text-to-Sing │ ★★★★   │ Abo       │    │
│  │ ElevenLabs    │ Voice Clone  │ ★★★★★  │ Freemium  │    │
│  │ RVC          │ Style Trans. │ ★★★★   │ Gratuit   │    │
│  │ so-vits-svc   │ Style Trans. │ ★★★★   │ Gratuit   │    │
│  └────────────────────────────────────────────────────────┘    │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

RVC (Retrieval-based Voice Conversion)

# RVC - Voice conversion pour le chant
# github.com/RVC-Project/Retrieval-based-Voice-Conversion-WebUI

"""
Pipeline RVC:

1. ENTRAÎNEMENT (sur votre voix ou celle d'un artiste)
   - 10-30 minutes d'audio propre
   - Extraction de features (RMVPE pitch extraction)
   - Entraînement du modèle (~1 heure sur GPU)

2. INFÉRENCE
   - Input: Audio source (chant)
   - Output: Même chant avec voix différente
"""

# Utilisation via API (après setup)
import librosa
import soundfile as sf

def convert_voice(
    input_audio: str,
    model_path: str,
    output_path: str,
    pitch_shift: int = 0,  # En demi-tons
):
    """Convertit la voix d'un fichier audio"""
    # Charger l'audio
    audio, sr = librosa.load(input_audio, sr=None)

    # Charger le modèle RVC
    from rvc_infer import RVCInfer
    rvc = RVCInfer(model_path)

    # Conversion
    converted = rvc.infer(
        audio,
        sr,
        pitch_shift=pitch_shift,
        protect=0.33,  # Protection des consonnes
    )

    # Sauvegarder
    sf.write(output_path, converted, sr)

# Exemple: Convertir un cover
convert_voice(
    "my_singing.wav",
    "models/artist_voice.pth",
    "converted.wav",
    pitch_shift=-2  # Baisser de 2 demi-tons
)

Applications et cas d'usage

Production musicale assistée

┌─────────────────────────────────────────────────────────────────┐
│           WORKFLOW PRODUCTION ASSISTÉE PAR IA                   │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  1. IDÉATION                                                    │
│     ┌───────────────────────────────────────────────────────┐  │
│     │ Suno/Udio génère des demos rapides                    │  │
│     │ → Explore différentes directions                      │  │
│     │ → Sélectionne les meilleures idées                   │  │
│     └───────────────────────────────────────────────────────┘  │
│                                                                  │
│  2. COMPOSITION                                                 │
│     ┌───────────────────────────────────────────────────────┐  │
│     │ MusicGen crée des progressions d'accords             │  │
│     │ IA suggère des mélodies                               │  │
│     │ Humain structure et affine                            │  │
│     └───────────────────────────────────────────────────────┘  │
│                                                                  │
│  3. PRODUCTION                                                  │
│     ┌───────────────────────────────────────────────────────┐  │
│     │ IA génère des loops de batterie                      │  │
│     │ Stems IA + enregistrements humains                   │  │
│     │ Mixing avec assistance IA (iZotope, LANDR)           │  │
│     └───────────────────────────────────────────────────────┘  │
│                                                                  │
│  4. MASTERING                                                   │
│     ┌───────────────────────────────────────────────────────┐  │
│     │ Services IA: LANDR, CloudBounce, eMastered           │  │
│     │ EQ, compression, loudness automatiques               │  │
│     └───────────────────────────────────────────────────────┘  │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Musique pour médias

# Génération de musique pour vidéos/jeux

class MediaMusicGenerator:
    """Génère de la musique adaptée aux médias"""

    def __init__(self, model="musicgen-medium"):
        from audiocraft.models import MusicGen
        self.model = MusicGen.get_pretrained(f'facebook/{model}')

    def generate_for_scene(
        self,
        mood: str,
        duration: int,
        intensity_curve: list[float] = None,
    ) -> "AudioSegment":
        """
        Génère de la musique pour une scène.

        mood: "tense", "joyful", "melancholic", "epic"...
        duration: en secondes
        intensity_curve: évolution de l'intensité [0-1]
        """
        # Construire le prompt basé sur le mood
        prompts = {
            "tense": "Dark orchestral, suspenseful, building tension",
            "joyful": "Upbeat acoustic, happy, energetic",
            "melancholic": "Sad piano, emotional, slow",
            "epic": "Epic orchestral, powerful drums, cinematic",
        }

        self.model.set_generation_params(duration=duration)
        wav = self.model.generate([prompts.get(mood, mood)])

        return wav[0]

    def generate_loopable(
        self,
        description: str,
        loop_length: int = 8,  # secondes
    ) -> "AudioSegment":
        """Génère un loop musical seamless"""
        # Générer plus long puis trouver le meilleur point de loop
        self.model.set_generation_params(duration=loop_length * 2)
        wav = self.model.generate([description])

        # Trouver le meilleur point de loop (analyse de beat)
        loop = self._find_best_loop(wav[0], loop_length)
        return loop

    def generate_stems(
        self,
        description: str,
        duration: int,
    ) -> dict[str, "AudioSegment"]:
        """Génère des stems séparés (drums, bass, melody...)"""
        stems = {}

        variations = [
            ("drums", f"{description}, drums only, percussion"),
            ("bass", f"{description}, bass only, low frequencies"),
            ("melody", f"{description}, lead melody only"),
            ("pads", f"{description}, ambient pads, background"),
        ]

        self.model.set_generation_params(duration=duration)

        for stem_name, prompt in variations:
            wav = self.model.generate([prompt])
            stems[stem_name] = wav[0]

        return stems

# Utilisation
generator = MediaMusicGenerator()

# Pour une scène de poursuite
chase_music = generator.generate_for_scene(
    mood="tense",
    duration=60
)

# Loop pour un jeu
game_loop = generator.generate_loopable(
    "8-bit chiptune, adventure game, energetic",
    loop_length=16
)

Enjeux et éthique

┌─────────────────────────────────────────────────────────────────┐
│              ENJEUX DE L'IA MUSICALE                            │
├─────────────────────────────────────────────────────────────────┤
│                                                                  │
│  ⚠ DROITS D'AUTEUR                                             │
│    • Modèles entraînés sur musique sous copyright              │
│    • Procès en cours (Suno, Udio vs labels)                    │
│    • Risque de plagiat involontaire                            │
│    • Flou juridique sur la propriété des générations           │
│                                                                  │
│  ⚠ IMPACT SUR L'INDUSTRIE                                      │
│    • Compositeurs de stock music menacés                       │
│    • Musiciens de session moins sollicités                     │
│    • Démocratisation vs dévaluation                            │
│                                                                  │
│  ⚠ AUTHENTICITÉ                                                │
│    • Qu'est-ce qu'une "œuvre originale"?                      │
│    • Voice cloning sans consentement                           │
│    • Deepfakes musicaux (faux featurings)                      │
│                                                                  │
│  BONNES PRATIQUES:                                              │
│  ✓ Vérifier les licences des modèles utilisés                 │
│  ✓ Être transparent sur l'usage de l'IA                       │
│  ✓ Ne pas cloner de voix sans permission                      │
│  ✓ Utiliser l'IA comme outil, pas comme remplacement         │
│  ✓ Créditer les modèles IA utilisés                           │
│                                                                  │
└─────────────────────────────────────────────────────────────────┘

Comparatif des solutions

OutilTypeQualitéVoixPrixOpen Source
SunoFull song★★★★OuiFreemiumNon
UdioFull song★★★★★OuiFreemiumNon
MusicGenInstrumental★★★★NonGratuitOui
Stable AudioInstrumental★★★★NonFreemiumPartiel
AudioGenSFX★★★NonGratuitOui
Synthesizer VSinging★★★★★OuiPayantNon
RVCVoice Conv.★★★★OuiGratuitOui

Pour aller plus loin

On this page