예제 #1
0
            public Mp3Reader(Mp3Provider provider, int index, int bufferLength)
            {
                _Provider     = provider;
                _Index        = index;
                _BufferLength = bufferLength;

                _FrameLength = _Provider._RawFormat.BitsPerSample / 8 * _Provider._RawFormat.Channels;
                _MaxOffset   = _Provider._RawData.Length - _FrameLength * _BufferLength;
            }
예제 #2
0
        private void FormFourier_Shown(object sender, EventArgs e)
        {
            _Provider = new Mp3Provider(OpenFile());
            //_Provider = new LoopbackCaptureProvider();
            //_Provider = new WaveInProvider();

            _Reader      = _Provider.GetReader(0, FFTLength(_Provider.Format.SampleRate));
            _PlayControl = _Provider.GetPlayControl();
            _Compressed  = _PlayControl.GetSpectrum();
            _FFTPlayer   = new FFTPlayer(_Reader);

            _RendererSpectrum = new SpectrumRenderer
            {
                Source = () => _Compressed,

                ScaleY = CalcScaleYSpec,
            };
            _ManagerSpectrum = new RenderingManager
            {
                Target       = pictureBox1,
                MarginTop    = 10,
                MarginBottom = 10,
            };
            _ManagerSpectrum.Layers.Add(_RendererSpectrum);
            _ManagerSpectrum.Layers.Add(new PlayControlLabelXProvider(_PlayControl));

            _ManagerSpectrum.Start(120);
            _ManagerSpectrum.DoubleClick += RendererSpectrum_DoubleClick;

            _Range = new NoteRange
            {
                Base      = NoteConstants.C4Position(_Provider.Format.SampleRate),
                OffsetMin = -4,
                OffsetMax = 5,
            };
            _NoteLabel = new NoteLabelGroup {
                Range = _Range
            };
            _Recorder    = new FFTImageRecorder(600, 800, 3, Color.White, Color.Red, Color.Yellow);
            _RendererFFT = new SpectrumRenderer
            {
                //Source = GetFFTData,
                Source2 = GetFFTData2,

                ScaleX      = _Range.CalculateLogScale,
                ScaleY      = CalcScaleYFFT,
                FixedRangeY = 10,
            };
            _RendererFFT.DataReceivers.Add(_Recorder);
            _ManagerFFT = new RenderingManager
            {
                Target = pictureBox2,

                MarginLeft   = 10,
                MarginRight  = 10,
                MarginTop    = 0,
                MarginBottom = 0,
            };
            _ManagerFFT.Layers.Add(_Recorder);
            _ManagerFFT.Layers.Add(_RendererFFT);
            _ManagerFFT.Layers.Add(_NoteLabel);

            _Provider.StateChanged += () =>
            {
                _Recorder.Enabled = _Provider.IsPlaying;
            };
            _Recorder.Enabled = _Provider.IsPlaying;

            _ManagerFFT.Start(15);
        }