我正在使用下一个代码将立体声转换为单声道:
using (var waveFileReader = new WaveFileReader(sourceStream))
{
var outFormat = new WaveFormat(waveFileReader.WaveFormat.SampleRate, 1);
using (var resampler = new MediaFoundationResampler(waveFileReader, outFormat))
{
var stream = new MemoryStream();
WaveFileWriter.WriteWavFileToStream(stream, resampler);
var format = WaveFormat.CreateIeeeFloatWaveFormat(waveFileReader.WaveFormat.SampleRate, 1);
var writer = new LameMP3FileWriter(stream, format, 32);
writer.Flush();
byte[] channelBytes = stream.ToArray();
writer.Dispose();
File.WriteAllBytes(outputFile, channelBytes);
}
}
我想知道是否可以将 2 个以上通道(我有 8 个通道音频)音频转换为单声道音频?
更新状态: 好的,看起来我更改了代码,现在它可以将任何通道转换为单声道:
using (var waveFileReader = new WaveFileReader(sourceFile))
{
var outFormat = new WaveFormat(44100, 1);
using (var resampler = new MediaFoundationResampler(waveFileReader, outFormat))
{
var stream = new MemoryStream();
WaveFileWriter.WriteWavFileToStream(stream, resampler);
var format = WaveFormat.CreateIeeeFloatWaveFormat(outFormat.SampleRate, 1);
var writer = new LameMP3FileWriter(stream, format, 32);
writer.Flush();
byte[] channelBytes = stream.ToArray();
writer.Dispose();
File.WriteAllBytes(outputFile, channelBytes);
}
}
但现在的问题是重采样器降低了音量。我该如何修复它?我需要那个音量来保持相同的响度。
好吧,看来我找到了问题的答案:
using (var waveFileReader = new WaveFileReader(sourceFile))
{
var outFormat = new WaveFormat(44100, 1);
using (var resampler = new MediaFoundationResampler(waveFileReader, outFormat))
{
VolumeWaveProvider16 vol = new VolumeWaveProvider16(resampler)
{
Volume = 2f
};
var stream = new MemoryStream();
WaveFileWriter.WriteWavFileToStream(stream, vol);
var format = WaveFormat.CreateIeeeFloatWaveFormat(outFormat.SampleRate, 1);
var writer = new LameMP3FileWriter(stream, format, 32);
writer.Flush();
byte[] channelBytes = stream.ToArray();
writer.Dispose();
File.WriteAllBytes(outputFile, channelBytes);
}
}