How to Mix 2 wav files together?

荒凉一梦 提交于 2019-12-02 07:43:17

To mix multiple ISampleProvider sources using a MixingSampleProvider, you can do the following:

Here SignalGenerator has a Gain property which allows to specify how loud it should be in the mix.

using System;
using NAudio.Wave;
using NAudio.Wave.SampleProviders;

namespace ConsoleApplication1
{
    internal class Program
    {
        private static void Main(string[] args)
        {
            ISampleProvider provider1 = new SignalGenerator
            {
                Frequency = 1000.0f,
                Gain = 0.5f
            };

            ISampleProvider provider2 = new SignalGenerator
            {
                Frequency = 1250.0f,
                Gain = 0.5f
            };

            var takeDuration1 = TimeSpan.FromSeconds(5); // otherwise it would emit indefinitely
            var takeDuration2 = TimeSpan.FromSeconds(10);

            var sources = new[]
            {
                provider1.Take(takeDuration1),
                provider2.Take(takeDuration2)
            };

            var mixingSampleProvider = new MixingSampleProvider(sources);

            var waveProvider = mixingSampleProvider.ToWaveProvider();

            WaveFileWriter.CreateWaveFile("test.wav", waveProvider);
        }
    }
}

That should be possible with a WaveMixerStream32, e.g like this

var mixer = new WaveMixerStream32 { AutoStop = true};

var wav1 = new WaveFileReader(@"c:\...\1.wav");
var wav2 = new WaveFileReader(@"c:\...\2.wav");

mixer.AddInputStream(new WaveChannel32(wav1));
mixer.AddInputStream(new WaveChannel32(wav2));
WaveFileWriter.CreateWaveFile("mixed.wav", new Wave32To16Stream(mixer));
标签
易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!