SFML:如何重载数据包运算符>>使用SoundBuffer?

时间:2016-07-17 13:34:45

标签: sfml soundbuffer

我正在努力解决这个问题。我想重载运算符>>为了将SoundBuffer发送到客户端,但Packet不支持Int16 *,它是a.getSamples()的类型;

sf::Packet& operator >>(sf::Packet& packet, SoundBuffer& a)
{
    return packet >> a.getSamples() >> a.getSampleCount();
}

提前感谢您的帮助。

1 个答案:

答案 0 :(得分:0)

sf::SoundBuffer::getSamples()返回指向样本的指针。您必须发送/检索单个样本而不是指针。

我会尝试这样的事情(未经测试):

SF ::分组&安培;运算符<< (sf :: Packet& packet,SoundBuffer& a) {     std :: size_t num = a.getSampleCount();

// Send the number of samples first
packet << num;

// Now send the actual samples (repeat as long as we have some left)
for (sf::Int16 *p = a.getSamples(); num; ++p, --num)
    packet << p;

}

在客户端,您只需要反转整个事情,然后使用sf::SoundBuffer::loadFromMemory()将数据加载到缓冲区中。

请记住,这是未压缩的,可能会对连接造成负担。因此,您可能希望实现自己的压缩层。您可以在documentation page of sf::Packet上找到示例。