2016-07-17 10 views
0

私はこれで苦労しています。 SoundBufferをクライアントに送るためにoperator >>をオーバーロードしたいのですが、Packetはa.getSamples()の型であるInt16 *をサポートしていません。SFML:Packet operator >>にSoundBufferをオーバーロードする方法は?

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

ありがとうございました。

答えて

0

sf::SoundBuffer::getSamples()は、サンプルへのポインタを返します。ポインタだけではなく個々のサンプルを送信/取得する必要があります。

私は、この(未テスト)のようなものを試してみた:

平方フィートを::パケット&オペレータ< <(SF ::パケット&パケット、SoundBuffer A &) { のstd :: size_tのNUM =。 getSampleCount();あなただけのバッファにデータをロードするsf::SoundBuffer::loadFromMemory()を使用し、その後、全体のことを逆にする必要があります、クライアント側では

// 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; 

}

これは圧縮されておらず、むしろ接続に負担をかけるかもしれないことに留意してください。そのため、独自の圧縮レイヤーを実装することもできます。 documentation page of sf::Packetに例があります。

関連する問題