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; })); }
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); }
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; })); }