Exemple #1
0
        public static void Concatenate(string outputFile, IEnumerable <string> sourceFiles)
        {
            byte[]         buffer         = new byte[1024];
            WaveFileWriter waveFileWriter = null;

            try
            {
                foreach (string sourceFile in sourceFiles)
                {
                    using (var reader = new MediaFoundationReader(sourceFile))
                    {
                        using (var resampledReader = new ResamplerDmoStream(reader, new WaveFormat(
                                                                                reader.WaveFormat.SampleRate,
                                                                                reader.WaveFormat.BitsPerSample,
                                                                                reader.WaveFormat.Channels)))
                        {
                            if (waveFileWriter == null)
                            {
                                waveFileWriter = new WaveFileWriter(outputFile, reader.WaveFormat);
                            }
                            else
                            {
                                if (!reader.WaveFormat.Equals(waveFileWriter.WaveFormat))
                                {
                                    throw new InvalidOperationException(
                                              "Can't concatenate WAV Files that don't share the same format");
                                }
                            }

                            int read;
                            while ((read = resampledReader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                waveFileWriter.WriteData(buffer, 0, read);
                            }
                        }
                    }
                }
            }
            finally
            {
                if (waveFileWriter != null)
                {
                    waveFileWriter.Dispose();
                }
            }
        }
        public void CanReadABlockFromResamplerStream()
        {
            //using (WaveFileReader reader = new WaveFileReader("C:\\Users\\Mark\\Recording\\REAPER\\ideas-2008-05-17.wav"))
            WaveFormat inputFormat = new WaveFormat(44100, 16, 1);

            using (WaveStream reader = new NullWaveStream(inputFormat, inputFormat.AverageBytesPerSecond * 20))
            {
                using (ResamplerDmoStream resampler = new ResamplerDmoStream(reader, WaveFormat.CreateIeeeFloatWaveFormat(48000, 2)))
                {
                    // try to read 10 ms;
                    int    bytesToRead = resampler.WaveFormat.AverageBytesPerSecond / 100;
                    byte[] buffer      = new byte[bytesToRead];
                    int    count       = resampler.Read(buffer, 0, bytesToRead);
                    Assert.That(count > 0, "Bytes Read");
                }
            }
        }
Exemple #3
0
        private byte[] ResampleBytesDMO(byte[] inputByteArray, int length)
        {
            byte[] outBuffer = new byte[length * bufferMultiplier];
            buf.AddSamples(inputByteArray, 0, length);

            int read = dmoResampler.Read(outBuffer, 0, outBuffer.Length);

            if (read == 0)
            {
                return(new byte[0]);
            }
            else
            {
                byte[] finalBuf = new byte[read];
                Buffer.BlockCopy(outBuffer, 0, finalBuf, 0, read);

                return(finalBuf);
            }
        }
 private void ResampleAWholeStream(WaveFormat inputFormat, WaveFormat outputFormat)
 {
     using (WaveStream reader = new NullWaveStream(inputFormat, inputFormat.AverageBytesPerSecond * 20))
     {
         using (ResamplerDmoStream resampler = new ResamplerDmoStream(reader, outputFormat))
         {
             // try to read 10 ms;
             int    bytesToRead = resampler.WaveFormat.AverageBytesPerSecond / 100;
             byte[] buffer      = new byte[bytesToRead];
             int    count;
             int    total = 0;
             do
             {
                 count  = resampler.Read(buffer, 0, bytesToRead);
                 total += count;
                 //Assert.AreEqual(count, bytesToRead, "Bytes Read");
             } while (count > 0);
             //Debug.WriteLine(String.Format("Converted input length {0} to {1}", reader.Length, total));
         }
     }
 }