我必须编写一个逐步填充/读取的音频缓冲区。
现在我正在使用
mRectPaintPrimary.setColor(getResources().getColor(mPrimaryColor));
当从缓冲区中读取 mRectPaintPrimary.setColor(ContextCompat.getColor(mContext,mPrimaryColor));
个样本时(我必须清除它以释放RAM)。
但我知道m_outputBuffer.erase(
m_outputBuffer.begin(),
m_outputBuffer.begin()+read_samples);
是非常昂贵的,所以我有什么选择,考虑到我基本上只需要将指针移动到缓冲区的第一个元素并释放开头?
答案 0 :(得分:1)
std::deque
似乎是最适合此类内容的容器。 std::deque
是一个随机访问容器,如std::vector
,但在容器的开头具有(摊销的)常量插入和删除复杂性,与std::vector
不同(并且在容器的末尾为孔)。
答案 1 :(得分:0)
最后我还在使用
m_outputBuffer.erase(
m_outputBuffer.begin(),
m_outputBuffer.begin()+read_samples);
因为它非常有效:擦除在一个块中完成,剩下的数据在我的向量的开头重新定位,因此没有指针改变。
答案 2 :(得分:-3)
不要使用C ++。用C语言写,这当然也是C ++的一个子集。
缓冲区由一个内存区域和两个指针组成,一个指向起始位置,一个指向结尾。当数据进入时,您将其添加到结束指针,直到您换行。数据熄灭时,增加读指针。您永远不需要删除或删除数据。如果缓冲区溢出,可能意味着出现了问题,您需要关闭系统 - 扩展它只会延长崩溃过程。