Hi. I'm here to show everyone and demonstrate the 2 dimensional physical model synthesizer that targets the GPU.
I've purposefully chosen my mid-range laptop here in order to show the near real-time performance achievable on even modest hardware.
The synthesizer has been programmed for the GPU processing using OpenCL and the visualization runs on the GPU using OpenGL.
I am using this Sensel Morph here as a sensor contact as excitation input into the physical model.
Here, you can see the user interface we provide for the application.
In the right window, is the control parameters for the physical models. This is built on the C++ JUCE framework, which also handles the real-time audio playback.
In the left window is the physical model visualization provided using OpenGL.
The first two parameters set the model width and height respectively. This controls the number of grid points in the 2 dimensional space representing the model.
The number of grid points in the entire model is therefore the width times the height.
All the grid points must be evaluated per sample basis. Therefore, at a sample rate of 44.1KHz, the entire mesh must be evaluated 44 thousand 100 times a second.
This is substantial and made possible by the GPUs parallel computation format.
Notice how when we increase the size of the model too heigh an amount, the audio rate cannot be sustained.
The first coefficient from the physical model we are having a look at here is the propagation coefficient.
This essentially controls the speed at which the sound wave propagates through our simulation.
So here we are decreasing it, and after, increasing it.
Now I'm controlling the damping coefficient. This controls the amount of energy in the wave that is absorbed as it travels through the medium.
Notice as we increase this damping coefficient past a certain point, we can not hear any noise. This is as the wave doesn't reach the sampling position we have in the model.
The final coefficient we expose in our physical model is the boundary coefficient and this is the degree of reflection from the edge or the boundary of our model, back into the system.
So we are changing this from one extreme of the spectrum of 0 to the other end of 1 with full reflection.
And now, we are modifying the shape of the physical model, by modifying the boundary within our simulated environment.
And as you can hear, this results in distinctly different sounds generated as the waves propagate in different ways as they reflect of the boundary.
At the bottom here I have some preset configurations and I'm just going to modify it to be a circle shape.
Thank you for watching and for those interested in the full write up including discussions of how synchronization was
designed into this application. This can be found the website at the following link.
The source code is also provided and available at GitHub.