Here is a granular synthesizer I made using the FluCoMa toolkit. There are some kinks to be worked out, but I would love to hear your thoughts so far!
This project explores an interactive approach to granular synthesis by representing audio grains in a perceptually informed feature space. Audio files are segmented into short grains, and each grain is analyzed using spectral and perceptual descriptors including spectral centroid, spectral flatness, pitch confidence, and loudness.
The resulting feature dataset is organized using a k-d tree to enable efficient k-nearest-neighbor queries, allowing real-time, controllable clustering and traversal of similar sounds. An interactive interface visualizes each grain as a point in feature space, enabling continuous navigation, playback, and dynamic effects processing, and supporting intuitive exploration of timbre and texture in real time.
This is a very cool project, a personal take on descriptor-based granulation, with great additions (live feed and effects are nice touches)
I have, as a performer, a question: what happens if you want to remove a player/sound/head/source as you play? I see your space growing, but I wonder if there is a way to clear entries as you play along and want to restrict the material. This is apparent to me when you enter the kid voices, it gets cool and messy and maybe removing one more ‘pitched’ material there could make you transition very spoken words for instance?
This is definitely possible, and is a feature I plan to add in the next iteration of the patch!
All slice points and descriptors of each grain are stored in a local-emitter dataset upon slicing, as well as populated into a global dataset that houses all grains of all emitters. It is this global dataset that we browse grains for playback. The grains here are organized based on their descriptors, however by simply assigning a grain ID to local-emitter grains upon slicing, we can track and remove them from the global dataset.
As you pointed out this would be great for performer control of the evolving feature space, and is definitely something I plan to add!