работа с 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();
        }
    }

За ранее большое спасибо тем кто поможет.


Ответы (0 шт):