0

我正在努力解决这个问题。我想重载 operator >> 以便将 SoundBuffer 发送到 client ,但 Packet 不支持 Int16* 这是 a.getSamples(); 的类型

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

提前感谢您的帮助。

4

1 回答 1

0

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

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

sf::Packet& operator << (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()将数据加载到缓冲区中。

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

于 2016-07-21T15:36:13.120 回答