Atmosphère✨ Premium

Ambient Soundscape

Quatre couches sonores synthétiques (pluie, vent, oiseaux, vagues) activables indépendamment via Web Audio API — oscillateurs FM modulés au LFO, zéro fichier audio, zéro requête réseau.

Web AudioAmbientInteractif

Vous aurez accès à la démo interactive avec un compte gratuit.

Cet effet fait partie d'Effect.Labs — 811 effets vanilla, une partie gratuite, une partie premium. Atmosphère comprend 57 effets, dont 10 gratuits. Découvrir la catégorie →

3 exemples d'usage

Hero / Landing — Application de méditation et de sommeil — Ambient Soundscape exemple 1

① Hero / Landing — Application de méditation et de sommeil

QuandLa page d'accueil se charge avant tout CTA de souscription : l'utilisateur peut ressentir l'ambiance sonore du produit avant de s'engager.
PourquoiL'activation en direct — pas un aperçu audio cliquable — supprime la barrière d'hésitation : l'utilisateur perçoit immédiatement la valeur de l'app et le CTA de conversion intervient dans le bon état émotionnel.
RéglagesSimuler un clic JS sur .snd-ambient-btn[data-sound='rain'] et [data-sound='waves'] après initialisation pour pré-activer deux couches. Réduire n.wind.vol à 0,008 et n.birds.vol à 0,005 pour un rendu plus feutré.
Composant produit — Widget « Ambiance Focus » dans un dashboard SaaS — Ambient Soundscape exemple 2

② Composant produit — Widget « Ambiance Focus » dans un dashboard SaaS

QuandL'utilisateur travaille dans l'application et veut activer des sons d'ambiance pour favoriser la concentration, sans quitter l'interface.
PourquoiLe widget est compact (4 boutons ronds de 60 px, gap 12 px) et s'intègre dans n'importe quelle sidebar ou panneau de réglages — il ne prend pas plus de place qu'une ligne de paramètres.
RéglagesPré-activer le bouton pluie via un clic JS à l'init pour proposer un état par défaut. Réduire .snd-ambient-btn width/height à 48 px en CSS pour la compacité. Remplacer les couleurs indigo (rgba(99,102,241,…)) par la teinte principale de votre app.
Micro-interaction de conversion — Personnalisation lors de l'onboarding — Ambient Soundscape exemple 3

③ Micro-interaction de conversion — Personnalisation lors de l'onboarding

QuandDurant l'onboarding, juste avant l'écran de compte ou de paiement, l'utilisateur choisit ses sons préférés — un engagement léger avant l'engagement fort.
PourquoiFaire manipuler l'effet avant la conversion augmente l'attachement au produit. L'utilisateur a investi du temps et personnalisé son expérience ; abandonner devient moins probable.
RéglagesAucun son actif par défaut. Collecter les sélections avec document.querySelectorAll('.snd-ambient-btn.active') et leur dataset.sound pour stocker les préférences en BDD au moment de la création du compte.

Comment ça marche

L'effet est purement Web Audio API — aucun canvas, aucun requestAnimationFrame, aucun fichier audio. Quatre couches sonores synthétiques coexistent dans un AudioContext partagé, chacune formée d'un OscillatorNode principal branché sur un GainNode de sortie. Les couches s'activent et se désactivent indépendamment sans interrompre les autres ; leurs références sont conservées dans l'objet t (clé = nom du son).

Chaque couche utilise une forme d'onde et une fréquence calées sur le timbre naturel de son référent : pluie = sawtooth à 200 Hz (harmoniques riches proches du bruit dense) ; vent = sine à 120 Hz (souffle grave) ; oiseaux = sine à 900 Hz (pépiement aigu) ; vagues = sine à 80 Hz (grondement de fond). Les gains de sortie vont de 0,008 (oiseaux, discrets) à 0,015 (vent, dominant) — calibrés pour ne pas saturer même avec les quatre couches actives simultanément.

Une modulation FM par LFO anime chaque couche : un second OscillatorNode (sine, fréquence aléatoire 0,5–2,5 Hz) est connecté au paramètre frequency du premier. Son gain vaut 0,1 × fréquence principale — soit ±20 Hz pour la pluie, ±9 Hz pour les vagues — ce qui introduit un trémolo naturel et évite le côté mécanique d'un ton pur fixe. Le LFO redémarre à une fréquence légèrement différente à chaque activation, rendant le son vivant.

L'AudioContext est créé paresseusement au premier clic (politique autoplay navigateur : un contexte créé avant une interaction utilisateur resterait en état suspended). À la désactivation, osc.stop() est appelé dans un try/catch puis les références sont supprimées de t — les nœuds sont garbage-collectés. Un re-clic crée de nouveaux nœuds propres depuis les mêmes paramètres.

Accessibilité

  • prefers-reduced-motion : absent du code. Les boutons ont un transition: .3s de scale au survol, mais l'effet n'a aucune animation visuelle en boucle — l'omission n'a pas d'impact pratique sur les utilisateurs sensibles au mouvement.
  • Les contrôles sont des <div> sans role="button" ni tabindexnon focusables au clavier, invisibles aux technologies d'assistance qui dépendent de la navigation clavier. À corriger pour une intégration accessible.
  • Aucun aria-pressed sur les boutons toggle — l'état actif (fond indigo, box-shadow) est purement visuel, non communiqué aux lecteurs d'écran.
  • Les émojis (🌧 🌀 🐦 🌊) sont restitués en texte descriptif par la majorité des lecteurs d'écran (ex. « nuage avec pluie ») — compréhensible mais imprécis pour des contrôles audio ; un aria-label explicite par bouton est recommandé.
  • Contraste en état .active : bordure #6366f1 et box-shadow indigo sur fond #0a0a0f — les émojis restent lisibles (fond sombre, WCAG AA respecté côté visuel).

Compatibilité navigateur

Nécessite AudioContext (ou webkitAudioContext) et OscillatorNode — disponibles dans tous les navigateurs modernes. Zéro dépendance externe, zéro fichier audio.

Chrome 35+✓ Complet
Firefox 25+✓ Complet
Safari 14.1+✓ Complet
Edge 79+✓ Complet
Mobile iOS 14.5+✓ Geste requis
Android Chrome 92+✓ Complet

Si <code>AudioContext</code> et <code>webkitAudioContext</code> sont tous deux absents, <code>getSndCtx()</code> lève une exception attrapée implicitement — les boutons togglent visuellement (classe <code>.active</code>) sans produire de son. Aucune erreur console fatale.

Le code

Structure HTML à coller dans votre page (CSS + JS disponibles avec un compte premium) :

index.html — structure
<div class="demo-preview">
  <div class="snd-ambient" id="sndAmbient">
    <div class="snd-ambient-btn" data-sound="rain">🌧</div>
    <div class="snd-ambient-btn" data-sound="wind">🌀</div>
    <div class="snd-ambient-btn" data-sound="birds">🐦</div>
    <div class="snd-ambient-btn" data-sound="waves">🌊</div>
  </div>
</div>
🔒 Débloquer le code complet — à partir de 2,99 € le 1er mois

HTML + CSS + JS complet, prêt à coller — avec des centaines d'effets premium.

Personnaliser

Options passées à l'API ou attributs data-* :

Option / propriétéDéfautEffet
n.rain.freq (JS) 200 Fréquence en Hz de l'oscillateur pluie (sawtooth). Monter à 350 pour un rideau dense, descendre à 100 pour une pluie lointaine.
n.rain.type (JS) "sawtooth" Forme d'onde : "sawtooth" produit des harmoniques riches proches du bruit, "sine" donne un ton pur, "square" un son plus agressif.
n.birds.freq (JS) 900 Hauteur des pépiements en Hz. 1 200 pour des oiseaux tropicaux aigus, 600 pour une tourterelle.
vol de chaque couche (JS) 0.008 – 0.015 Gain de sortie de l'oscillateur. Garder sous 0,03 pour éviter la distorsion ; 4 couches simultanées s'accumulent.
LFO gain (JS) = 0.1 × freq calculé Profondeur de modulation FM. Multiplier par 2 pour un trémolo prononcé, par 0 pour un ton pur fixe sans variation.
LFO freq (JS) = 0.5 + 2 × Math.random() 0.5 – 2.5 Hz Vitesse d'oscillation du LFO. Remplacer par une constante (ex. 1.0) pour un trémolo régulier et reproductible.
.snd-ambient-btn width/height (CSS) 60px Taille des boutons ronds. 48 px pour une sidebar compacte, 80 px pour une UI plein écran dédiée.
rgba(99, 102, 241, …) (CSS) indigo Couleur d'accent de l'interface : border, background et box-shadow des états :hover et .active. Remplacez les valeurs RGB par votre couleur brand.

FAQ

Des oscillateurs Web Audio ne nécessitent ni fichier externe ni requête réseau — le son est généré à la volée dans le thread audio du navigateur. L'effet est 100 % offline-capable, sans CORS et sans latence de chargement. Contrepartie : le timbre est plus synthétique qu'un enregistrement naturel ; ajouter des fichiers audio courts en boucle (<audio loop>) remplacerait la synthèse si un rendu réaliste est requis.
Oui. Chaque couche est gérée indépendamment dans l'objet t (clé = nom du son, valeur = { osc, lfo, gain }). Toutes les couches actives s'additionnent dans l'AudioContext ; les gains calibrés (0,008–0,015) garantissent l'absence de saturation même avec les 4 couches simultanées.
Les navigateurs bloquent la création d'un AudioContext actif avant une interaction utilisateur explicite (politique autoplay de Chrome, Firefox et Safari). L'AudioContext est créé paresseusement au premier clic via getSndCtx() ; toutes les activations suivantes réutilisent ce contexte déjà débloqué.