private void AudioRecorder_StateChanged(object sender, RecorderStateChangedEventArgs e)
        {
            Console.WriteLine("[AudioRecorder_StateChanged] " + e.PreviousState + " --> " + e.CurrentState);
            switch (e.CurrentState)
            {
            case RecorderState.Idle:
                _state = AudioRecordState.Idle;
                break;

            case RecorderState.Paused:
                _state = AudioRecordState.Paused;
                break;

            case RecorderState.Ready:
                _state = AudioRecordState.Ready;
                break;

            case RecorderState.Recording:
                _state = AudioRecordState.Recording;
                break;
            }

            stateCallbacks(sender, (AudioRecordState)e.PreviousState, (AudioRecordState)e.CurrentState);
        }
        public AudioRecordService()
        {
            _state    = AudioRecordState.Init;
            numbering = 0;

            // Create an audio recorder
            if (_recorder == null)
            {
                // find out the available audio codec and file format
                RecorderAudioCodec AudioCodec = RecorderAudioCodec.Amr;
                foreach (RecorderAudioCodec codec in Recorder.GetSupportedAudioCodecs())
                {
                    //Console.WriteLine("RecorderAudioCodec : " + codec);
                    foreach (RecorderFileFormat format in codec.GetSupportedFileFormats())
                    {
                        //Console.WriteLine("  RecorderFileFormat : " + format);
                        if (format == AudioFileFormat)
                        {
                            AudioCodec = codec;
                            break;
                        }
                    }
                }
                //

                Console.WriteLine("+++  Selected AudioCodec : " + AudioCodec + " Format : " + AudioFileFormat);
                // 2017-12-08: Todo need to roll back..
                //_recorder = new AudioRecorder(AudioCodec, AudioFileFormat);
                //RecorderAudioCodec audioCodec, RecorderFileFormat fileFormat
                _recorder = new AudioRecorder(AudioCodec, AudioFileFormat);
                _recorder.StateChanged           += AudioRecorder_StateChanged;
                _recorder.RecordingStatusChanged += AudioRecorder_RecordingStatusChanged;
                _recorder.RecordingLimitReached  += AudioRecorder_RecordingLimitReached;
                _recorder.ErrorOccurred          += AudioRecorder_ErrorOccurred;
                AudioRecorder.DeviceStateChanged += AudioRecorder_DeviceStateChanged;
                _recorder.Interrupting           += AudioRecorder_Interrupting;
                //audioRecorder.ApplyAudioStreamPolicy(new AudioStreamPolicy(AudioStreamType.Media));
                //audioRecorder.AudioChannels = 2;
                _recorder.AudioDevice     = RecorderAudioDevice.Mic;
                _recorder.AudioBitRate    = 128000;
                _recorder.AudioSampleRate = AMC_CODEC_AUDIO_SAMPLE_RATE;

                if (_recorder.State != RecorderState.Idle)
                {
                    Console.WriteLine("AudioRecordService() : Invalid State (" + _recorder.State + ")" + "...may retry?");
                }

                _recorder.Prepare();
                if (_recorder.State != RecorderState.Ready)
                {
                    Console.WriteLine("AudioRecordService() : Invalid State (" + _recorder.State + ")" + "...may retry?");
                }

                try
                {
                    SystemStorage internalStorage = StorageManager.Storages.Where(s => s.StorageType == StorageArea.Internal).FirstOrDefault();
                    var           SoundsDir       = internalStorage.GetAbsolutePath(DirectoryType.Sounds);
                    audioStoragePath = Path.Combine(SoundsDir, "DotnetVoiceMemo");
                    // Create directory to save audio files
                    Directory.CreateDirectory(audioStoragePath);
                }
                catch (Exception e)
                {
                    Toast.DisplayText(e.Message + " - DotnetVoiceMemo directory creation failed.");
                }
            }
        }