Пример #1
0
            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);
                });
            }
Пример #2
0
            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;
                });
            }