Automatically toggle speaking boolean

This commit is contained in:
RogueException
2017-04-03 19:59:03 -03:00
parent af7943e62a
commit e49122ea7e
3 changed files with 14 additions and 1 deletions

View File

@@ -239,7 +239,7 @@ namespace Discord.Audio
throw new InvalidOperationException($"Discord selected an unexpected mode: {data.Mode}"); throw new InvalidOperationException($"Discord selected an unexpected mode: {data.Mode}");
_secretKey = data.SecretKey; _secretKey = data.SecretKey;
await ApiClient.SendSetSpeaking(true).ConfigureAwait(false); //await ApiClient.SendSetSpeaking(true).ConfigureAwait(false);
var _ = _connection.CompleteAsync(); var _ = _connection.CompleteAsync();
} }

View File

@@ -78,6 +78,7 @@ namespace Discord.Audio.Streams
Frame frame; Frame frame;
if (_queuedFrames.TryDequeue(out frame)) if (_queuedFrames.TryDequeue(out frame))
{ {
await _next.SetSpeakingAsync(true).ConfigureAwait(false);
await _next.WriteAsync(frame.Buffer, 0, frame.Bytes).ConfigureAwait(false); await _next.WriteAsync(frame.Buffer, 0, frame.Bytes).ConfigureAwait(false);
_bufferPool.Enqueue(frame.Buffer); _bufferPool.Enqueue(frame.Buffer);
_queueLock.Release(); _queueLock.Release();
@@ -93,6 +94,8 @@ namespace Discord.Audio.Streams
{ {
if (_silenceFrames++ < MaxSilenceFrames) if (_silenceFrames++ < MaxSilenceFrames)
await _next.WriteAsync(_silenceFrame, 0, _silenceFrame.Length).ConfigureAwait(false); await _next.WriteAsync(_silenceFrame, 0, _silenceFrame.Length).ConfigureAwait(false);
else
await _next.SetSpeakingAsync(false).ConfigureAwait(false);
nextTick += _ticksPerFrame; nextTick += _ticksPerFrame;
} }
#if DEBUG #if DEBUG

View File

@@ -6,6 +6,8 @@ namespace Discord.Audio.Streams
///<summary> Wraps an IAudioClient, sending voice data on write. </summary> ///<summary> Wraps an IAudioClient, sending voice data on write. </summary>
public class OutputStream : AudioOutStream public class OutputStream : AudioOutStream
{ {
private bool _isSpeaking;
private readonly DiscordVoiceAPIClient _client; private readonly DiscordVoiceAPIClient _client;
public OutputStream(IAudioClient client) public OutputStream(IAudioClient client)
: this((client as AudioClient).ApiClient) { } : this((client as AudioClient).ApiClient) { }
@@ -14,6 +16,14 @@ namespace Discord.Audio.Streams
_client = client; _client = client;
} }
public async Task SetSpeakingAsync(bool isSpeaking)
{
if (_isSpeaking != isSpeaking)
{
await _client.SendSetSpeaking(isSpeaking).ConfigureAwait(false);
_isSpeaking = isSpeaking;
}
}
public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancelToken) public override async Task WriteAsync(byte[] buffer, int offset, int count, CancellationToken cancelToken)
{ {
cancelToken.ThrowIfCancellationRequested(); cancelToken.ThrowIfCancellationRequested();