示例#1
0
 public void PlayOrPause()
 {
     if (State == LooperState.Waiting)
     {
         State = LooperState.ReadyToPlay;
     }
     else if (State == LooperState.Playing)
     {
         StopPlayback();
     }
 }
示例#2
0
 public void RecordOrStop()
 {
     if (State == LooperState.Recording)
     {
         StopRecording();
     }
     else
     {
         State = LooperState.Recording;
     }
 }
示例#3
0
        private void button_play_Click(object sender, EventArgs e)
        {
            State = LooperState.ReadyToPlay;

            button_play.Enabled         = false;
            button_StopPlayback.Enabled = true;

            if (Convert.ToInt32(numericUpDown_start.Value) == 0)
            {
                StartPlayback();
            }
        }
示例#4
0
        private void button_record_Click(object sender, EventArgs e)
        {
            State = LooperState.ReadyToRecord;

            button_record.Enabled        = false;
            button_StopRecording.Enabled = true;

            if (Convert.ToInt32(numericUpDown_start.Value) == 0)
            {
                StartRecording();
            }
        }
示例#5
0
        void StartPlayback()
        {
            State = LooperState.Playing;

            button_play.Enabled          = false;
            button_StopPlayback.Enabled  = true;
            numericUpDown_length.Enabled = false;
            numericUpDown_start.Enabled  = false;

            if (File.Exists("data\\" + this.Name + "\\" + FileName))
            {
                if (reader1 == null)
                {
                    reader1        = new AudioFileReader("data\\" + this.Name + "\\" + FileName);
                    reader1.Volume = trackBar_Volume.Value / 100f;

                    sampleProvider1 = new OffsetSampleProvider(reader1);
                    parent.GetRecorder().AddTrack(sampleProvider1);
                    Logger.Log(Name + " - starting playback (reader1 first)");
                }
                else if /*(reader1.Position == reader1.Length)*/ (sampleProvider1 == null)
                {
                    reader1.Position = 0;

                    sampleProvider1 = new OffsetSampleProvider(reader1);
                    parent.GetRecorder().AddTrack(sampleProvider1);
                    Logger.Log(Name + " - starting playback (reader1 repeat)");
                }
                else if (reader2 == null)
                {
                    reader2        = new AudioFileReader("data\\" + this.Name + "\\" + FileName);
                    reader2.Volume = trackBar_Volume.Value / 100f;

                    sampleProvider2 = new OffsetSampleProvider(reader2);
                    parent.GetRecorder().AddTrack(sampleProvider2);
                    Logger.Log(Name + " - starting playback (reader2 first)");
                }
                else
                {
                    reader2.Position = 0;

                    sampleProvider2 = new OffsetSampleProvider(reader2);
                    parent.GetRecorder().AddTrack(sampleProvider2);
                    Logger.Log(Name + " - starting playback (reader2 repeat)");
                }
            }
            else
            {
                parent.GetMetronome().EmergencyStop();
                MessageBox.Show("You must first record the audio.", "File doesn't exist");
            }
        }
示例#6
0
        void StopRecording()
        {
            State = LooperState.Waiting; // TODO: option to automatically start playing
            Logger.Log(Name + " - stopping recording");

            button_record.Enabled        = true;
            button_StopRecording.Enabled = false;
            button_play.Enabled          = true;
            numericUpDown_length.Enabled = true;
            numericUpDown_start.Enabled  = true;

            parent.GetRecorder().Write -= Recorder_DataAvailable;
            writer?.Dispose();
            writer = null;
        }
示例#7
0
        protected override void OnHandleDestroyed(EventArgs e)
        {
            State = LooperState.Waiting;
            reader1?.Dispose();
            reader1 = null;
            reader2?.Dispose();
            reader2 = null;
            if (parent != null)
            {
                parent.GetRecorder().RemoveTrack(sampleProvider1);
                parent.GetRecorder().RemoveTrack(sampleProvider2);
            }

            base.OnHandleDestroyed(e);
        }
示例#8
0
        void StopPlayback()
        {
            State = LooperState.Waiting;
            Logger.Log(Name + " - stopping playback");

            button_play.Enabled          = true;
            button_StopPlayback.Enabled  = false;
            numericUpDown_length.Enabled = true;
            numericUpDown_start.Enabled  = true;

            parent.GetRecorder().RemoveTrack(sampleProvider1);
            parent.GetRecorder().RemoveTrack(sampleProvider2);
            if (reader1 != null)
            {
                reader1.Position = reader1.Length;
            }
            if (reader2 != null)
            {
                reader2.Position = reader2.Length;
            }
        }
示例#9
0
        void StartRecording()
        {
            State = LooperState.Recording;
            Logger.Log(Name + " - starting recording");

            button_record.Enabled        = false;
            button_StopRecording.Enabled = true;
            button_play.Enabled          = false;
            button_StopPlayback.Enabled  = false;
            numericUpDown_length.Enabled = false;
            numericUpDown_start.Enabled  = false;

            Directory.CreateDirectory("data\\" + this.Name);

            reader1?.Dispose();
            reader1 = null;
            reader2?.Dispose();
            reader2         = null;
            sampleProvider1 = null;
            sampleProvider2 = null;
            writer          = new WaveFileWriter("data\\" + this.Name + "\\" + FileName, parent.waveFormat);
            parent.GetRecorder().Write += Recorder_DataAvailable;
        }