Преобразование .wav файла NAudio C#

Необходимо выполнить преобразование .wav-файла по формуле

0.5 x(n) + 0.25x(n-1) +0.25x(n-2) = y(n)

Мой код:

// Считываем данные исходного wav файла
        using (var myReader = new NAudio.Wave.WaveFileReader(waveFilePath))
        {
            // Создание выходного файла.
            // (DF) - от Digital Filtration
            string newFilePath = waveFilePath.Replace(".wav", "(DF).wav");
            using (FileStream newWavFile = File.Create(newFilePath))
            {
                using (NAudio.Wave.WaveFileWriter writer = new NAudio.Wave.WaveFileWriter(newWavFile, myReader.WaveFormat))
                {
                    // Считываем и выполняем преобразование
                    int bytesRead = 0;
                    var readSample = new byte[myReader.WaveFormat.SampleRate];
                    var tmpSample = new byte[myReader.WaveFormat.SampleRate];
                    do
                    {
                        // Считываем сэмпл
                        bytesRead = myReader.Read(readSample, 0, readSample.Length);
                        
                        // Преобразовываем по формуле
                        for (int n = 0; n < bytesRead; n++)
                        {
                            tmpSample[n] = (byte)(readSample[n] * 0.5);

                            // Формула
                            if (n >= 2)
                                tmpSample[n] = (byte)((readSample[n] * 0.5) + (readSample[n - 1] * 0.25) + (readSample[n - 2] * 0.25));
                            else if (n == 1)
                                tmpSample[n] = (byte)((readSample[n] * 0.5) + (readSample[n - 1] * 0.25));
                            else if (n == 0)
                                tmpSample[n] = (byte)((readSample[n] * 0.5));

                        }

                        writer.Write(tmpSample, 0, bytesRead);
                    }
                    while (bytesRead != 0);
                }
            }

            // Выводим преобразованный файл на второй waveViewer
            customWaveViewerOutSignal.WaveStream = new NAudio.Wave.WaveFileReader(newFilePath);
            customWaveViewerOutSignal.FitToScreen();
        }  

Однако на выходе получается нечто странное

введите сюда описание изображения

Не могу понять в чём ошибка. Буду благодарен любой помощи и советам по коду


Ответы (0 шт):