This is real-time reverb made inside GameMaker. No DLLs. No external files. This will create reverb from any audio asset in your game using the built in GM:Studio audio functions.
How it works
When playing a sound, the ID of that sound is passed into GM:Reverb, which stores the sound in a grid. Each row is called an "instance" of reverb. After a pre-delay, each step the sound is played again with an randomized start position and a lowered gain until it reaches zero and is removed from the grid. This repetition of sound can simulate a low-quality reverb effect.
//Example var s=audio_play_sound(sound0,false,1); scr_GMReverb_add(s);
Polyphony, Priority, Simulated Stereo, Wall Positions, Mix, Pre-delay, Attack, Decay, Diffusion, Gate (Sort of) Early Reflection with gain and delay
// Example scr_GMReverb_init(polyphony,priority,stereo); scr_GMReverb_set_model(wall_left,wall_right,falloff_dist,falloff_max_dist,falloff_factor); scr_GMReverb_set_paramaters(mix,predlay,attack,decay,diffusion,early_gain,early_delay,gate);
This is not "real" reverb. GameMaker has no way to process sounds in real time. This is brute-force reverb. It is not ideal for music. It does not support looping sounds. This is best for one-shot sound effects. While the reverb will reflect the proper gain and pitch values of a sound instance, changes made to a sound AFTER the reverb has begun will not be reflected in the reverb. This is in an effort to keep the system as lightweight as possible.
Each instance of reverb can cause hundreds of sounds to play, which cannot be directly limited but is a product of parameters such as Gain, Decay and Gate. You can cut this number in half by setting the stereo argument to false in scr_GMReverb_inti(). You can limit the number of instances via the polyphony parameter so that newly created reverb instances will cut off older ones. Gate too will help as it stops new sounds from being played once the reverb has faded to a certain level. Be sure to make use of audio_channel_num() to set an appropriate number of available channels for your game and assign a low priority to reverb. If you are hearing artifacts in the audio, your audio channel number is likely too low for the amount of reverb you are using. However, a large audio channel number can have a significant impact on performance. This balance is for you to decide. You should definitely give your players the option of enabling/disabling reverb, and you should also create quality settings that manipulate the values of stereo, polyphony and available audio channels. This was designed to run at 60fps and running it another framerate will take some adjusting.