C# 语音聊天系统

来源:互联网 发布:linux挂载和卸载iso 编辑:程序博客网 时间:2024/04/29 12:29
以前写过一个点对点的语音对讲,说下思路发送端 音频采集 -- 音频编码 -- 网络传输接受端 网络接收 -- 音频解码 -- 音频输出需要要的话联系我,编码我直接用网上找的一个 LumiSoft 音频编码用的G.711using System;using System.Collections.Generic;using System.ComponentModel;using System.Data;using System.Drawing;using System.Text;using System.Windows.Forms;using LumiSoft.Media.Wave;using LumiSoft.Media.Wave.Native;using LumiSoft.Net.Media.Codec.Audio;using System.Net;using System.Net.Sockets;using System.Threading;namespace testAudio{    public partial class Form1 : Form    {        private WaveIn m_waveIn = null;        private WaveOut m_waveOut = null;                private Socket socket = null;        private IPEndPoint localEP = null;        private IPEndPoint remoteEP = null;        private AudioCodec m_audioCodec = null;        private bool m_bAlive = true;        public Form1()        {            InitializeComponent();                        m_audioCodec = new G711_alaw();            localEP = new IPEndPoint(IPAddress.Any, 15888);            remoteEP = new IPEndPoint(IPAddress.Parse("192.168.0.225"), 15888);            socket = new Socket(AddressFamily.InterNetwork, SocketType.Dgram, ProtocolType.Udp);            socket.Bind(localEP);            m_waveOut = new WaveOut(WaveOut.Devices[0], 8000, 16, 1);                        Thread recvThread = new Thread(new ThreadStart(OnRecv));            recvThread.Start();        }        private void OnRecv()        {            byte [] buf = new byte[2000];                        while(m_bAlive)            {                IPEndPoint ep = new IPEndPoint(IPAddress.Any,0);                EndPoint sender = (EndPoint)ep;                int nReceved = socket.ReceiveFrom(buf, ref sender);                byte[] sourceBuf = new byte[nReceved];                for (int i = 0; i < nReceved; i++)                {                    sourceBuf[i] = buf[i];                }                if (nReceved <= 0)                {                    Thread.Sleep(1);                }                else                {                    byte[] decodeData = m_audioCodec.Decode(sourceBuf, 0, sourceBuf.Length);                    if (m_waveOut != null)                    {                        m_waveOut.Play(decodeData, 0, decodeData.Length);                    }                }            }        }        private void button1_Click(object sender, EventArgs e)        {            if (m_waveIn == null)            {                m_waveIn = new WaveIn(WaveIn.Devices[0], 8000, 16, 1, 500);                m_waveIn.BufferFull += new BufferFullHandler(m_waveIn_BufferFull);                m_waveIn.Start();            }            else            {                m_waveIn.Dispose();                m_waveIn = null;            }        }        private void m_waveIn_BufferFull(byte[] buf)        {            try            {                if(m_audioCodec != null)                {                    byte[] encodeData = m_audioCodec.Encode(buf, 0, buf.Length);                    socket.SendTo(encodeData, remoteEP);                }            }            catch (Exception ex)            {                Console.WriteLine(ex.Message.ToString());            }        }    }}
原创粉丝点击