rb.grossbouff: a Max object to transform and synthesize sound in non-realtime inside a buffer~

rb grossbouff

It started as a game to explore the possibilities of sound creation and transformation within a Max buffer~ with the help of Javascript code. Then I wanted to upgrade the JS code as a plain Max object to improve its efficiency. I started with the implementation of some fade-in and fade-out operations, letting the user choose among several time units (samples, millisecondes, percentage of the sound duration). Then I integrated a basic white noise generation algorithms. Later it evolved in several directions, with several flavours of distorsions, assymetrical normalizing, scaling, gating, etc. Afterwards I included additional algorithms to generate noise, including some with smoothing, two based on differential equations (chaos) and others made from integer sequences (such as the "Collatz" conjecture).

Non-realtime operations are certainly useful in a realtime environment like Max. Also, experimenting with push-button operations brings back the joy some readers might know if they played with sound software when it was all but realtime. Indeed, in the beginning of the 1990s, most work on sound with computers was still done in non-realtime. Plug-ins like VSTs were just in their infancy. The user selected an operation in a menu, possibly set a few values and then waited, sometimes for quite a long time. But there was a large part of surprise and the pleasure to have a whole new sound just by pushing on a button.

Now you can have access to non-realtime operations on Max buffers too. However it's generally much faster than in the nineties!

rb.grossbouff~ is only for Windows-64 systems (I switched from MacOS to Windows a few years ago - without regret - but if someone wants to compile the C source on a Mac, I'd be happy to share it).

Enjoy!

Download rb.grossbouff for Windows-64 Max (with helpfile).

 

Manipulations de buffers dans Max via JavaScript

Max est adapté à toute manipulation sonore en temps réel, mais il y a de nombreuses opérations qu'on souhaiterait souvent effectuer en temps différé, parce que c'est plus simple ou plus rapide et qu'on n'a pas envie d'ouvrir un éditeur de son toutes les cinq minutes alors que des opérations de base sur les sons devraient pouvoir se faire directement dans Max.

L'objet JS, inclus dans la version standard de Max depuis longtemps et fonctionnant donc tant sous Windows que MacOS, est parfait pour cette fonction. Il s'agit d'un "moteur" JavaScript intégré directement dans Max. Outre la manipulation en temps réel de données (mais pas de flux audio), l'objet JS est capable de manipuler des buffers. Cela ouvre la porte à de nombreux traitements utilitaires tels que l'application de fondus ou d'enveloppes, le groupement de fichiers mono en fichiers stéréo, la transformation de buffers mono en buffers stéréo, etc. JS autorise également l'application de multiples traitements tels que distorsion, filtrage, mixage, etc.

J'ai créé un patch qui inclut de nombreux exemples afin de voir ce que JS avait dans le ventre. Il pourrait être encore amélioré, notamment quant au fait que certaines opérations remplacent le contenu d'origine du buffer et d'autres placent le son transformé dans un autre buffer, sans réelle cohérence quant au pourquoi j'ai fait un choix pour certaines fonctions et le choix opposé dans d'autres. L'idéal serait d'avoir une option permettant d'effectuer chaque traitement au choix de manière destructive ou vers un autre buffer, ou encore d'avoir une fonction "undo". A méditer pour une future mise à jour.

Je pense par ailleurs n'avoir qu'exploré une petite partie du potentiel de JS sous Max. C'est un travail exploratoire en vue d'approcher des opérations plus complexes sur les sons (suivi de hauteur, analyse spectrale, etc).

Ces exemples pourraient utilement être transformés en un objet codé en langage C car ils sont relativement lents, surtout quand il s'agit de fonctions qui concernent les wavesets ou des buffers longs. Si vous voyez apparaître la "balle-de-plage-de-la-mort", soyez patient, Max n'a probablement pas planté, mais il faut attendre que cela passe.

Le téléchargement se passe ici.