/// <summary>
        /// Read audio wavFile.
        /// </summary>
        /// <param name="wavFile">WAV File in each turn.</param>
        public void ReadAudio(string wavFile)
        {
            lock (this.BotReplyList)
            {
                this.BotReplyList.Clear();
                this.indexActivityWithAudio = 0;
            }

            if (this.appsettings.PushStreamEnabled)
            {
                int readBytes;

                byte[]         dataBuffer     = new byte[MaxSizeOfTtsAudioInBytes];
                WaveFileReader waveFileReader = new WaveFileReader(Path.Combine(this.appsettings.InputFolder, wavFile));

                // Reading header bytes
                int headerBytes = waveFileReader.Read(dataBuffer, 0, WavHeaderSizeInBytes);

                while ((readBytes = waveFileReader.Read(dataBuffer, 0, BytesToRead)) > 0)
                {
                    this.pushAudioInputStream.Write(dataBuffer, readBytes);
                }

                // When done, we forcibly write one second (32000 bytes) of silence
                // to the stream, forcing the speech recognition service to segment.
                Array.Clear(dataBuffer, 0, 32000);
                this.pushAudioInputStream.Write(dataBuffer, 32000);

                waveFileReader.Dispose();
            }
            else
            {
                GlobalPullStream.FilePullStreamCallback.ReadFile(Path.Combine(this.appsettings.InputFolder, wavFile));
            }
        }
Пример #2
0
    private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos)
    {
        // set blockalign -> 8 pour 24 bit
        Int32 blockalign = reader.WaveFormat.BlockAlign;
        Int32 bytealign  = 0;

        // 4 = 1024 pour 16bit, sinon 6 pour 24bit, 384 car c'est divisible par 6 sans faire planter le pc
        if (blockalign == 4)
        {
            bytealign = 1024;
        }
        else
        {
            bytealign = 384;
        }

        reader.Position = startPos;
        byte[] buffer = new byte[bytealign];
        while (reader.Position < endPos)
        {
            int bytesRequired = (int)(endPos - reader.Position);
            if (bytesRequired > 0)
            {
                int bytesToRead = Math.Min(bytesRequired, buffer.Length);
                int bytesRead   = reader.Read(buffer, 0, bytesToRead);
                if (bytesRead > 0)
                {
                    // WriteData obsolète
                    writer.Write(buffer, 0, bytesRead);
                }
            }
        }
    }
        public CachedAudioEffect(AudioEffectTypes audioEffect)
        {
            AudioEffectType = audioEffect;

            var file = GetFile();

            AudioEffectBytes = new byte[0];

            if (file != null)
            {
                using (var reader = new WaveFileReader(file))
                {
                    //    Assert.AreEqual(16, reader.WaveFormat.BitsPerSample, "Only works with 16 bit audio");
                    if (reader.WaveFormat.BitsPerSample == 16 && reader.WaveFormat.Channels == 1)
                    {
                        AudioEffectBytes = new byte[reader.Length];
                        var read = reader.Read(AudioEffectBytes, 0, AudioEffectBytes.Length);
                        Logger.Info($"Read Effect {audioEffect} from {file} Successfully");
                    }
                    else
                    {
                        Logger.Info($"Unable to read Effect {audioEffect} from {file} Successfully - not 16 bits!");
                    }
                }
            }
            else
            {
                Logger.Info($"Unable to find file for effect {audioEffect} in AudioEffects\\{FileNameLookup[(int) audioEffect]} ");
            }
        }
Пример #4
0
        private void RenderFile()
        {
            SampleAggregator.RaiseRestart();
            using (WaveFileReader reader = new WaveFileReader(this.voiceRecorderState.ActiveFile))
            {
                this.samplesPerSecond = reader.WaveFormat.SampleRate;
                SampleAggregator.NotificationCount = reader.WaveFormat.SampleRate / 10;

                byte[]     buffer     = new byte[1024];
                WaveBuffer waveBuffer = new WaveBuffer(buffer);
                waveBuffer.ByteBufferCount = buffer.Length;
                int bytesRead;
                do
                {
                    bytesRead = reader.Read(waveBuffer, 0, buffer.Length);
                    int samples = bytesRead / 2;
                    for (int sample = 0; sample < samples; sample++)
                    {
                        if (bytesRead > 0)
                        {
                            sampleAggregator.Add(waveBuffer.ShortBuffer[sample] / 32768f);
                        }
                    }
                } while (bytesRead > 0);
                int totalSamples = (int)reader.Length / 2;
                TotalWaveFormSamples = totalSamples / sampleAggregator.NotificationCount;
                SelectAll();
            }
            audioPlayer.LoadFile(this.voiceRecorderState.ActiveFile);
        }
Пример #5
0
 private static void TrimWavFile(WaveFileReader reader, WaveFileWriter writer, int startPos, int endPos)
 {
     reader.Position = startPos;
     byte[] buffer = new byte[1024];
     while (reader.Position < endPos)
     {
         int bytesRequired = (int)(endPos - reader.Position);
         if (bytesRequired > 0)
         {
             int bytesToRead = Math.Min(bytesRequired, buffer.Length);
             int bytesRead   = reader.Read(buffer, 0, bytesToRead);
             if (bytesRead > 0)
             {
                 writer.Write(buffer, 0, bytesRead);
             }
         }
     }
     if (reader != null)
     {
         reader.Dispose();
     }
     if (writer != null)
     {
         writer.Dispose();
     }
 }
Пример #6
0
        public ActionResult Reverse(string name)
        {
            var a = name.Split('.');

            string newName = a[a.Length - 2];

            if (a[a.Length - 1] == "mp3")
            {
                using (Mp3FileReader reader = new Mp3FileReader(HttpContext.Server.MapPath("~/Content/" + name)))
                {
                    WaveFileWriter.CreateWaveFile(HttpContext.Server.MapPath("~/Content/" + newName + ".wav"), reader);
                }
            }

            using (WaveFileReader reader = new WaveFileReader(HttpContext.Server.MapPath("~/Content/" + newName + ".wav")))
            {
                int blockAlign = reader.WaveFormat.BlockAlign;
                using (WaveFileWriter writer = new WaveFileWriter(HttpContext.Server.MapPath("~/Content/" + newName + "_rev.wav"), reader.WaveFormat))
                {
                    byte[] buffer  = new byte[blockAlign];
                    long   samples = reader.Length / blockAlign;
                    for (long sample = samples - 1; sample >= 0; sample--)
                    {
                        reader.Position = sample * blockAlign;
                        reader.Read(buffer, 0, blockAlign);
                        writer.WriteData(buffer, 0, blockAlign);
                    }
                }
            }

            return(Json(new { name1 = newName + "_rev.wav" }, JsonRequestBehavior.AllowGet));
        }
Пример #7
0
        private void TestThread()
        {
            int BufferMilliseconds = 20;
            var format             = new WaveFormat(8000, 16, WaveIn.GetCapabilities(0).Channels);
            int chunksize          = BufferMilliseconds * format.AverageBytesPerSecond / 1000;

            if (chunksize % format.BlockAlign != 0)
            {
                chunksize -= chunksize % format.BlockAlign;
            }

            using (WaveFileReader reader = new WaveFileReader("D:\\dev\\RicoChat\\RicoChat\\sfx\\trumpet.wav"))
            {
                byte[] bytesBuffer = new byte[reader.Length];
                int    read        = reader.Read(bytesBuffer, 0, bytesBuffer.Length);
                int    j           = 0;

                for (int i = 0; i < bytesBuffer.Length - chunksize; i += chunksize)
                {
                    byte[] b2 = new byte[chunksize];
                    Buffer.BlockCopy(bytesBuffer, i, b2, 0, chunksize);

                    hand.SendData(b2, chunksize);

                    Thread.Sleep(BufferMilliseconds);

                    //j++;
                    //if (j > 10)
                    //    break;
                }
            }
        }
        private static void TrimWavFile(WaveFileReader reader,
                                        WaveFileWriter writer,
                                        int startPos,
                                        int endPos)
        {
            reader.Position = startPos;
            byte[] writeBuffer = new byte[1024];
            long   position    = reader.Position;

            while (position < endPos)
            {
                int bytesRequired = (int)(endPos - position);
                if (bytesRequired > 0)
                {
                    int bytesToRead = Math.Min(bytesRequired, writeBuffer.Length);
                    int bytesRead   = reader.Read(writeBuffer, 0, bytesToRead);
                    if (bytesRead > 0)
                    {
                        writer.Write(writeBuffer, 0, bytesRead);
                        position = reader.Position;
                    }
                    else
                    {
                        // We have overrun the original audio. Fill remaining duration with silence.
                        writer.Write(new byte[bytesToRead], 0, bytesToRead);
                        position += bytesToRead;
                    }
                }
            }
        }
        public void CanLoadAndReadVariousProblemWavFiles()
        {
            string testDataFolder = @"C:\Users\Mark\Downloads\NAudio";

            if (!Directory.Exists(testDataFolder))
            {
                Assert.Ignore("{0} not found", testDataFolder);
            }
            foreach (string file in Directory.GetFiles(testDataFolder, "*.wav"))
            {
                string wavFile = Path.Combine(testDataFolder, file);
                Debug.WriteLine(String.Format("Opening {0}", wavFile));
                using (var reader = new WaveFileReader(wavFile))
                {
                    byte[] buffer = new byte[reader.WaveFormat.AverageBytesPerSecond];
                    int    bytesRead;
                    int    total = 0;
                    do
                    {
                        bytesRead = reader.Read(buffer, 0, buffer.Length);
                        total    += bytesRead;
                    } while (bytesRead > 0);
                    Debug.WriteLine(String.Format("Read {0} bytes", total));
                }
            }
        }
Пример #10
0
        private void ExtractSongToFile(byte[] reusedBuffer, WaveFileReader groupReader, WaveFileWriter songWriter, SongInfo song)
        {
            DateTime songEndTime         = song.EndTime ?? Group.EndTime;
            TimeSpan songDuration        = songEndTime - song.StartTime;
            int      bytesPerMillisecond = Group.WaveFormat.AverageBytesPerSecond / 1000;
            long     songLength          = (long)songDuration.TotalMilliseconds * bytesPerMillisecond;
            long     songStartPos        = groupReader.Position;
            long     songEndPos          = songStartPos + songLength;

            //Stream variables use longs not ints, so use longs where possible/relevant
            //However, Stream.Read() takes ints, so we have to cast back there (with a checked cast)

            //_logger.Log($"songEndTime: {songEndTime}, songDuration: {songDuration}, bytesPerMillisecond: {bytesPerMillisecond}, songLength: {songLength}, songStartPos: {songStartPos}, songEndPos {songEndPos}.");

            while (true)
            {
                long songBytesRemaining   = songEndPos - groupReader.Position;
                long readerBytesRemaining = groupReader.Length - groupReader.Position;

                //_logger.Log($"songBytesRemaining: {songBytesRemaining}, readerBytesRemaining: {readerBytesRemaining}");

                if (songBytesRemaining <= 0 || readerBytesRemaining <= 0)
                {
                    break;
                }

                int numRead = groupReader.Read(
                    reusedBuffer,
                    offset: 0,
                    count: checked ((int)Math.Min(Math.Min(songBytesRemaining, readerBytesRemaining), reusedBuffer.Length))
                    );
                songWriter.Write(reusedBuffer, offset: 0, count: numRead);
            }
        }
Пример #11
0
        //public static void WavToMp3File(ref MemoryStream ms, string savetofilename)
        public static void WavToMp3File(string inputWavFile)
        {
            var outputFile = Path.Combine(
                Path.GetDirectoryName(inputWavFile),
                Path.GetFileNameWithoutExtension(inputWavFile) + ".mp3");

            using (var rdr = new WaveFileReader(inputWavFile))
                using (var wtr = new LameMP3FileWriter(outputFile, rdr.WaveFormat, LAMEPreset.STANDARD))
                {
                    //rdr.CopyTo(wtr);
                    int size = 128;

                    while (rdr.Position < rdr.Length)
                    {
                        if (rdr.Length - rdr.Position < size)
                        {
                            size = (int)rdr.Length - (int)rdr.Position;
                        }

                        byte[] buffer = new byte[size];
                        var    r      = rdr.Read(buffer, 0, size);
                        wtr.Write(buffer, 0, size);
                    }

                    wtr.Flush();
                }
        }
Пример #12
0
        static public Sound Read(Stream source)
        {
            BinaryReaderEx reader = new BinaryReaderEx(source);
            Sound          result = new Sound();

            int id = reader.ReadInt32();

            if (id == 0x00394453)
            {
                int headerLength = reader.ReadInt32();
                int sampleLength = reader.ReadInt32();

                headerLength -= 12;
                if (headerLength > 0)
                {
                    reader.ReadBytes(headerLength);
                }

                byte[] wavData = reader.ReadBytes(sampleLength);
                using (MemoryStream wavDataMem = new MemoryStream(wavData))
                {
                    using (WaveStream wavStream = new WaveFileReader(wavDataMem))
                    {
                        byte[] rawWaveData = new byte[wavStream.Length];
                        wavStream.Read(rawWaveData, 0, (int)wavStream.Length);
                        result.SetSound(rawWaveData, wavStream.WaveFormat);
                    }
                }
            }

            return(result);
        }
Пример #13
0
        private void button1_Click(object sender, EventArgs e)
        {
            OpenFileDialog dlg = new OpenFileDialog();

            dlg.Multiselect     = false;
            dlg.Title           = "SELECCIONE SOPLO PARA OBTENER EL DIAGNOSTICO.";
            dlg.CheckFileExists = true;
            dlg.Filter          = "WAV files (*.wav)|*.wav";
            dlg.DefaultExt      = ".wav";
            if (dlg.ShowDialog() == DialogResult.OK)
            {
                label4.Text     = "";
                label3.Text     = dlg.FileName;
                arraydeentradas = new float[1, entradas];
                WaveFileReader reader = new WaveFileReader(dlg.FileName);
                Assert.AreEqual(16, reader.WaveFormat.BitsPerSample, "Only works with 16 bit audio");
                byte[]  buffer       = new byte[reader.Length];
                int     read         = reader.Read(buffer, 0, buffer.Length);
                short[] sampleBuffer = new short[read / 2];
                Buffer.BlockCopy(buffer, 0, sampleBuffer, 0, read);
                for (int i = 0; i < 100; i++)
                {
                    arraydeentradas[0, i] = float.Parse(sampleBuffer[i].ToString());
                }
                NormalizarEntradasDeLaRed();
                button2.Enabled = true;
            }
        }
Пример #14
0
        public static IAudio LoadWave(string filePath)
        {
            if (_disposables.ContainsKey(filePath))
            {
                return((IAudio)_disposables[filePath]);
            }

            IntPtr        device = Alc.OpenDevice(null);
            ContextHandle handle = Alc.CreateContext(device, (int[])null);

            Alc.MakeContextCurrent(handle);

            int buffer = AL.GenBuffer();
            int source = AL.GenSource();

            WaveFileReader reader = new WaveFileReader(filePath);

            byte[] data = new byte[reader.Length];
            reader.Read(data, 0, data.Length);

            AL.BufferData(buffer, GetSoundFormat(reader.WaveFormat.Channels, reader.WaveFormat.BitsPerSample), data,
                          data.Length, reader.WaveFormat.SampleRate);
            AL.Source(source, ALSourcei.Buffer, buffer);

            IAudio audio = new WaveAudio(filePath, source, buffer, handle);

            _disposables.TryAdd(filePath, audio);
            return(audio);
        }
        public WavCharactersProvider(IConfiguration configuration)
        {
            var speechConfig = configuration.GetSection("SpeechConfig").Get <SpeechConfig>();

            charactersWavBytes = new Dictionary <char, byte[]>();
            var characters = new[] {
                'A', 'B', 'C', 'D', 'E', 'F', 'G', 'H', 'I', 'J', 'K', 'L', 'M',
                'N', 'O', 'P', 'Q', 'R', 'S', 'T', 'U', 'V', 'W', 'X', 'Y', 'Z',
                '1', '2', '3', '4', '5', '6', '7', '8', '9', '0'
            };

            byte[] readBuffer = new byte[16 * 1024];
            foreach (var character in characters)
            {
                //FileNotFoundException can be thrown
                using var waveFileReader = new WaveFileReader(Path.Combine(speechConfig.CharactersPath, $"{character}.wav"));
                using var ms             = new MemoryStream();
                using var waveFileWriter = new WaveFileWriter(ms, waveFileReader.WaveFormat);

                int read;
                while ((read = waveFileReader.Read(readBuffer, 0, readBuffer.Length)) > 0)
                {
                    waveFileWriter.Write(readBuffer, 0, read);
                }
                waveFileWriter.Flush();
                charactersWavBytes[character] = ms.ToArray();
            }
        }
        private void ConvertWavTo10SecondWavs(FileInfo inputFile)
        {
            var samplesOutWav = @"..\..\..\samples\wav10seconds\";

            using (var inAudio = new WaveFileReader(inputFile.FullName))
            {
                //Calculate required byte[] buffer.
                var buffer = new byte[10 * inAudio.WaveFormat.AverageBytesPerSecond];//Assume average will be constant for WAV format.
                int index  = 0;
                do
                {
                    var outFile = string.Format("{0}{1}.{2:0000}.wav",
                                                samplesOutWav, inputFile.Name.Replace(inputFile.Extension, string.Empty), index);
                    int bytesRead = 0;
                    do
                    {
                        bytesRead = inAudio.Read(buffer, 0, buffer.Length - bytesRead);
                    } while (bytesRead > 0 && bytesRead < buffer.Length);
                    //Write new file
                    using (var waveWriter = new WaveFileWriter(outFile, inAudio.WaveFormat))
                    {
                        waveWriter.Write(buffer, 0, buffer.Length);
                    }
                    index++;
                } while (inAudio.Position < inAudio.Length);
            }
        }
        public List <List <double> > MF(string location)
        {
            frame = (int)(waveFormat.SampleRate * ((float)BufferMilliseconds / 1000));
            Ini();
            List <List <double> > mfcc       = new List <List <double> >();
            WaveFileReader        waveReader = new WaveFileReader(location);

            byte[] buffer = new byte[frame * 2];

            while ((waveReader.Length - waveReader.Position) > (frame * 2))
            {
                waveReader.Read(buffer, 0, buffer.Length);

                Int16[] aux = Int16Convertor(buffer);
                double[,] dsp = Dsp(aux);
                double medie = MedieFrame(dsp);


                if (medie > 120)
                {
                    mfcc.Add(MFcc(buffer));
                }
            }

            waveReader.Close();
            return(mfcc);
        }
Пример #18
0
        public void ReaderShouldReadBackSameDataWrittenWithWrite()
        {
            var ms           = new MemoryStream();
            var testSequence = new byte[] { 0x1, 0x2, 0xFF, 0xFE };

            using (var writer = new WaveFileWriter(new IgnoreDisposeStream(ms), new WaveFormat(16000, 24, 1)))
            {
                writer.Write(testSequence, 0, testSequence.Length);
            }
            // check the Reader can read it
            ms.Position = 0;
            using (var reader = new WaveFileReader(ms))
            {
                Assert.AreEqual(16000, reader.WaveFormat.SampleRate, "Sample Rate");
                Assert.AreEqual(24, reader.WaveFormat.BitsPerSample, "Bits Per Sample");
                Assert.AreEqual(1, reader.WaveFormat.Channels, "Channels");
                Assert.AreEqual(testSequence.Length, reader.Length, "File Length");
                var buffer = new byte[600]; // 24 bit audio, block align is 3
                int read   = reader.Read(buffer, 0, buffer.Length);
                Assert.AreEqual(testSequence.Length, read, "Data Length");
                for (int n = 0; n < read; n++)
                {
                    Assert.AreEqual(testSequence[n], buffer[n], "Byte " + n);
                }
            }
        }
Пример #19
0
        public void Load(string path)
        {
            FourierSounds = new List <Complex[]>();
            using (var reader = new WaveFileReader(path))
            {
                SampleRate = reader.WaveFormat.SampleRate;
                Ts         = 1.0 / SampleRate;
                FftLength  = 4096;
                //FftLength = 2048;
                //FftLength = 1024;
                Time = reader.TotalTime.TotalSeconds;
                var channels = reader.WaveFormat.Channels;
                var m        = (int)Math.Log(FftLength, 2.0);

                var readBuffer = new byte[reader.Length];
                reader.Read(readBuffer, 0, readBuffer.Length);
                var data = ConvertByteToFloat(readBuffer, readBuffer.Length);

                for (var j = 0; j < data.Length / FftLength; j++)
                {
                    var sampleBuffer = data.Skip(j * FftLength).Take(FftLength).ToList();
                    var fftBuffer    = new Complex[FftLength];
                    var fftPos       = 0;
                    for (var i = 0; i < FftLength; i++)
                    {
                        fftBuffer[fftPos].X = (float)(sampleBuffer[i] * FastFourierTransform.HammingWindow(i, FftLength));
                        fftBuffer[fftPos].Y = 0;
                        fftPos++;
                    }
                    FastFourierTransform.FFT(true, m, fftBuffer);

                    FourierSounds.Add(fftBuffer);
                }
            }
        }
Пример #20
0
        public void FlushUpdatesHeaderEvenIfDisposeNotCalled()
        {
            var ms            = new MemoryStream();
            var testSequence  = new byte[] { 0x1, 0x2, 0xFF, 0xFE };
            var testSequence2 = new byte[] { 0x3, 0x4, 0x5 };
            var writer        = new WaveFileWriter(new IgnoreDisposeStream(ms), new WaveFormat(16000, 24, 1));

            writer.Write(testSequence, 0, testSequence.Length);
            writer.Flush();
            // BUT NOT DISPOSED
            // another write that was not flushed
            writer.Write(testSequence2, 0, testSequence2.Length);

            // check the Reader can read it
            ms.Position = 0;
            using (var reader = new WaveFileReader(ms))
            {
                Assert.AreEqual(16000, reader.WaveFormat.SampleRate, "Sample Rate");
                Assert.AreEqual(24, reader.WaveFormat.BitsPerSample, "Bits Per Sample");
                Assert.AreEqual(1, reader.WaveFormat.Channels, "Channels");
                Assert.AreEqual(testSequence.Length, reader.Length, "File Length");
                var buffer = new byte[600]; // 24 bit audio, block align is 3
                int read   = reader.Read(buffer, 0, buffer.Length);
                Assert.AreEqual(testSequence.Length, read, "Data Length");

                for (int n = 0; n < read; n++)
                {
                    Assert.AreEqual(testSequence[n], buffer[n], "Byte " + n);
                }
            }
            writer.Dispose(); // to stop the finalizer from moaning
        }
Пример #21
0
        static void Main(string[] args)
        {
            const string fileName = "Test.wav";

            Console.WriteLine("Hello silence detection!");
            // Check it is a valid raw WAVE file
            // We will use NAudio for this and just read the header
            var            fileTest = new FileStream(fileName, FileMode.Open, FileAccess.Read);
            WaveFileReader reader   = new WaveFileReader(fileTest);

            if (reader.WaveFormat.Encoding != WaveFormatEncoding.Pcm)
            {
                throw new Exception($"This sample supports only PCM raw WAVE format");
            }

            Console.WriteLine($"SampleRate: {reader.WaveFormat.SampleRate}, Channels: {reader.WaveFormat.Channels}, BitsPerSample: {reader.WaveFormat.BitsPerSample}");
            Console.WriteLine($"Buffer length: {reader.Length}");

            // Create a buffer to read everything
            Span <byte> toFindSilence = new byte[reader.Length];

            reader.Read(toFindSilence);
            // Now detect silences
            var slicers = toFindSilence.GetAllSilences(reader.WaveFormat.SampleRate, reader.WaveFormat.Channels, reader.WaveFormat.BitsPerSample / 8, new TimeSpan(0, 0, 0, 0, 500), -40);

            foreach (var slice in slicers)
            {
                Console.WriteLine($"Start: {slice.Start.TotalMilliseconds} ms, duration: {slice.Duration.TotalMilliseconds} ms, index start: {slice.IndexStart}, index end: {slice.IndexEnd}");
            }
        }
Пример #22
0
 private void CopyWaveFile(string destinationFile, string sourceFile)
 {
     using (var fs = File.Open(sourceFile, FileMode.Open, FileAccess.Read, FileShare.ReadWrite))
     {
         using (var reader = new WaveFileReader(fs))
         {
             using (var writer = new WaveFileWriter(destinationFile, reader.WaveFormat))
             {
                 reader.Position = 0;
                 var endPos = (int)reader.Length;
                 var buffer = new byte[1024];
                 while (reader.Position < endPos)
                 {
                     var bytesRequired = (int)(endPos - reader.Position);
                     if (bytesRequired <= 0)
                     {
                         continue;
                     }
                     var bytesToRead = Math.Min(bytesRequired, buffer.Length);
                     var bytesRead   = reader.Read(buffer, 0, bytesToRead);
                     if (bytesRead > 0)
                     {
                         writer.Write(buffer, 0, bytesRead);
                     }
                 }
             }
         }
     }
 }
Пример #23
0
        public static List <float[]> Separate(WaveFileReader reader)
        {
            var output  = new List <float[]>();
            var buffer  = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels];
            var writers = new WaveFileWriter[reader.WaveFormat.Channels];

            for (int n = 0; n < writers.Length; n++)
            {
                var format = new WaveFormat(reader.WaveFormat.SampleRate, 16, 1);
                writers[n] = new WaveFileWriter(String.Format("channel{0}.wav", n + 1), format);
            }
            int bytesRead;

            while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
            {
                int offset = 0;
                while (offset < bytesRead)
                {
                    for (int n = 0; n < writers.Length; n++)
                    {
                        // write one sample
                        writers[n].Write(buffer, offset, 2);
                        offset += 2;
                    }
                }
            }
            for (int n = 0; n < writers.Length; n++)
            {
                writers[n].Dispose();
            }
            reader.Dispose();
            return(output);
        }
Пример #24
0
        void Join()
        {
            src1 = new WaveFileReader(src1_n);
            src2 = new WaveFileReader(src2_n);


            // Test whether two wave files have the same format
            if (!src1.WaveFormat.Equals(src2.WaveFormat))
            {
                Console.Out.WriteLine("Two waves are not of the same format.");
                return;
            }


            // Read in the wave file and write out to the destination
            using (dest = new WaveFileWriter(dest_n, src1.WaveFormat))
            {
                byte[] buffer = new byte[2048];
                int    n      = 0;
                do
                {
                    n = src1.Read(buffer, 0, 2048);
                    n = Math.Min(2048, n);
                    dest.Write(buffer, 0, n);
                } while (n > 0);


                do
                {
                    n = src2.Read(buffer, 0, 2048);
                    n = Math.Min(2048, n);
                    dest.Write(buffer, 0, n);
                } while (n > 0);
            }
        }
Пример #25
0
        //Метод для извлечения массива байтов из указанного файла WAV
        public static byte[] Load24bitWaveFormFromFile(String filePath)
        {
            WaveFileReader waveFileReader = null; //Из библиотеки NAudio

            try
            {
                waveFileReader = new WaveFileReader(filePath);             //Пробуем открыть файл
                if (waveFileReader.WaveFormat.BitsPerSample == 24)         //Проверяем разрядность
                {
                    byte[] byteBuffer = new byte[waveFileReader.Length];   //Создаём массив
                    waveFileReader.Read(byteBuffer, 0, byteBuffer.Length); //Считываем туда файл
                    return(byteBuffer);                                    //Передаём готовый массив наружу
                }
                else
                {
                    throw new Exception("Параметры данного звукового файла не подходят");
                }
            }
            catch (IOException)
            {
                throw new Exception("Программа не может открыть данный файл");
            }
            finally
            {
                if (waveFileReader != null)
                {
                    waveFileReader.Close();
                }
            }
        }
Пример #26
0
        /// <summary>
        /// cut the trash time before tts result
        /// </summary>
        /// <param name="reader">source</param>
        /// <param name="writer">destination</param>
        /// <param name="cutFromStart">start time</param>
        /// <param name="cutFromEnd">end time</param>
        public void TrimWave(WaveFileReader reader, WaveFileWriter writer, TimeSpan cutFromStart, TimeSpan cutFromEnd)
        {
            int bytesPerMillisecond = reader.WaveFormat.AverageBytesPerSecond / 1000;

            int startPos = (int)cutFromStart.TotalMilliseconds * bytesPerMillisecond;

            startPos = startPos - startPos % reader.WaveFormat.BlockAlign;

            int endBytes = (int)cutFromEnd.TotalMilliseconds * bytesPerMillisecond;

            endBytes = endBytes - endBytes % reader.WaveFormat.BlockAlign;
            int endPos = (int)reader.Length - endBytes;

            reader.Position = startPos;
            byte[] buffer = new byte[1024];
            while (reader.Position < endPos)
            {
                int bytesRequired = (int)(endPos - reader.Position);
                if (bytesRequired > 0)
                {
                    int bytesToRead = Math.Min(bytesRequired, buffer.Length);
                    int bytesRead   = reader.Read(buffer, 0, bytesToRead);
                    if (bytesRead > 0)
                    {
                        writer.Write(buffer, 0, bytesRead);
                    }
                }
            }
        }
Пример #27
0
        protected void SplitTwoChannel(string FileName)
        {
            int bytesRead;
            var reader  = new WaveFileReader(FileName);
            var buffer  = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels];
            var writers = new WaveFileWriter[reader.WaveFormat.Channels];

            for (int n = 0; n < writers.Length; n++)
            {
                var format = new WaveFormat(reader.WaveFormat.SampleRate, 16, 1);
                writers[n] = new WaveFileWriter(GetFullPath(String.Format("channel{0}.wav", n + 1)), format);
            }

            while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
            {
                int offset = 0;
                while (offset < bytesRead)
                {
                    for (int n = 0; n < writers.Length; n++)
                    {
                        writers[n].Write(buffer, offset, 2);
                        offset += 2;
                    }
                }
            }

            for (int n = 0; n < writers.Length; n++)
            {
                writers[n].Dispose();
            }
            reader.Dispose();
        }
Пример #28
0
        private int ConcatWavFiles(List <string> waveList, WaveFormat waveFormat, string outputPath)
        {
            int bytes = 0;

            if (waveFormat != null)
            {
                byte[] buffer = new byte[1024];
                int    read;
                using (WaveFileWriter waveFileWriter = new WaveFileWriter(outputPath, waveFormat))
                {
                    foreach (string sourceFile in waveList)
                    {
                        using (WaveFileReader waveFileReader = new WaveFileReader(sourceFile))
                        {
                            while ((read = waveFileReader.Read(buffer, 0, buffer.Length)) > 0)
                            {
                                waveFileWriter.Write(buffer, 0, read);
                                bytes += read;
                            }
                        }
                    }
                }
            }

            return(bytes);
        }
Пример #29
0
        /// <summary>
        /// 來源:  https://stackoverflow.com/questions/12075062/saving-each-wav-channel-as-a-mono-channel-wav-file-using-naudio/12149659#12149659
        /// </summary>
        public static void SplitEachChannelToFiles()
        {
            var reader  = new WaveFileReader(@"E:\Dropbox\WorkGrandsys\W\Workarea\20180511音檔 - 複製\1_8690002555DA7B59370000037\0_00001_0000364_0000837.wav");
            var buffer  = new byte[2 * reader.WaveFormat.SampleRate * reader.WaveFormat.Channels];
            var writers = new WaveFileWriter[reader.WaveFormat.Channels];

            for (int n = 0; n < writers.Length; n++)
            {
                var format = new WaveFormat(reader.WaveFormat.SampleRate, 16, 1);
                writers[n] = new WaveFileWriter(String.Format(@"E:\Dropbox\WorkGrandsys\W\Workarea\20180511音檔 - 複製\output\channel{0}.wav", n + 1), format);
            }
            int bytesRead;

            while ((bytesRead = reader.Read(buffer, 0, buffer.Length)) > 0)
            {
                int offset = 0;
                while (offset < bytesRead)
                {
                    for (int n = 0; n < writers.Length; n++)
                    {
                        // write one sample
                        writers[n].Write(buffer, offset, 2);
                        offset += 2;
                    }
                }
            }

            for (int n = 0; n < writers.Length; n++)
            {
                writers[n].Dispose();
            }
            reader.Dispose();
        }
Пример #30
0
        public void OpenWav(string filename)
        {
            short[] sampleBuffer;
            using (WaveFileReader reader = new WaveFileReader(filename))
            {
                fileName     = Path.GetFileName(filename);
                sampleRate   = reader.WaveFormat.SampleRate;
                framesNumber = (int)reader.SampleCount * reader.WaveFormat.Channels;
                totalTime    = reader.TotalTime;
                byte[] buffer = new byte[reader.Length];
                int    read   = reader.Read(buffer, 0, buffer.Length);
                sampleBuffer = new short[read / 2];
                Buffer.BlockCopy(buffer, 0, sampleBuffer, 0, read);
            }

            int[]   result           = new int[sampleBuffer.Length];
            float[] resultNormalized = new float[sampleBuffer.Length];

            for (int i = 0; i < result.Length; i++)
            {
                result[i]           = sampleBuffer[i];
                resultNormalized[i] = sampleBuffer[i] / (float)(short.MaxValue + 1);
            }

            data           = result;
            dataNormalized = resultNormalized;
        }