gpt4 book ai didi

iphone - 无法删除 OpenAL 缓冲区

转载 作者:塔克拉玛干 更新时间:2023-11-02 08:04:39 31 4
gpt4 key购买 nike

我正在为 iPhone 和 OpenAL 使用 XCode 4.5。问题是我无法删除声音缓冲区,在我播放声音后:alSourcePlay()。 如果我不播放源 - 缓冲区被删除并且内存被毫无问题地释放。

加载声音:

alGenBuffers(1, &bufferID);

// Loading awaiting data blob into buffer.
alBufferData(bufferID, format, outData, size, freq);

// Getting source ID from OpenAL.
alGenSources(1, &sourceID);

// Attacing buffer to source.
alSourcei(sourceID, AL_BUFFER, bufferID);

//playing sound (if i comment this line, the problem dissapears)
alSourcePlay(soundId);

释放声音:

//detaching buffer
alSourcei(sourceID, AL_BUFFER, bufferID);
//deleting source
alDeleteSources(1, &sourceID);
//deleting buffer
alDeleteBuffers(1, &bufferID);

删除缓冲区不会引发任何错误,但不会从内存中释放。我正在使用 Instruments 来监控内存。

我花了一周时间寻找解决方案并阅读 OpenAL 文档。

如果您有 OpenAL 经验,请帮忙!

谢谢!

最佳答案

来自文档:

alDeleteBuffers

Description: This function deletes one or more buffers, freeing the resources used by the buffer. Buffers which are attached to a source can not be deleted. See alSourcei and alSourceUnqueueBuffers for information on how to detach a buffer from a source.

alSourcei

Remarks: The buffer name zero is reserved as a “NULL Buffer" and is accepted by alSourcei(..., AL_BUFFER, ...) as a valid buffer of zero length. The NULL Buffer is extremely useful for detaching buffers from a source which were attached using this call or with alSourceQueueBuffers.

这应该有效:

//detaching buffer
alSourcei(sourceID, AL_BUFFER, 0); //<-- detach using NULL buffer
//deleting source
alDeleteSources(1, &sourceID);
//deleting buffer
alDeleteBuffers(1, &bufferID);

关于iphone - 无法删除 OpenAL 缓冲区,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15736572/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com