public AudioRecorderControl()
        {
            InitializeComponent();

            _asyncDispatcher = new XnaAsyncDispatcher(TimeSpan.FromMilliseconds(33), OnTimerTick);
            _microphone      = Microphone.Default;

            if (_microphone == null)
            {
                RecordButton.Visibility = Visibility.Collapsed;
                Visibility       = Visibility.Collapsed;
                IsHitTestVisible = false;
                return;
            }

            var rate = _microphone.SampleRate;

            _microphone.BufferDuration = TimeSpan.FromMilliseconds(240);
            _duration = _microphone.BufferDuration;
            _buffer   = new byte[_microphone.GetSampleSizeInBytes(_microphone.BufferDuration)];

            Loaded += (o, e) =>
            {
                _microphone.BufferReady += Microphone_OnBufferReady;
            };
            Unloaded += (o, e) =>
            {
                _microphone.BufferReady -= Microphone_OnBufferReady;
            };
        }
Beispiel #2
0
        private void RecordButton_OnMouseLeftButtonDown(object sender, MouseButtonEventArgs e)
        {
            if (!IsHitTestVisible)
            {
                return;
            }
            var microphoneState = _microphone != null ? _microphone.State : (MicrophoneState?)null;

            if (microphoneState == MicrophoneState.Started)
            {
                return;
            }
            if (_isHintStoryboardPlaying)
            {
                return;
            }

            Log(string.Format("microphone_state={0} storyboard_state={1}", microphoneState, _isHintStoryboardPlaying));

            if (Component == null)
            {
                return;
            }
            if (_asyncDispatcher == null)
            {
                _asyncDispatcher = new XnaAsyncDispatcher(TimeSpan.FromMilliseconds(33), OnTimerTick);
            }

            if (SliderPanel == null)
            {
                SliderPanel = CreateSliderPanel();
                LayoutRoot.Children.Add(SliderPanel);
            }
            if (TimerPanel == null)
            {
                TimerPanel = CreateTimerPanel();
                LayoutRoot.Children.Add(TimerPanel);
            }

            if (_microphone == null)
            {
                _microphone = Microphone.Default;

                ShellViewModel.WriteTimer("AudioRecorderControl ctor microphone");

                if (_microphone == null)
                {
                    RecordButton.Visibility = Visibility.Collapsed;
                    Visibility       = Visibility.Collapsed;
                    IsHitTestVisible = false;

                    return;
                }

                try
                {
                    _microphone.BufferDuration = TimeSpan.FromMilliseconds(240);
                    _duration = _microphone.BufferDuration;
                    _buffer   = new byte[_microphone.GetSampleSizeInBytes(_microphone.BufferDuration)];
                }
                catch (Exception ex)
                {
                    TLUtils.WriteException(ex);

                    RecordButton.Visibility = Visibility.Collapsed;
                    Visibility       = Visibility.Collapsed;
                    IsHitTestVisible = false;

                    return;
                }

                _microphone.BufferReady += Microphone_OnBufferReady;
            }

            _skipBuffersCount = 0;
            _fileId           = TLLong.Random();
            _fileName         = _fileId.Value + ".mp3";
            _isPartReady      = true;
            _uploadingLength  = 0;
            _uploadableParts.Clear();

            _isSliding       = true;
            _stopRequested   = false;
            _cancelRequested = false;

            RaiseRecordStarted();

            if (Duration != null)
            {
                Duration.Text = "00:00.00";
            }
            if (Slider != null)
            {
                ((TranslateTransform)Slider.RenderTransform).X = 0.0;
            }
            Component.StartRecord(ApplicationData.Current.LocalFolder.Path + "\\" + _fileName);

            _stream    = new MemoryStream();
            _startTime = DateTime.Now;
            VibrateController.Default.Start(TimeSpan.FromMilliseconds(25));

            Execute.BeginOnUIThread(TimeSpan.FromMilliseconds(25.0), () =>
            {
                if (!_isSliding)
                {
                    if (_stopRequested)
                    {
                        _stopRequested   = false;
                        _cancelRequested = false;

                        _isHintStoryboardPlaying = true;
                        HintStoryboard.Begin();
                        return;
                    }
                    Log("_isSliding=false return");
                    return;
                }

                if (Slider != null)
                {
                    Slider.Visibility = Visibility.Visible;
                }
                if (TimerPanel != null)
                {
                    TimerPanel.Visibility = Visibility.Visible;
                }

                _asyncDispatcher.StartService(null);
                _microphone.Start();

                StartRecordingStoryboard();
            });
        }