Пример #1
0
        private void buttonPlay_Click(object sender, System.EventArgs e)
        {
            this.checkBoxSwap.Checked    = false;
            this.checkBoxFlanger.Checked = false;
            this.checkBoxEcho.Checked    = false;
            Bass.BASS_StreamFree(_StreamFX);
            if (_FileName != String.Empty)
            {
                // create the decoding stream
                _Stream = Bass.BASS_StreamCreateFile(_FileName, 0, 0, BASSFlag.BASS_STREAM_DECODE | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_STREAM_PRESCAN);
                if (_Stream != 0)
                {
                    _20mslength = (int)Bass.BASS_ChannelSeconds2Bytes(_Stream, 0.02f);                     // 20ms window
                    // and start to get the BPM...BEFORE! playing
                    bpmProc = new BPMPROCESSPROC(MyBPMProc);
                    float bpm = BassFx.BASS_FX_BPM_DecodeGet(_Stream, 1f, 180f, Utils.MakeLong(50, 180), BASSFXBpm.BASS_FX_BPM_BKGRND | BASSFXBpm.BASS_FX_FREESOURCE | BASSFXBpm.BASS_FX_BPM_MULT2, bpmProc, IntPtr.Zero);
                    this.labelBPM.Text = String.Format("BPM={0}", bpm);

                    // and set the position back...so that we hear the playback from the beginning...
                    // never get the BPM from '_Stream' while playing...this will steel the data from the decoding channel
                    Bass.BASS_ChannelSetPosition(_Stream, 0);

                    // now we create a Tempo channel...the actual playing channel
                    _StreamFX = BassFx.BASS_FX_TempoCreate(_Stream, BASSFlag.BASS_FX_FREESOURCE | BASSFlag.BASS_SAMPLE_FLOAT | BASSFlag.BASS_SAMPLE_LOOP);
                }

                if (_StreamFX != 0 && Bass.BASS_ChannelPlay(_StreamFX, false))
                {
                    this.timerUpdate.Start();

                    // real-time beat position
                    beatProc = new BPMBEATPROC(MyBeatProc);
                    BassFx.BASS_FX_BPM_BeatCallbackSet(_StreamFX, beatProc, IntPtr.Zero);
                }
                else
                {
                    Console.WriteLine("Error = {0}", Bass.BASS_ErrorGetCode());
                }
            }
        }
Пример #2
0
        public override bool Execute(ref TrackData track, int rowIndex)
        {
            TracksGrid.SetProgressBar(100);

              int stream = Bass.BASS_StreamCreateFile(track.FullFileName, 0, 0, BASSFlag.BASS_STREAM_DECODE);
              if (stream == 0)
              {
            Log.Error("BPM: Could not create stream for {0}. {1}", track.FullFileName, Bass.BASS_ErrorGetCode());
            return false;
              }

              _bpmProc = BpmProgressProc;

              double len = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
              float bpm = BassFx.BASS_FX_BPM_DecodeGet(stream, 0.0, len, 0, BASSFXBpm.BASS_FX_BPM_BKGRND | BASSFXBpm.BASS_FX_FREESOURCE | BASSFXBpm.BASS_FX_BPM_MULT2,
                                                  _bpmProc, IntPtr.Zero);

              track.BPM = Convert.ToInt32(bpm);
              BassFx.BASS_FX_BPM_Free(stream);
              TracksGrid.MainForm.progressBar1.Value = 0;
              return true;
        }
Пример #3
0
 public static extern float BASS_FX_BPM_DecodeGet(int channel, double startSec, double endSec, int minMaxBPM, BASSFXBpm flags, BPMPROCESSPROC proc);
Пример #4
0
        /// <summary>
        ///   Detects the BPM
        /// </summary>
        public void Bpm()
        {
            log.Trace(">>>");

              int trackCount = tracksGrid.SelectedRows.Count;

              foreach (DataGridViewRow row in tracksGrid.Rows)
              {
            SetProgressBar(100);
            ClearStatusColumn(row.Index);

            if (!row.Selected)
            {
              continue;
            }

            Application.DoEvents();
            if (_progressCancelled)
            {
              ResetProgressBar();
              return;
            }

            TrackData track = Options.Songlist[row.Index];

            int stream = Bass.BASS_StreamCreateFile(track.FullFileName, 0, 0, BASSFlag.BASS_STREAM_DECODE);
            if (stream == 0)
            {
              log.Error("BPM: Could not create stream for {0}. {1}", track.FullFileName, Bass.BASS_ErrorGetCode());
              continue;
            }

            GCHandle rowIndex = GCHandle.Alloc(row.Index);
            _bpmProc = BPMProgressProc;

            double len = Bass.BASS_ChannelBytes2Seconds(stream, Bass.BASS_ChannelGetLength(stream));
            float bpm = BassFx.BASS_FX_BPM_DecodeGet(stream, 0.0, len, 0, BASSFXBpm.BASS_FX_BPM_BKGRND | BASSFXBpm.BASS_FX_FREESOURCE |BASSFXBpm.BASS_FX_BPM_MULT2,
                                                    _bpmProc,GCHandle.ToIntPtr(rowIndex));

            track.BPM = Convert.ToInt32(bpm);
            BassFx.BASS_FX_BPM_Free(stream);

            SetBackgroundColorChanged(row.Index);
            track.Changed = true;
            Options.Songlist[row.Index] = track;
            _itemsChanged = true;
              }

              Util.SendProgress("");
              ResetProgressBar();
              tracksGrid.Refresh();
              tracksGrid.Parent.Refresh();
              log.Trace("<<<");
        }
Пример #5
0
 public static extern float BASS_FX_BPM_DecodeGet(int channel, double startSec, double endSec, int minMaxBPM, BASSFXBpm flags, BPMPROCESSPROC proc);