Я пытаюсь записать 32-битное стерео, 48000 Гц от моего выхода, используя WasapiLoopbackCapture
NAudio в 2 отдельных файла канала.Поэтому я хочу иметь что-то вроде channel1.wav
& channel2.wav
Что я пробовал по этой ссылке
public List<RecordingResult> SplitStereoRecordingByTalkUnit()
{
wasapiIn = new WasapiLoopbackCapture();
wasapiIn.DataAvailable += wi_DataAvailable
_writers = new WaveFileWriter[wasapiIn.WaveFormat.Channels];
for (int n = 0; n < _writers.Length; n++)
{
var format = new WaveFormat(wasapiIn.WaveFormat.SampleRate, wasapiIn.WaveFormat.BitsPerSample, 1);
_writers[n] = new WaveFileWriter(String.Format("channel{0}.wav", n + 1), format);
}
wasapiIn.StartRecording();
return output;
}
void wi_DataAvailable(object sender, WaveInEventArgs e)
{
if (e.BytesRecorded != 0)
{
int offset = 0;
while (offset < e.BytesRecorded)
{
for (int n = 0; n < wasapiIn.WaveFormat.Channels; n++)
{
_writers[n].Write(e.Buffer, offset, 4);
_writers[n].Flush();
offset += 4;
}
}
}
}
Я тоже уже пытался использовать MultiplexingWaveProvider
в сочетании с BufferedWaveProvider
, которые используют функцию addSample()
.
Все это приводит к плохой шумной записи.
Что мне делать?
ОБНОВЛЕНИЕ: Этот код работает на 16 битах, изменяет только смещение смещения на 2 и считывание буфера на 2