Jusqu'ici, le seul canard toléré près d'un clavier était en plastique, et son job se limitait à écouter vos bugs sans broncher.
Un développeur inventif a décidé de vous en mettre à dispo toute une bande directement dans votre navigateur : The Duck Pond est une petite mare peuplée de canards colverts, avec trois canes, deux mâles et deux couvées de canetons.
Côté look, The Duck Pond est très sobre, pour ne pas dire basique : une ellipse bleue vue du dessus pour la mare, de petites formes colorées pour les canards et, à droite, la liste de leurs distances.

Mais ce n'est pas là que se joue le projet. Tout se passe dans la façon dont ces canards se comportent et dans leurs cris.
Aucun de leurs "coin-coin" ne sort d'un enregistrement : chaque cri est calculé à l'instant où le canard le pousse, puis vous parvient tel que vous l'entendriez depuis votre place sur la berge.
Des canards calqués sur de vrais colverts
Le projet pousse le réalisme jusqu'à l'emploi du temps des palmipèdes, en s'appuyant sur deux études de terrain : l'une menée en 1981 sur des colverts nicheurs du nord de la Suède, l'autre en 1987 sur des colverts venus passer l'hiver en Alabama.
La première sert de repère pour le temps passé à manger, la seconde pour leur repos. À la louche, ça donne 40 % du temps à manger, 30 % à se reposer, 15 % à se lisser les plumes et le reste à se balader (pas une réunion à l'horizon).
Les deux études de terrain sur les colverts ne sont pas les seules sources du projet : le fichier qui les recense aligne une vingtaine de références, dont une étude sur l'hydroplanage des canetons qui sert à régler leur vitesse de nage.
Quand une cane lance une série de coin-coin, ses voisins peuvent lui répondre, à commencer par son compagnon (quand elle en a un).
Comme chez les vrais colverts, le mâle ne cancane pas et se contente d'un petit cri rauque. Dans la mare, il le pousse plus souvent quand sa compagne n'est plus à portée.
Quant au caneton parti à la chasse aux insectes un peu trop loin de sa mère, il s'arrête et piaille jusqu'à ce qu'elle le rappelle.
Pour les visiteurs, un bouton permet aussi de leur lancer une poignée de petits pois. Les canards les plus proches les repèrent, poussent un cri et foncent de pois en pois, dans la limite des stocks disponibles.
De quoi casser trois pattes à un canard
Le synthétiseur, écrit en Rust et disponible sur GitHub, tourne dans le navigateur grâce à WebAssembly, mais peut aussi se compiler pour tourner directement dans un terminal.

Pour que ses coin-coin sonnent juste, il va jusqu'à imiter l'appareil vocal du canard.
Une série d'impulsions d'air reproduit les vibrations de la syrinx, l'organe qui produit le son chez les oiseaux. Des filtres jouent ensuite le rôle du conduit vocal et suivent le bec, qui s'ouvre et se referme au fil du coin-coin.
Une impulsion sur deux est volontairement affaiblie et avancée d'un poil, ce qui rend le cri éraillé. Et de petites variations aléatoires évitent que deux coin-coin sonnent pareil.
La mare s'appuie même sur une norme ISO : les aigus des cris lointains sont atténués par un filtre calé sur ISO 9613-1, qui définit comment calculer l'absorption du son par l'air. Chaque cri vous parvient aussi avec le retard qu'impose la vitesse du son.
Au casque, chaque oreille reçoit son propre signal, calculé avec un modèle qui assimile votre tête à une sphère (rien de personnel, promis).
Coin-coin assisté par IA
Son auteur ne s'en cache pas : le projet a été réalisé avec un gros coup de main de Claude. Faut dire que le traitement audio n'est pas du tout la partie de ce dev : de son propre aveu, sa contribution se résume à quelques choix techniques.
Claude a tourné en boucle en corrigeant peu à peu les réglages de la synthèse sonore, pour que le spectrogramme du cri obtenu (l'image de ses fréquences au fil du temps) colle à celui d'un vrai canard enregistré.
Des enregistrements de vrais colverts ont servi à l'étalonnage des cris synthétisés pendant le prototypage en Python, mais ne figurent pas dans le dépôt.
En cours de route, un modèle d'IA entraîné à reconnaître les sons a même identifié le cri synthétique comme un canard avec plus de certitude que l'enregistrement d'un vrai canard.
À propos de l'auteur
Nicolas Lecointre
Fondateur des Joies du Code, je suis l'actualité et la culture des développeurs depuis 2012. Ancien développeur, je me consacre aujourd'hui entièrement au média.
Offres d'emploi
À lire également
Tech Show Paris 2026 : DevOps Live et quatre autres salons pour un seul badge gratuit, les 18 et 19 novembre
Les 18 et 19 novembre 2026, Tech Show Paris souffle sa 10ème bougie à Paris Expo Porte de Versailles, avec la recette qui fait sa marque : un seul badge...
Articles recommandés
Les maths qui sécurisent le Web cachaient un mystère vieux de 25 ans, Anthropic l'a résolu
Anthropic coupe Internet à ses IA en test après un faux témoignage de Claude à la police
Les maths qui sécurisent le Web cachaient un mystère vieux de 25 ans, Anthropic l'a résolu
Ubuntu 26.10 est sorti, et ses coreutils passent à 100 % en Rust
Anthropic coupe Internet à ses IA en test après un faux témoignage de Claude à la police
Mold, le linker ultra-rapide pour Linux, a été réécrit en Rust
Plus de contenu
Quand je surveille de près la compilation
Quand le chef commence à m'évoquer l'idée d'une mise en prod vendredi
Quand on me demande d'estimer les charges d'un projet sans qu'il y ait de specs
Quand je suis en pause et que je me rappelle que j'ai oublié de locker mon poste
Quand le client m'appelle pour me dire qu'il a un bug bloquant car un bouton a bougé de quelques pixels
Quand tous mes tests passent enfin au vert
Quand j'essaie de débuguer une race condition et que les résultats changent à chaque exécution
Quand je cherche l'accolade manquante dans mon code
Quand je surveille de près la compilation
Quand le chef commence à m'évoquer l'idée d'une mise en prod vendredi
Quand on me demande d'estimer les charges d'un projet sans qu'il y ait de specs
Quand je suis en pause et que je me rappelle que j'ai oublié de locker mon poste
Quand le client m'appelle pour me dire qu'il a un bug bloquant car un bouton a bougé de quelques pixels

