Atmosphère✨ Premium

Scroll Ambient Sound

Un conteneur scrollable pilote en temps réel la fréquence d'un oscillateur sinusoïdal — le pitch monte de 200 Hz à 800 Hz à mesure que l'utilisateur défile vers le bas.

Web AudioScrollAmbient

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 — Démo interactive d'un outil audio — Scroll Ambient Sound exemple 1

① Hero / Landing — Démo interactive d'un outil audio

QuandLa page présente un outil de composition, un synthétiseur en ligne ou une app de méditation — le visiteur doit percevoir le concept sonore sans lecture automatique.
PourquoiLe scroll révèle progressivement la hauteur tonale et crée une expérience sensorielle mémorable avant même que l'utilisateur appuie sur « Essayer » — un déclencheur d'engagement sans autoplay.
RéglagesFréquence grave à 200 Hz (valeur par défaut), plage 600 Hz conservée pour l'amplitude maximale de la démonstration. Throttle à 150 ms.
Page longform — Le pitch monte avec la descente narrative — Scroll Ambient Sound exemple 2

② Page longform — Le pitch monte avec la descente narrative

QuandUn article de fond, une expérience de storytelling ou un essai immersif : l'utilisateur défile sur une page longue et le son accompagne sa progression chapitre après chapitre.
PourquoiSur une longue page, le scroll couvre une grande amplitude de position — la plage 200–800 Hz s'exprime pleinement, et chaque chapitre correspond à un registre sonore distinct. L'effet transforme la lecture en expérience multi-sensorielle sans autoplay agressif.
Réglagesmin-height du .snd-scroll-inner à 800 px ou plus pour une course de scroll significative. Gain à 0,06 (discret en lecture). Throttle à 150 ms (rythme naturel de la descente). Forme d'onde 'sine' — douce, non intrusive.
Micro-interaction de conversion — Aperçu audio avant souscription — Scroll Ambient Sound exemple 3

③ Micro-interaction de conversion — Aperçu audio avant souscription

QuandL'écran de pricing propose un aperçu de l'effet avant l'achat — l'utilisateur scroll la section démo pour l'essayer, puis clique sur « Commencer ».
PourquoiLaisser l'utilisateur interagir avec le produit avant de payer réduit l'hésitation et valorise la fonctionnalité sonore comme différenciateur tangible.
RéglagesGain à 0,05 (plus discret en contexte de vente), oscillateur en triangle plus doux, scroll-inner à 320 px pour une démo rapide.

Comment ça marche

L'effet écoute l'événement scroll sur le conteneur .snd-scroll-container. Un throttle de 150 ms (Date.now()) filtre les déclenchements excessifs — au défilement continu, un son est émis tous les 150 ms maximum.

La position scrollée est normalisée : ratio = scrollTop / (scrollHeight − clientHeight). Ce ratio 0→1 est interpolé sur la plage 200–800 Hz : freq = 200 + ratio × 600. Position haute = 200 Hz (grave), fond du scroll = 800 Hz (aigu).

La fréquence calculée est transmise à playTone(freq, 0.08, 'sine', 0.03), un utilitaire Web Audio API externe (non inclus dans l'effet). Cette fonction crée un OscillatorNode en mode sine, le connecte à un GainNode (gain max 0,08) et pilote l'enveloppe via une rampe linéaire de 30 ms — résultat : un bref blip sinusoïdal sans clic.

Visuellement, 16 barres CSS (.snd-scroll-bar-fill) aux largeurs prédéfinies simulent un spectre audio figé. Elles servent d'ancrage visuel : l'utilisateur comprend qu'il interagit avec quelque chose de sonore avant même de scroller.

Accessibilité

  • Pas de gestion prefers-reduced-motion : l'effet ignore cette préférence système — le son se déclenche même si l'utilisateur a activé le mode réduit. À l'intégrateur de conditionner l'initialisation si nécessaire.
  • Aucun attribut aria-role, aria-label ni aria-describedby sur le conteneur — le composant n'est pas décrit pour les lecteurs d'écran.
  • Le scroll au clavier (flèches ↑↓ lorsque le conteneur est focusé, ou via tabulation si le conteneur est tabulable) déclenche nativement l'événement scroll, rendant l'effet accessible aux utilisateurs clavier sans code supplémentaire.
  • L'étiquette .snd-scroll-label (« 🔊 Scrollez pour entendre ») informe les utilisateurs voyants — aucun équivalent textuel accessible n'est fourni aux lecteurs d'écran.
  • La politique autoplay audio des navigateurs peut suspendre l'AudioContext avant la première interaction utilisateur : la fonction playTone de l'intégrateur doit appeler ctx.resume() si ctx.state === 'suspended'.

Compatibilité navigateur

Nécessite Web Audio API (AudioContext / webkitAudioContext) et l'événement scroll DOM — supportés dans tous les navigateurs modernes. La fonction playTone est un utilitaire externe à fournir dans la page hôte — l'effet ne la définit pas.

Chrome 10+✓ Complet
Firefox 25+✓ Complet
Safari 14.1+✓ Complet (webkitAudioContext avant 14.1)
Edge 79+✓ Complet
Mobile iOS✓ Requiert un geste utilisateur pour débloquer l'audio
Android Chrome✓ Complet

Si <code>AudioContext</code> n'est pas disponible (rare) ou si <code>playTone</code> est absente, l'effet est silencieux mais la page reste fonctionnelle — aucune erreur JS fatale.

Le code

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

index.html — structure
<div class="snd-scroll-container" id="sndScrollContainer">
  <div class="snd-scroll-inner">
    <div class="snd-scroll-bar">
      <div class="snd-scroll-bar-fill" style="width: 60%"></div>
    </div>
    <!-- répéter .snd-scroll-bar autant de fois que nécessaire -->
    <div class="snd-scroll-label">🔊 Scrollez pour entendre</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
Fréquence basse — `200` (JS, constante inline) 200 Hz Pitch du son en bas de scroll. Réduire à 80 Hz pour un grave sourd, augmenter à 440 Hz pour commencer sur un La concert.
Plage de fréquences — `600` (JS, constante inline) 600 Hz Étendue de la variation : fréq. haute = `200 + 600 = 800 Hz`. Réduire à 200 pour un effet subtil, augmenter à 1200 pour un glissando dramatique.
Throttle — `150` ms (JS, `if (now - lastScroll < 150)`) 150 ms Intervalle minimal entre deux sons. 80 ms = plus continu et expressif, 300 ms = plus discret en arrière-plan.
Gain — `0.08` (JS, paramètre de `playTone`) 0.08 Volume du blip (0 = muet, 1 = plein). Valeur recommandée : 0,04–0,12 pour une ambiance non intrusive.
Forme d'onde — `'sine'` (JS, paramètre de `playTone`) sine Type d'oscillateur Web Audio. `triangle` = plus doux, `square` = électronique, `sawtooth` = acide. Modifier la valeur dans l'appel `playTone`.
Durée enveloppe — `0.03` s (JS, paramètre de `playTone`) 0.03 s (30 ms) Durée d'attaque de l'enveloppe dans `playTone`. Augmenter à 0,08 pour un son plus tenu et legato.
`.snd-scroll-inner` `min-height` (CSS) 520px Hauteur totale de la zone scrollable. Augmenter pour une course plus longue dans une vraie page de contenu.
`.snd-scroll-bar-fill` gradient (CSS) #6366f1 → #a855f7 Couleur des barres de visualisation. Remplacez par votre palette brand — les barres sont purement décoratives.

FAQ

L'effet appelle playTone(freq, gain, type, duration) comme utilitaire global. Définissez-la avant l'initialisation : créez un AudioContext partagé (window._sndCtx), instanciez un OscillatorNode + GainNode, pilotez l'enveloppe via linearRampToValueAtTime, connectez et arrêtez l'oscillateur après duration × 2 secondes. Appelez ctx.resume() si ctx.state === 'suspended'.
iOS suspend l'AudioContext jusqu'à la première interaction explicite (tap). Le premier événement scroll (swipe) est suffisant pour débloquer le contexte si votre implémentation de playTone appelle ctx.resume(). Sans ce resume(), le contexte reste suspendu et aucun son n'est produit.
Oui. Remplacez document.getElementById('sndScrollContainer') par document.documentElement (ou document.body), et lisez window.scrollY + document.documentElement.scrollHeight - window.innerHeight à la place des propriétés du conteneur. Le reste (ratio, fréquence, throttle) reste identique.