我正在努力解决这个问题。我想重载运算符>>为了将SoundBuffer发送到客户端,但Packet不支持Int16 *,它是a.getSamples()的类型;
sf::Packet& operator >>(sf::Packet& packet, SoundBuffer& a)
{
return packet >> a.getSamples() >> a.getSampleCount();
}
提前感谢您的帮助。
答案 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
上找到示例。