示例#1
0
        public async Task <bool> TryInitializeAsync(IQiConnectionServiceProxy conn)
        {
            if (IsStarted || IsDisposed)
            {
                return(false);
            }
            if (IsInitialized)
            {
                return(true);
            }

            var session = conn.CurrentSession;

            if (session?.IsConnected != true)
            {
                return(false);
            }

            return(await Task.Run(() =>
            {
                //仮想ロボットとかだとALAudioDeviceが無いことに注意
                var audioDevice = session.GetService("ALAudioDevice");
                if (audioDevice.Name != ALAudioDeviceServiceName)
                {
                    return false;
                }

                _session = session;
                _audioDevice = audioDevice;
                IsInitialized = true;
                return true;
            }));
        }
示例#2
0
        private void OnCurrentSessionChanged(object sender, PropertyChangedEventArgs e)
        {
            if (!(sender is IQiConnectionServiceProxy))
            {
                return;
            }
            if (e.PropertyName != nameof(_connectionService.CurrentSession))
            {
                return;
            }

            if (_currentSession == _connectionService.CurrentSession)
            {
                return;
            }

            if (_currentSession != null)
            {
                UnsubscribeDialogIO(_currentSession);
            }
            _currentSession = _connectionService.CurrentSession;
            if (_currentSession != null)
            {
                SubscribeDialogIO(_currentSession);
            }
        }
示例#3
0
        private void UnsubscribeDialogIO(IQiSessionProxy session)
        {
            if (_humanSignals.ContainsKey(session.Url))
            {
                _humanSignals[session.Url].DisconnectSignal(OnHumanSpeechDetected);
                _humanSignals.Remove(session.Url);
            }

            if (_robotSignals.ContainsKey(session.Url))
            {
                _robotSignals[session.Url].DisconnectSignal(OnRobotSpeechDetected);
                _robotSignals.Remove(session.Url);
            }
        }
示例#4
0
        private void SubscribeDialogIO(IQiSessionProxy session)
        {
            var mem = session.GetService("ALMemory");

            //人の会話検出
            var signalHuman = mem.CallObject("subscriber", new QiString("Dialog/LastInput"));

            signalHuman.ConnectSignal("signal", OnHumanSpeechDetected);
            _humanSignals[session.Url] = signalHuman;

            //ロボット側
            var signalRobot = mem.CallObject("subscriber", new QiString("ALTextToSpeech/CurrentSentence"));

            signalRobot.ConnectSignal("signal", OnRobotSpeechDetected);
            _robotSignals[session.Url] = signalRobot;
        }
示例#5
0
 internal QiSessionChangedEventArgs(IQiSessionProxy currentSession, IQiSessionProxy previousSession)
 {
     Current  = currentSession;
     Previous = previousSession;
 }
示例#6
0
 internal QiSessionEventArgs(IQiSessionProxy session)
 {
     Session = session;
 }