audio_create_buffer_sound

使用此函数,您可以从缓冲区的内容创建新的声音。

缓冲区应以前创建过(有关如何执行此操作的详细信息,请参阅缓冲区函数),并已添加或加载数据到缓冲区中。然后使用数据格式(当前仅支持buffer_u8buffer_s16)、采样速率(可以介于 8000hz 和 48000hz 之间)和缓冲区中的偏移量将其传递给此函数,以便从中获取数据。

注意您不能将buffer_grow类型的缓冲区传递到此函数中。

您还需要提供缓冲区中的采样数和声音所需的通道。这些通道由以下常数之一定义:

音频通道常量
常量描述
audio_monoMono (single channel) audio
audio_stereoStereo (dual channel) audio
audio_3D3D (5.1) audio

请注意,创建声音后,当不再需要使用函数audio_free_buffer_sound()时,应释放与之关联的指针索引。 如果您没有这样做,然后重新分配变量或更改房间等。 声音ID将丢失,您将发生内存泄漏。

如果已从缓冲区中创建了任何声音,并且该声音尚未首先释放,则无法删除该缓冲区。所以你应该先释放声音,然后删除缓冲区。

在从缓冲区创建声音后,向缓冲区添加任何内容或更改缓冲区大小都会产生意外的结果,不建议这样做-一旦您开始从任何缓冲区创建声音,之后就不应以任何其他方式对其进行操作。

 

语法:

audio_create_buffer_sound(bufferId, bufferFormat, bufferRate, bufferOffset, bufferLength, bufferChannels);

参数类型描述
bufferIdBuffer要使用的缓冲区的ID.
bufferFormatBuffer Data Type Constant缓冲区中数据的格式(buffer_u8buffer_s16)。
bufferRateReal缓冲区中数据的采样率。
bufferOffsetReal要从中读取样本数据的缓冲区的偏移量(以字节为单位)。
bufferLengthReal缓冲区的长度(音频数据的字节数,不包括报头)。
bufferChannels音频通道常量要使用的通道来自上面列出的常量之一。

 

返回:

Sound Asset

 

例子:

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 "中。