Exposed VoiceWebSocket.VoiceBuffer
This commit is contained in:
@@ -4,7 +4,12 @@ using System.Threading;
|
||||
namespace Discord.WebSockets.Voice
|
||||
{
|
||||
public class VoiceBuffer
|
||||
{
|
||||
{
|
||||
public int FrameSize => _frameSize;
|
||||
public int FrameCount => _frameCount;
|
||||
public ushort ReadPos => _readCursor;
|
||||
public ushort WritePos => _readCursor;
|
||||
|
||||
private readonly int _frameSize, _frameCount, _bufferSize;
|
||||
private readonly byte[] _buffer;
|
||||
private readonly byte[] _blankFrame;
|
||||
@@ -12,7 +17,7 @@ namespace Discord.WebSockets.Voice
|
||||
private ManualResetEventSlim _underflowEvent, _notOverflowEvent;
|
||||
private bool _isClearing;
|
||||
|
||||
public VoiceBuffer(int frameCount, int frameSize)
|
||||
internal VoiceBuffer(int frameCount, int frameSize)
|
||||
{
|
||||
_frameSize = frameSize;
|
||||
_frameCount = frameCount;
|
||||
@@ -25,7 +30,7 @@ namespace Discord.WebSockets.Voice
|
||||
_notOverflowEvent = new ManualResetEventSlim(); //Notifies when an overflow is solved
|
||||
}
|
||||
|
||||
public void Push(byte[] buffer, int bytes, CancellationToken cancelToken)
|
||||
internal void Push(byte[] buffer, int bytes, CancellationToken cancelToken)
|
||||
{
|
||||
int wholeFrames = bytes / _frameSize;
|
||||
int expectedBytes = wholeFrames * _frameSize;
|
||||
@@ -69,7 +74,7 @@ namespace Discord.WebSockets.Voice
|
||||
}
|
||||
}
|
||||
|
||||
public bool Pop(byte[] buffer)
|
||||
internal bool Pop(byte[] buffer)
|
||||
{
|
||||
if (_writeCursor == _readCursor)
|
||||
{
|
||||
@@ -88,7 +93,7 @@ namespace Discord.WebSockets.Voice
|
||||
return !isClearing;
|
||||
}
|
||||
|
||||
public void Clear(CancellationToken cancelToken)
|
||||
internal void Clear(CancellationToken cancelToken)
|
||||
{
|
||||
lock (this)
|
||||
{
|
||||
@@ -102,7 +107,7 @@ namespace Discord.WebSockets.Voice
|
||||
}
|
||||
}
|
||||
|
||||
public void Wait(CancellationToken cancelToken)
|
||||
internal void Wait(CancellationToken cancelToken)
|
||||
{
|
||||
_underflowEvent.Wait(cancelToken);
|
||||
}
|
||||
|
||||
@@ -29,7 +29,7 @@ namespace Discord.WebSockets.Voice
|
||||
private uint _ssrc;
|
||||
private ConcurrentDictionary<uint, string> _ssrcMapping;
|
||||
|
||||
private VoiceBuffer _sendQueue;
|
||||
private VoiceBuffer _sendBuffer;
|
||||
private UdpClient _udp;
|
||||
private IPEndPoint _endpoint;
|
||||
private bool _isEncrypted;
|
||||
@@ -43,6 +43,7 @@ namespace Discord.WebSockets.Voice
|
||||
|
||||
public string CurrentServerId => _serverId;
|
||||
public string CurrentChannelId => _channelId;
|
||||
public VoiceBuffer OutputBuffer => _sendBuffer;
|
||||
|
||||
public VoiceWebSocket(DiscordSimpleClient client)
|
||||
: base(client)
|
||||
@@ -53,7 +54,7 @@ namespace Discord.WebSockets.Voice
|
||||
_encodingBuffer = new byte[MaxOpusSize];
|
||||
_ssrcMapping = new ConcurrentDictionary<uint, string>();
|
||||
_encoder = new OpusEncoder(48000, 1, 20, Opus.Application.Audio);
|
||||
_sendQueue = new VoiceBuffer((int)Math.Ceiling(client.Config.VoiceBufferLength / (double)_encoder.FrameLength), _encoder.FrameSize);
|
||||
_sendBuffer = new VoiceBuffer((int)Math.Ceiling(client.Config.VoiceBufferLength / (double)_encoder.FrameLength), _encoder.FrameSize);
|
||||
}
|
||||
|
||||
public Task SetChannel(string serverId, string channelId)
|
||||
@@ -378,7 +379,7 @@ namespace Discord.WebSockets.Voice
|
||||
{
|
||||
while (sw.ElapsedTicks > nextTicks)
|
||||
{
|
||||
if (_sendQueue.Pop(frame))
|
||||
if (_sendBuffer.Pop(frame))
|
||||
{
|
||||
ushort sequence = unchecked(_sequence++);
|
||||
udpPacket[2] = (byte)((sequence >> 8) & 0xFF);
|
||||
@@ -518,11 +519,11 @@ namespace Discord.WebSockets.Voice
|
||||
|
||||
public void SendPCMFrames(byte[] data, int bytes)
|
||||
{
|
||||
_sendQueue.Push(data, bytes, _cancelToken);
|
||||
_sendBuffer.Push(data, bytes, _cancelToken);
|
||||
}
|
||||
public void ClearPCMFrames()
|
||||
{
|
||||
_sendQueue.Clear(_cancelToken);
|
||||
_sendBuffer.Clear(_cancelToken);
|
||||
}
|
||||
|
||||
private void SendIsTalking(bool value)
|
||||
@@ -540,7 +541,7 @@ namespace Discord.WebSockets.Voice
|
||||
|
||||
public void WaitForQueue()
|
||||
{
|
||||
_sendQueue.Wait(_cancelToken);
|
||||
_sendBuffer.Wait(_cancelToken);
|
||||
}
|
||||
public Task WaitForConnection(int timeout)
|
||||
{
|
||||
|
||||
Reference in New Issue
Block a user