使用此函数,您可以从缓冲区的内容创建新的声音。
缓冲区应以前创建过(有关如何执行此操作的详细信息,请参阅缓冲区函数),并已添加或加载数据到缓冲区中。然后使用数据格式(当前仅支持buffer_u8或buffer_s16)、采样速率(可以介于 8000hz 和 48000hz 之间)和缓冲区中的偏移量将其传递给此函数,以便从中获取数据。
注意您不能将buffer_grow类型的缓冲区传递到此函数中。
您还需要提供缓冲区中的采样数和声音所需的通道。这些通道由以下常数之一定义:
音频通道常量 | |
---|---|
常量 | 描述 |
audio_mono | Mono (single channel) audio |
audio_stereo | Stereo (dual channel) audio |
audio_3D | 3D (5.1) audio |
请注意,创建声音后,当不再需要使用函数audio_free_buffer_sound()时,应释放与之关联的指针索引。 如果您没有这样做,然后重新分配变量或更改房间等。 声音ID将丢失,您将发生内存泄漏。
如果已从缓冲区中创建了任何声音,并且该声音尚未首先释放,则无法删除该缓冲区。所以你应该先释放声音,然后再删除缓冲区。
在从缓冲区创建声音后,向缓冲区添加任何内容或更改缓冲区大小都会产生意外的结果,不建议这样做-一旦您开始从任何缓冲区创建声音,之后就不应以任何其他方式对其进行操作。
audio_create_buffer_sound(bufferId, bufferFormat, bufferRate, bufferOffset, bufferLength, bufferChannels);
参数 | 类型 | 描述 |
---|---|---|
bufferId | Buffer | 要使用的缓冲区的ID. |
bufferFormat | Buffer Data Type Constant | 缓冲区中数据的格式(buffer_u8或buffer_s16)。 |
bufferRate | Real | 缓冲区中数据的采样率。 |
bufferOffset | Real | 要从中读取样本数据的缓冲区的偏移量(以字节为单位)。 |
bufferLength | Real | 缓冲区的长度(音频数据的字节数,不包括报头)。 |
bufferChannels | 音频通道常量 | 要使用的通道来自上面列出的常量之一。 |
var rate = 44100;
var hertz = irandom_range(220, 880);
var samples = 44100;
var bufferId = buffer_create(rate, buffer_fast, 1);
buffer_seek(bufferId, buffer_seek_start, 0);
var num_to_write = rate / hertz;
var length = buffer_get_size(bufferId);
var 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, length, audio_stereo);
上面的代码创建了一个缓冲区,然后按程序用数据填充它。然后,该数据用于创建新的声音,该声音存储在变量" soundid "中。