public async void Start(InstaDirectInboxThread thread) { CurrentThread = thread; await _recordQueue.Enqueue(async() => { if (_recorder != null) { RecordingFailed?.Invoke(this, EventArgs.Empty); return; } var fileName = string.Format("voice_{0:yyyy}-{0:MM}-{0:dd}_{0:HH}-{0:mm}-{0:ss}.mp3", DateTime.Now); var cache = await localFolder.CreateFileAsync(fileName, CreationCollisionOption.GenerateUniqueName); try { _file = cache; _recorder = new Mp3Recorder(cache) { m_mediaCapture = new MediaCapture() }; await _recorder.m_mediaCapture.InitializeAsync(/*_recorder.settings*/); await _recorder.StartAsync(); _start = DateTime.Now; } catch (Exception ex) { _recorder.Dispose(); _recorder = null; _file = null; RecordingFailed?.Invoke(this, EventArgs.Empty); return; } RecordingStarted?.Invoke(this, EventArgs.Empty); }); }
public async void Stop(bool cancel) { await _recordQueue.Enqueue(async() => { var recorder = _recorder; var file = _file; if (recorder == null || file == null) { return; } RecordingStopped?.Invoke(this, EventArgs.Empty); var now = DateTime.Now; var elapsed = now - _start; await recorder.StopAsync(); if (cancel || elapsed.TotalMilliseconds < 700) { try { await file.DeleteAsync(); } catch { } if (elapsed.TotalMilliseconds < 700) { RecordingTooShort?.Invoke(this, EventArgs.Empty); } } else { Send(file); } _recorder = null; _file = null; }); }