Exemple #1
0
        void _DoSlicing(object sender, DoWorkEventArgs e)
        {
            BackgroundWorker w = sender as BackgroundWorker;
            inputWavFile.Rewind();
            uint samplesPerSlice = 0;

            if(durationRadio.Checked) {
                samplesPerSlice = (uint)(durationBox.Value * (decimal)inputWavFile.SampleRate);
            } else {
                samplesPerSlice = (uint)(((decimal)inputWavFile.Duration / slicesBox.Value) * inputWavFile.SampleRate);
            }
            System.Diagnostics.Debug.Print("Samples per slice: {0}", samplesPerSlice);
            System.Diagnostics.Debug.Print("nFrames: {0}", inputWavFile.NFrames);
            int n = (int)Math.Ceiling(inputWavFile.NFrames / inputWavFile.NChannels / (float)samplesPerSlice);
            byte[] iSlice = new byte[pictureBox1.ClientRectangle.Width];
            for(int i=0;i<n;i++) {
                string fileBaseName = String.Format("{0}_{1:D4}.wav", System.IO.Path.GetFileNameWithoutExtension(inputFileStream.Name), i+1);
                string fileName = System.IO.Path.Combine(outputDirBox.Text, fileBaseName);
                System.Diagnostics.Debug.Print("Debug: {0} {1}", fileName, i);
                object[] derp = {fileBaseName, iSlice};
                w.ReportProgress((int)(i / (float)(n-1) * 100), derp);
                using(FileStream ofs = new FileStream(fileName, FileMode.OpenOrCreate, FileAccess.Write)) {
                    WavFile owf = new WavFile();
                    owf.SetFormat(inputWavFile.NChannels, inputWavFile.SampleWidth, inputWavFile.SampleRate);
                    byte[] data = inputWavFile.ReadRaw(samplesPerSlice);
                    Array.Copy(data, iSlice, iSlice.Length);
                    owf.Write(ofs, data);
                }
                Thread.Sleep((n<100?40:15));

            }
        }
Exemple #2
0
 void ValidateInputFile()
 {
     if(inputFileStream != null) {
         inputFileStream.Close();
         inputWavFile = null;
     }
     FileStream fs = null;
     WavFile wf;
     try {
         fs = new FileStream(inputFileBox.Text, FileMode.Open, FileAccess.Read, FileShare.Read);
         wf = new WavFile(fs);
     } catch(Exception e) {
         infoLabel.ForeColor = Color.Maroon;
         infoLabel.Text = "Nope, not a valid file:\n" + e.Message;
         if(fs != null) fs.Close();
         return;
     }
     infoLabel.ForeColor = SystemColors.ControlText;
     inputFileStream = fs;
     inputWavFile = wf;
     infoLabel.Text = String.Format("Sample Rate: {0}\nSample Resolution: {1} bits\nChannels: {2}\nDuration: {3}", wf.SampleRate, wf.SampleWidth, wf.NChannels, TimeSpan.FromSeconds(wf.Duration));
     durationBox.Maximum = (decimal)wf.Duration;
     ValidateSettings();
 }