Exemplo n.º 1
0
 public void ResumeTrack()
 {
     if (PlaybackState == PlaybackState.Paused)
     {
         trackReader.Seek(trackReaderPosition, SeekOrigin.Begin);
         waveOut.Init(trackReader);
         waveOut.Play();
         trackReaderPosition = -1;
         SpectrumVisualizer?.Resume();
         PlaybackState = PlaybackState.Playing;
     }
 }
Exemplo n.º 2
0
        public override float[] ReadMonoFromFile(string pathToFile, int sampleRate, int secondsToRead, int startAtSecond)
        {
            using (var reader = new MediaFoundationReader(pathToFile))
            {
                int actualSampleRate = reader.WaveFormat.SampleRate;
                int bitsPerSample    = reader.WaveFormat.BitsPerSample;
                reader.Seek(actualSampleRate * bitsPerSample / 8 * startAtSecond, System.IO.SeekOrigin.Begin);
                using (var resampler = new MediaFoundationResampler(reader, WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, 1)))
                {
                    float[]                  buffer            = new float[sampleRate * 20]; // 20 seconds buffer
                    List <float[]>           chunks            = new List <float[]>();
                    int                      totalFloatsToRead = secondsToRead == 0 ? int.MaxValue : secondsToRead * sampleRate;
                    int                      totalFloatsRead   = 0;
                    Pcm32BitToSampleProvider pcmReader         = new Pcm32BitToSampleProvider(resampler);
                    while (totalFloatsRead < totalFloatsToRead)
                    {
                        // get re-sampled/mono data
                        int floatsRead = pcmReader.Read(buffer, 0, buffer.Length);
                        if (floatsRead == 0)
                        {
                            break;
                        }

                        totalFloatsRead += floatsRead;

                        float[] chunk;

                        if (totalFloatsRead > totalFloatsToRead)
                        {
                            chunk = new float[(totalFloatsToRead - (totalFloatsRead - floatsRead))];
                            Array.Copy(buffer, chunk, totalFloatsToRead - (totalFloatsRead - floatsRead));
                        }
                        else
                        {
                            chunk = new float[floatsRead]; // each float contains 4 bytes
                            Array.Copy(buffer, chunk, floatsRead);
                        }

                        chunks.Add(chunk);
                    }

                    if (totalFloatsRead < (secondsToRead * sampleRate))
                    {
                        return(null); /*not enough samples to return the requested data*/
                    }

                    float[] data = ConcatenateChunksOfSamples(chunks);

                    return(data);
                }
            }
        }
Exemplo n.º 3
0
        public override float[] ReadMonoFromFile(string pathToFile, int sampleRate, int secondsToRead, int startAtSecond)
        {
            using (var reader = new MediaFoundationReader(pathToFile))
            {
                int actualSampleRate = reader.WaveFormat.SampleRate;
                int bitsPerSample = reader.WaveFormat.BitsPerSample;
                reader.Seek(actualSampleRate * bitsPerSample / 8 * startAtSecond, System.IO.SeekOrigin.Begin);
                using (var resampler = new MediaFoundationResampler(reader, WaveFormat.CreateIeeeFloatWaveFormat(sampleRate, 1)))
                {
                    float[] buffer = new float[sampleRate * 20]; // 20 seconds buffer
                    List<float[]> chunks = new List<float[]>();
                    int totalFloatsToRead = secondsToRead == 0 ? int.MaxValue : secondsToRead * sampleRate;
                    int totalFloatsRead = 0;
                    Pcm32BitToSampleProvider pcmReader = new Pcm32BitToSampleProvider(resampler);
                    while (totalFloatsRead < totalFloatsToRead)
                    {
                        // get re-sampled/mono data
                        int floatsRead = pcmReader.Read(buffer, 0, buffer.Length);
                        if (floatsRead == 0)
                        {
                            break;
                        }

                        totalFloatsRead += floatsRead;

                        float[] chunk;

                        if (totalFloatsRead > totalFloatsToRead)
                        {
                            chunk = new float[(totalFloatsToRead - (totalFloatsRead - floatsRead))];
                            Array.Copy(buffer, chunk, totalFloatsToRead - (totalFloatsRead - floatsRead));
                        }
                        else
                        {
                            chunk = new float[floatsRead]; // each float contains 4 bytes
                            Array.Copy(buffer, chunk, floatsRead);
                        }

                        chunks.Add(chunk);
                    }

                    if (totalFloatsRead < (secondsToRead * sampleRate))
                    {
                        return null; /*not enough samples to return the requested data*/
                    }

                    float[] data = ConcatenateChunksOfSamples(chunks);

                    return data;
                }
            }
        }
Exemplo n.º 4
0
 //Seek through song by reading the PCM stream's bitrate and multiplying it by the trackbar value.
 //Start at the beginning. Make sure to set isPlaying to true.
 private void trackBar1_Scroll(object sender, EventArgs e)
 {
     mfr.Seek(mfr.WaveFormat.AverageBytesPerSecond * positionBar.Value, SeekOrigin.Begin);
     isPlaying = true;
 }
 public void SynchronizeReaderPositions()
 {
     trackReader.Seek(synchronizationReader.Position - TrackReaderPositionShift, System.IO.SeekOrigin.Begin);
 }