示例#1
0
        // Currently deletes same segment from multiple channels
        public void Delete()
        {
            if (Service.DLLWrapper.Safe)
            {
                // set cursor based on current panel
                Cursor cursor  = panel.TimeChannel1.ChartArea.CursorX;
                int    smaller = (int)Math.Min(cursor.SelectionStart, cursor.SelectionEnd);
                int    bigger  = (int)Math.Max(cursor.SelectionStart, cursor.SelectionEnd);

                WavPackager packager = new WavPackager(null);
                RIFFData    riff;

                for (int i = 0; i < panel.PanelData.RawChartData.Count; i++)
                {
                    switch (panel.PanelData.RIFFData.BitsPerSample)
                    {
                    case 8:
                        panel.PanelData.RawChartData[i].RemoveRange(smaller, bigger - smaller);
                        panel.PanelData.RawChannelData[i].RemoveRange(smaller, bigger - smaller);
                        break;

                    case 16:
                        panel.PanelData.RawChartData[i].RemoveRange(smaller, bigger - smaller);
                        panel.PanelData.RawChannelData[i].RemoveRange(smaller * 2, (bigger - smaller) * 2);
                        break;

                    case 24:
                        panel.PanelData.RawChartData[i].RemoveRange(smaller, bigger - smaller);
                        panel.PanelData.RawChannelData[i].RemoveRange(smaller * 3, (bigger - smaller) * 3);
                        break;

                    case 32:
                        panel.PanelData.RawChartData[i].RemoveRange(smaller, bigger - smaller);
                        panel.PanelData.RawChannelData[i].RemoveRange(smaller * 4, (bigger - smaller) * 4);
                        break;

                    default:
                        Console.WriteLine("DeleteWorker - Unsupported bits per sample");
                        break;
                    }
                }

                riff = packager.GenerateRIFFData(panel);
                panel.PanelData.RIFFData = riff;

                panel.TimeChannel1.RefreshViewablePoints();
                if (panel.TimeChannel2 != null)
                {
                    panel.TimeChannel2.RefreshViewablePoints();
                }
            }
            else
            {
                Console.WriteLine("Unsafe Delete() attempted; ignored");
            }
        }
        protected void RunFilterOnSelection(object sender, EventArgs e)
        {
            // Filter to time domain
            Console.WriteLine("Running IDFT");
            int count = filter.Count;

            threads[0] = new Thread(() => ThreadedIDFT(0, 0, count / 4));
            threads[1] = new Thread(() => ThreadedIDFT(1, count / 4, count / 2));
            threads[2] = new Thread(() => ThreadedIDFT(2, count / 2, count * 3 / 4));
            threads[3] = new Thread(() => ThreadedIDFT(3, count * 3 / 4, count));

            threads[0].Start();
            threads[1].Start();
            threads[2].Start();
            threads[3].Start();

            idftResult = new List <int>();
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
                idftResult.AddRange(idftResults[i]);
            }

            count = entry.PanelData.RawChartData[chIndex].Count;
            Console.WriteLine("idftResult: " + count);

            threads[0] = new Thread(() => ThreadedConvolution(0, 0, count / 4));
            threads[1] = new Thread(() => ThreadedConvolution(1, count / 4, count / 2));
            threads[2] = new Thread(() => ThreadedConvolution(2, count / 2, count * 3 / 4));
            threads[3] = new Thread(() => ThreadedConvolution(3, count * 3 / 4, count));

            threads[0].Start();
            threads[1].Start();
            threads[2].Start();
            threads[3].Start();

            convolutionResult = new List <int>();
            for (int i = 0; i < threads.Length; i++)
            {
                threads[i].Join();
                convolutionResult.AddRange(convolutionResults[i]);
            }

            // Apply filter to time domain
            entry.PanelData.RawChartData[chIndex] = convolutionResult;

            // Repackage byte data for playback
            entry.PanelData.RawChannelData[chIndex] = entry.PanelData.IntToByteList(entry.PanelData.RawChartData[chIndex], entry.PanelData.RIFFData);
            WavPackager packager = new WavPackager(null);

            entry.PanelData.RIFFData = packager.GenerateRIFFData(entry);

            Console.WriteLine("IDFT completed");
        }
        private void SaveAs_Click(object sender, EventArgs e)
        {
            SaveFileDialog sfd = new SaveFileDialog();

            sfd.InitialDirectory = @"C:\";
            sfd.Title            = "Save As ...";

            sfd.CheckPathExists = true;

            sfd.AddExtension     = true;
            sfd.DefaultExt       = "wav";
            sfd.Filter           = "WAV files (*.wav) | *.wav";
            sfd.RestoreDirectory = true;

            if (sfd.ShowDialog() == DialogResult.OK)
            {
                WavPackager wp = new WavPackager(sfd.FileName);
                //wp.WriteFile(parent.PanelData.RIFFData);
                wp.WriteFile(wp.GenerateRIFFData(parent));
            }
        }