gpt4 book ai didi

c# - 如何将2个WAV文件混合在一起?

转载 作者:行者123 更新时间:2023-12-02 22:45:10 25 4
gpt4 key购买 nike

我正在尝试记录输入内容,并将其与歌曲(不连接)合并。我有在听歌曲时录制的吉他,并且想将吉他放在歌曲上(例如音频)。
有什么办法吗?如果无法实时混音-我录制后是否可以合并它们?就像我录制吉他后,现在录制了一个WAV文件一样,我想将2个WAV文件混合在一起。
多数民众赞成在输入设备:

 private void Capture()
{
input = new WasapiCapture((MMDevice)inputCombo.SelectedItem);
bufferedWaveProvider = new BufferedWaveProvider(input.WaveFormat);
input.DataAvailable += WaveInOnDataAvailable;
input.StartRecording();
write = new WaveFileWriter(System.IO.Path.GetTempFileName(), input.WaveFormat);
}

private void WaveInOnDataAvailable(object sender, WaveInEventArgs e)
{
bufferedWaveProvider.AddSamples(e.Buffer, 0, e.BytesRecorded);
write.Write(e.Buffer, 0, e.BytesRecorded);
write.Flush();
}

与其将其写入空白文件,我不希望将其写入已经存在的wav文件,而不是覆盖它。 MixingSampleProvider是否可能?

最佳答案

要使用ISampleProvider混合多个MixingSampleProvider源,可以执行以下操作:

此处SignalGenerator具有Gain属性,该属性允许指定混音中应该有多响。

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);
}
}
}

关于c# - 如何将2个WAV文件混合在一起?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/42098048/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com