Garry's Mod Wiki


  sound.Generate( string indentifier, number samplerate, number length, function callbackOrData, number loopStart = nil )


Creates a sound from a function.


1 string indentifier
An unique identified for the sound.
You cannot override already existing ones.
2 number samplerate
The sample rate of the sound. Must be 11025, 22050 or 44100.
3 number length
The length in seconds of the sound to generate.
4 function or table callbackOrData
A function which will be called to generate every sample on the sound.
Function argument(s):
1 number sampleIndex - The current sample number.
Function return value(s):
1 number sampleValue - The return value must be between -1.0 and 1.0.
Other values will wrap back to the -1 to 1 range and basically clip.
There are 65535 possible quantifiable values between -1 and 1.

This argument can also be given a table of samples, where values must range from -1 to 1.
This argument can also be a string of raw 16bit binary data, (each sample is unsigned short).

5 number loopStart = nil
Sample ID of the loop start. If given, the sound will be looping and will restart playing at given position after reaching its end.
This was recently added in version (2024.06.04). It might only be available on the Dev Branch right now.


Plays a 2000 Hz sine wave at maximum volume.

local frequency = 2000 -- Hz local samplerate = 44100 local function data( t ) return math.sin( t * math.pi * 2 / samplerate * frequency ) end test_sound_id = test_sound_id and test_sound_id + 1 or 10 sound.Generate( "testgen" .. test_sound_id, samplerate, 2, data ) surface.PlaySound( "testgen" .. test_sound_id )