我将音频文件保存在硬盘上有问题。 我正在使用Naudio的WaveChannel32类对我播放的声音进行泛音效果。 我想将更改的Pan值保存在磁盘上。 但是当我想要保存时,它是一个无穷无尽的流,文件长大为大数据Wav文件。 这是我使用它的代码:
制作流:
if (dialog.FileName.EndsWith(".mp3"))
{
pcm = NAudio.Wave.WaveFormatConversionStream.CreatePcmStream(new NAudio.Wave.Mp3FileReader(dialog.FileName));
} else if (dialog.FileName.EndsWith(".wav")) {
pcm = new NAudio.Wave.WaveChannel32(new NAudio.Wave.WaveFileReader(dialog.FileName));
}
stream = new NAudio.Wave.BlockAlignReductionStream(pcm);
if (stream == null) return;
/* Wave Channel new instance (Pan) */
wave_channel = new WaveChannel32(stream);
wave_channel.Pan = panSlider1.Pan;
/* Volume Meter */
sample_channel = new SampleChannel(wave_channel, true);
sample_channel.PreVolumeMeter += OnPostVolumeMeter;
realtime_stream = new MeteringSampleProvider(sample_channel);
realtime_stream.StreamVolume += OnPostVolumeMeter;
/* Wave out initialize */
wavo = new WaveOut();
wavo.Init(realtime_stream);
wavo.Stop();
/* Volume Slider */
sample_channel.Volume = volumeSlider1.Volume;
保存wav文件代码,我尝试将WaveChannel32投射到WaveStream
WaveStream ch = wave_channel;
long outputLenght = 0;
using (var writer = new WaveFileWriter(save_file_dialog.FileName + ".wav", ch.WaveFormat)) {
byte[] buffer = new byte[ch.WaveFormat.AverageBytesPerSecond * 4];
while (true) {
int bytesread = ch.Read(buffer, 0, buffer.Length);
if (bytesread == 0) {
break;
}
outputLenght += bytesread;
if (outputLenght > Int32.MaxValue) {
throw new InvalidOperationException("Plik nie może być większy niż 2GB");
}
Console.WriteLine(buffer.Length);
Console.WriteLine(bytesread);
writer.Write(buffer, 0, bytesread);
}
}
如何将其与原始硬盘同时保存在硬盘上?