работа с NAudio проблема с буфером или LameMP3FileWriter
Не могу понять в чем проблема но предполагаю что проблема таится в смене формата с wav на mp3. Суть проблемы в том что если выставляю waveIn.BufferMilliseconds по дефолту или меньше 10 тыс. то сильно слышно пустоту или заикание не знаю как описать. А так суть кода хочу с устройства к примеру микрофона осуществлять стрим аудио потока на сервер icecast
public static Libshout icecast;
WaveIn waveIn;
public static Thread th1 = new Thread(test);
public static byte[] BufferDA;
public Form1()
{
InitializeComponent();
}
static void test()
{
while (true)
{
if (BufferDA == null)
{}
else
{
if (icecast.isConnected())
{
icecast.send(BufferDA, BufferDA.Length);
}
else
{
MessageBox.Show("Error connect server");
}
}
}
}
private void Form1_Load(object sender, EventArgs e)
{
int waveInDevices = WaveIn.DeviceCount;
for (int waveInDevice = 0; waveInDevice < waveInDevices; waveInDevice++)
{
WaveInCapabilities deviceInfo = WaveIn.GetCapabilities(waveInDevice);
comboBox1.Items.Add(deviceInfo.ProductName);
}
comboBox1.SelectedIndex = 1;
icecast = new Libshout();
icecast.setProtocol(0);
icecast.setHost("192.168.45.5");
icecast.setPort(8010);
icecast.setPassword("112233");
icecast.setFormat(Libshout.FORMAT_MP3);
icecast.setPublic(true);
icecast.setName("radio");
icecast.setMount("/live");
}
void waveIn_DataAvailable(object sender, WaveInEventArgs e)
{
using (MemoryStream retMs = new MemoryStream())
{
LameMP3FileWriter lam = new LameMP3FileWriter(retMs, new WaveFormat(44100, 2), 128);
lam.Write(e.Buffer, 0, e.BytesRecorded);
lam.Flush();
BufferDA = retMs.GetBuffer();
}
}
private void waveIn_RecordingStopped(object sender, EventArgs e)
{
if (waveIn != null)
{
waveIn.Dispose();
waveIn = null;
}
}
private void checkBox1_CheckedChanged(object sender, EventArgs e)
{
if (live.Checked)
{
icecast.open();
if (icecast.isConnected())
{
try
{
waveIn = new WaveIn();
waveIn.DeviceNumber = comboBox1.SelectedIndex;
waveIn.BufferMilliseconds = 10100;
waveIn.WaveFormat = new WaveFormat(44100, WaveIn.GetCapabilities(comboBox1.SelectedIndex).Channels);
waveIn.DataAvailable += new EventHandler<WaveInEventArgs>(waveIn_DataAvailable);
waveIn.RecordingStopped += new EventHandler<StoppedEventArgs>(waveIn_RecordingStopped);
waveIn.StartRecording();
th1.Start();
}
catch (Exception ex)
{
MessageBox.Show(ex.Message);
}
}
else
{
MessageBox.Show("err con");
}
}
else
{
icecast.close();
waveIn.StopRecording();
}
}
За ранее большое спасибо тем кто поможет.