audio_create_buffer_sound(bufferId, bufferFormat, bufferRate, bufferOffset, bufferLength, bufferChannels);
Argument | Description |
---|---|
bufferId | The ID of the buffer to use. |
bufferFormat | The format of the data in the buffer (buffer_u8 or buffer_s16). |
bufferRate | The sample rate of the data in the buffer. |
bufferOffset | The offset into the buffer to read the sample data from (in bytes). |
bufferLength | The length of the buffer (the number of the samples in the buffer). |
bufferChannels | The channels to use from one of the constants listed below. |
Returns: Index
With this function you can create a new sound from the contents of a buffer. The buffer will have been created previously (see the buffer functions for details on how to do this), and have had data added or loaded into it. You then pass it to this function with the data format (only buffer_u8 or buffer_s16 are currently supported), the sample rate (which can be between 1000hz and 48000hz), and an offset into the buffer to get the data from. You also need to supply the number of samples in the buffer and the channels that the sound requires. These channels are defined by one of the following constants:
Constant | Description |
---|---|
audio_mono | Mono (single channel) audio. |
audio_stereo | Stereo (dual channel) audio. |
audio_3D | 3D (5.1) audio. |
Note that after you have created a sound, you should free the pointer index associated with it when it is no longer required using the function
audio_free_buffer_sound(). If you fail to do this and then re-assign the variable or change rooms etc... the sound ID will be lost and you will have a memory leak. Also note that you cannot delete
the buffer if any sound has been created from it and the sound has not been freed up first. So you would free the sound (or sounds) first, then delete
the buffer. It is also worth noting that adding anything to the buffer, or changing the buffer size, after it has had a sound created from it will give unexpected results and it is not recommended - once you have
started creating sounds from any buffer you should not manipulate it in any other way afterwards.
rate = 44100;
hertz = irandom_range(220, 880);
samples = 44100;
bufferId = buffer_create(rate, buffer_fast, 1);
buffer_seek(bufferId, buffer_seek_start, 0);
num_to_write = rate / hertz;
val_to_write = 1;
for (var i = 0; i < (samples / num_to_write) + 1; i++;)
{
for (var j = 0; j < num_to_write; j++;)
{
buffer_write(bufferId, buffer_u8, val_to_write * 255);
}
val_to_write = (1 - val_to_write);
}
soundId = audio_create_buffer_sound(bufferId, buffer_u8, rate, 0, 44100, audio_mono);
The above creates a buffer and then procedurally fills it with data. This data is then used to create a new sound, which is stored in the variable "soundID".