using System.Text.Json; namespace BotSharp.Test.RealtimeVoice.Session; internal partial class ConsoleChatSession { /// /// Start a new chat session via stream channel /// /// /// private async Task StartStreamChannelAsync(string agentId) { DisplayRemarks(); var (hub, conversationId) = await Setup(agentId); var channel = _services.GetRequiredService(); await channel.ConnectAsync(conversationId); await hub.ConnectToModel(async data => { var response = JsonSerializer.Deserialize(data); if (response.Event == "speech_detected") { channel.ClearBuffer(); } else if (response.Event == "media") { var message = JsonSerializer.Deserialize(data); await channel.SendAsync(Convert.FromBase64String(message.Media), CancellationToken.None); } }); StreamReceiveResult result; var buffer = new byte[1024 * 32]; do { var seg = new ArraySegment(buffer); result = await channel.ReceiveAsync(seg, CancellationToken.None); await hub.Completer.AppenAudioBuffer(seg, result.Count); // Display the audio level int audioLevel = CalculateAudioLevel(buffer, result.Count); DisplayAudioLevel(audioLevel); } while (result.Status == StreamChannelStatus.Open); } }