У меня проблема с использованием NAudio и WasapiLoopBackCapture ... Я новичок и не понимаю всего, что я делаю.Я хочу конвертировать байтовый буфер в другой с форматом волны 44100 и скоростью 16 бит.Это работает, но у меня появляется какой-то шум или странный шум после преобразования.
Редактировать: Я пытался объединить весь буфер без преобразования.Я конвертирую и пишу только в конце, а потом все работает нормально.Я думаю, что проблема в функции Convert16 или readStream.Если я объединяю конвертированный буфер, шипение приходит между 2 буферами.Это может быть проблема длины?Мне нужно конвертировать буфер без слияния, потому что я отправляю их по udp
Функции Convert16 и Readstream из этой темы
public byte[] Convert16(byte[] input, int length, WaveFormat format)
{
if (length == 0)
return new byte[0];
using (var memStream = new MemoryStream(input, 0, length))
{
using (var inputStream = new RawSourceWaveStream(memStream, format))
{
var sampleStream = new NAudio.Wave.SampleProviders.WaveToSampleProvider(inputStream);
var resamplingProvider = new NAudio.Wave.SampleProviders.WdlResamplingSampleProvider(sampleStream, audioRate);
var ieeeToPCM = new NAudio.Wave.SampleProviders.SampleToWaveProvider16(resamplingProvider);
var sampleStreams = new NAudio.Wave.StereoToMonoProvider16(ieeeToPCM);
sampleStreams.RightVolume = 0.5f;
sampleStreams.LeftVolume = 0.5f;
return readStream(sampleStreams, length);
}
}
}
private byte[] readStream(IWaveProvider waveStream, int length)
{
byte[] buffer = new byte[length];
using (var stream = new MemoryStream())
{
int read;
while ((read = waveStream.Read(buffer, 0, length)) > 0)
{
stream.Write(buffer, 0, read);
}
return stream.ToArray();
}
}
public void InputBufferToFileCallback(object sender, WaveInEventArgs e)
{
// Used to see WaveViewer and to test
baseWriter.Write(e.Buffer, 0, e.BytesRecorded);
// byte[] convertedTo16 -- PROBLEM IS HERE
convertedTo16 = Convert16(e.Buffer, e.BytesRecorded, waveFormatIn);
// Used to see WaveViewer and to test
convertedWriter.Write(convertedTo16, 0, convertedTo16.Length);
// Send over udp real time
SendSoundController(convertedTo16);
}
Мы можем видеть наНа этом изображении разница между повторной выборкой смелости и моей повторной выборкой.Мы видим проблему.
https://i.imgur.com/H3PbNYR.png
Спасибо и хорошего дня.