Présentation du CZP-1

Présentation du CZP-1

Pour commencer de la manière la plus improbable qui soit, laissez-moi vous présenter le CZP-1, une implémentation logicielle de la synthèse par distorsion de phase sous la forme d’un instrument complet sur une page web.

Avec le CZP-1, vous pourriez . . .

  1. Créer de la musique apaisante
  2. Faire des bruits agaçants (bonus : sur votre téléphone portable)
  3. Façonner un son emblématique d’un genre, idéalement des basses
  4. Partager des sons avec vos amis sur le web

. . . et tout ce qui pourrait vous venir à l’esprit.

La “Synthèse par distorsion de phase” est le processus de génération sonore mis au point par Casio au début des années 1980, et intégré dans des produits tels que le CZ-101. Je n’ai jamais été volontairement même à proximité d’un synthétiseur de la série CZ, mais j’ai toujours voulu jouer avec un synthé à distorsion de phase ; alors, que va faire un développeur en 2026 ? En construire un avec des agents, évidemment.

Non, ce n’était pas du code généré d’un seul coup par simple « vibe ». Si vous faites cela, le son ne sera pas tout à fait juste et l’interface utilisateur sera horrible, mais cela permet d’aller étonnamment loin. La question avec ce genre de choses est de savoir comment les rendre utilisables par d’autres personnes et de les terminer.

L’essayer

Allez sur la page web et allumez-la. Ensuite, touchez les touches ou utilisez le clavier de votre ordinateur pour jouer quelques notes.

Si vous n’entendez rien, il se peut que votre volume soit baissé ou que votre téléphone soit en mode silencieux.

Les sons sont organisés en banques (groupes de sons) et en programmes (sons individuels) dans le panneau Library. La banque existante de “Factory Presets” doit être sélectionnée, et les différents sons qu’elle contient montrent une partie du potentiel.

Partager via un lien

Vous avez donc créé un son cool et vous voulez que votre ami puisse l’utiliser . . . aucun problème ! Vous pouvez envoyer un lien web vers un CZP-1 avec votre son particulier. En voici un que j’ai fait plus tôt.

Copiez/collez dans votre messagerie préférée, enregistrez-les dans des documents, peu importe. Les données du son se trouvent dans le lien lui-même, il n’y a rien sur aucun serveur.

Que puis-je faire d’autre avec ?

Le support MIDI devrait être assez simple pour quiconque est familier avec le MIDI, ce qui permet l’utilisation de claviers externes ou le pilotage depuis un séquenceur. Il y a une prise en charge des pédales et de la molette mappée sur les contrôleurs habituels. La pédale d’expression affecte les aspects sensibles à la vélocité du programme.

Pour plus de détails sur absolument tout le reste, consultez le Manuel du CZP-1

Pourquoi et comment ?

Ayant essayé, et abandonné, plusieurs projets audio au fil des ans, j’en étais venu à considérer cela comme l’un des domaines les plus difficiles de la programmation ; un test approprié pour la mode actuelle de la programmation agentique alors.

Mon processus de travail consiste à faire rebondir différents agents les uns contre les autres. (Au moins Claude Code, DeepSeek in Pi et Codex ont tous été utilisés). Pour une raison quelconque, ils semblent avoir des angles morts mutuellement exclusifs, ce qui conduit à itérer vers un résultat bien plus réussi que ce qu’aucun d’entre eux n’obtiendrait indépendamment.

J’ai commencé par demander à Claude d’implémenter un synthétiseur à distorsion de phase en JavaScript sur une page web. Ce premier effort était surprenant, notamment le fait qu’il ait décidé d’utiliser l’automatisation du navigateur pour comparer la sortie audio avec une référence audio obtenue . . . quelque part. Les problèmes étaient que le son n’était pas juste, les paramètres étaient mal interprétés et l’interface utilisateur était médiocre. Mais cela fonctionn’ait quand même un peu, même avec les presets incroyablement bancals que Claude avait hallucinés à la place.

Par conséquent, je l’ai renvoyé vers DeepSeek avec des commentaires sur le moteur audio écrit par Claude, et il s’est lancé dans de nombreuses recherches et a réussi à établir que divers aspects des formes d’ondes fondamentales étaient erronés, que les fonctions de mixage étaient incorrectes, etc., et a effectué une passe pour les corriger.

Ce va-et-vient s’est poursuivi pendant environ une semaine, les agents exploitant progressivement pratiquement toutes les sources d’information sur le sujet de l’implémentation de la synthèse par distorsion de phase, itérant de plus en plus près d’une position que ni l’un ni l’autre ne pourrait améliorer de manière significative.

C’est ce qui a permis au moteur audio de fonctionner tel qu’il est aujourd’hui, avec moins d’une poignée d’interventions très spécifiques.

Mais il y a ensuite toute l’interface utilisateur et une multitude de fonctionnalités destinées à l’utilisateur, comme la polyphonie (la capacité de jouer plusieurs notes à la fois), la modulation, le glissement legato avec portamento. Tout cela doit être discuté individuellement, conçu, implémenté et débogué selon les besoins. Rien de tout cela n’était automatique, et il était souvent nécessaire de connaître l’algorithme précis à utiliser, comme l’allocation round-robin des voix pour la polyphonie, et de demander exactement cela pour terminer la fonctionnalité.

Leçons à en tirer ?

Les grandes leçons étaient :

  1. La partie “Difficile” du travail de bas niveau n’était plus difficile - c’est effrayant.
  2. La partie “Agaçante” de tous les écarts flous et non spécifiés de ce qui fait un synthétِseur fonctionnel et l’interface utilisateur web reste agaçante à amener à un état vraiment acceptable, et nécessite beaucoup plus de supervision active que la partie “Difficile”.
  3. Le fait de faire travailler les LLM sur le manuel a révélé plusieurs problèmes surprenants dans l’interface utilisateur.
  4. L’utilisation de modèles provenant de plusieurs fournisseurs différents améliore considérablement la qualité du code.
  5. Vous devez toujours connaître les bons modèles de conception, structures de données et algorithmes à utiliser afin de pouvoir les demander par leur nom, sinon ils bricoleront quelque chose de faux qui est correct à 90 % mais ne s’adapte pas tout à fait.

Si je devais refaire cela, j’aurais le manuel en cours de rédaction dès le début du travail sur l’interface utilisateur, car il s’est avéré être un point utile pour maintenir la cohérence conceptuelle.

Pour souligner à quel point la situation du travail de bas niveau est insensée, tout en faisant cela, j’ai été surpris et, pour tester, j’ai décidé de porter les jeux web que j’ai faits chez Luduxia de leur moteur WebGL2 personnalisé écrit à la main vers WebGPU - une tâche que j’avais reportée à cause d’iOS Safari entre autres choses. Cela a été réalisé avec l’aide d’agents et déployé en moins de 24 heures assez relax. Plus vous êtes familier avec WebGL et WebGPU, plus c’est choquant. (Dans le cadre du travail sur CZP-1, le système de build de Luduxia a lui-même été porté par des agents et c’est lui qui effectue le build final du synthé).

Nous vivons une nouvelle ère où la connaissance des éléments de bas niveau est utile à des fins de conception, mais vous serez dépassés par les machines lorsqu’il s’agira de l’implémentation. Lutter contre cette tendance est le chemin direct vers beaucoup de souffrance, mais cela va contrarier beaucoup de gens.

Attendez ? Quel est le rapport avec l’Internet des Objets ?

Il y a beaucoup d’inspiration à tirer des synthétiseurs des années 80, comme l’interopérabilité MIDI entre constructeurs, la capacité de représenter et de générer des sons intéressants en utilisant très peu de mémoire et relativement peu de calcul, et la foi que les utilisateurs apprendront quelque chose de complexe et d’ésotérique si cela les aide à atteindre leurs objectifs ou simplement à s’amuser. J’espère qu’il y aura plus à ce sujet une autre fois.