Example #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;
            }));
        }
Example #2
0
        private static WaveInEvent CreateWaveIn(IQiServiceProxy alAudioDevice)
        {
            var waveIn = GetFormattedWaveIn();

            waveIn.DataAvailable += (_, e) =>
            {
                //QiByteDataにムダに長いバッファ投げないためにコピーを採用
                byte[] bufferToSend = new byte[e.BytesRecorded];
                Array.Copy(e.Buffer, bufferToSend, e.BytesRecorded);

                alAudioDevice.Post("sendRemoteBufferToOutput",
                                   new QiInt32(e.BytesRecorded / 4),
                                   new QiByteData(bufferToSend)
                                   );
            };
            return(waveIn);
        }
Example #3
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;
                }

                _audioDevice = audioDevice;
                _audioDevice.Call("setParameter",
                                  new QiString("outputSampleRate"),
                                  new QiInt32(OutputSampleRate)
                                  );

                IsInitialized = true;
                return true;
            }));
        }