/// <summary> /// Initializes a new instance of the <see cref="DialogManager{TInputType}"/> class. /// </summary> /// <param name="dialogBackend"> The dialog backend for the manager to use. </param> /// <param name="keywordRegistration"> The keyword registration with the current keyword file information.</param> /// <param name="dialogAudioInput"> The input audio provider. </param> /// <param name="agentSessionManager"> The manager that provides the instance of agent session wrapper. </param> /// <param name="dialogAudioOutput"> The dialog audio output sink to use. </param> public DialogManager( IDialogBackend <TInputType> dialogBackend, IKeywordRegistration keywordRegistration, IDialogAudioInputProvider <TInputType> dialogAudioInput, IAgentSessionManager agentSessionManager, IDialogAudioOutputAdapter dialogAudioOutput = null) { Contract.Requires(dialogBackend != null); Contract.Requires(agentSessionManager != null); this.logger = LogRouter.GetClassLogger(); this.dialogBackend = dialogBackend; this.dialogBackend.SessionStarted += (id) => this.logger.Log($"DialogManager: Session start: {id}"); this.dialogBackend.SessionStopped += (id) => this.logger.Log($"DialogManager: Session stop: {id}"); this.dialogBackend.KeywordRecognizing += this.OnKeywordRecognizing; this.dialogBackend.KeywordRecognized += this.OnKeywordRecognized; this.dialogBackend.SpeechRecognizing += this.OnSpeechRecognizing; this.dialogBackend.SpeechRecognized += async(text) => await this.OnSpeechRecognizedAsync(text); this.dialogBackend.DialogResponseReceived += this.OnActivityReceived; this.dialogBackend.ErrorReceived += async(errorInformation) => await this.OnErrorReceivedAsync(errorInformation); this.dialogAudioInput = dialogAudioInput; this.keywordRegistration = keywordRegistration; this.agentSessionManager = agentSessionManager; this.agentSessionManager.SignalDetected += (sender, args) => this.HandleSignalDetection(args); this.InitializeSignalDetectionHelper(); _ = this.InitializeAsync(dialogAudioOutput); }
/// <summary> /// Sets the audio source to be used by this dialog backend and registers its data /// for use. /// </summary> /// <param name="source"> The agent audio source to use. </param> public void SetAudioSource(IDialogAudioInputProvider <List <byte> > source) { if (this.audioSource != source) { Contract.Requires(source != null); this.audioSource = source; this.audioSource.DataAvailable += (bytes) => { this.connectorInputStream?.Write(bytes.ToArray()); }; } }
/// <summary> /// Free disposable resources per the IDisposable interface. /// </summary> /// <param name="disposing"> Whether managed state is being disposed. </param> protected virtual async void Dispose(bool disposing) { if (!this.AlreadyDisposed) { if (disposing) { await this.StopAudioCaptureAsync(); await this.StopAudioPlaybackAsync(); this.dialogBackend?.Dispose(); this.dialogAudioInput?.Dispose(); this.dialogAudioOutput?.Dispose(); } this.dialogBackend = null; this.dialogAudioInput = null; this.dialogAudioOutput = null; this.AlreadyDisposed = true; } }
public void SetAudioSource(IDialogAudioInputProvider <List <byte> > source) { }