c反应蛋白高说明什么(c在意大利)

一、前言

语音聊天专业点就是即时语音,是一种基于网络的快速传递语音信息的技术,普遍应用于各类社交软件中,优势主要有以下几点:

1、时效性:视频直播会因为带宽问题有时出现延迟高的问题,而语音直播相对来说会好很多,延迟低,并且能够第·一时间与听众互动,时效性强。

2、隐私性:这一点体现在何处,如主播不想暴露自己的长相,或者进行问题回答是,没有视频的话会让主播感到更安心,所以语音直播隐私性更强。

3、内容质量高:因为语音直播不靠"颜值"只有好的内容才能够吸引用户,所以语音直播相对来说内容质量更高。

4、成本降低:语音直播相对视频直播来说,带宽流量等都会便宜许多,成本降低不少,更加实惠。

二、语音聊天

主要步骤:音频采集、压缩编码、网络传输、解码还原、播放音频,如下图所示

C#用6步实现语音聊天(可仿qq、微信)

下面就从代码的角度来详说一下这几个步骤。

1、音频采集,读取麦克风设备数据

private readonly WaveIn _waveIn;_waveIn = new WaveIn();_waveIn.BufferMillisecOnds= 50;_waveIn.DeviceNumber = 0;_waveIn.DataAvailable += OnAudioCaptured;_waveIn.StartRecording();

2、音频数据压缩编码,常见压缩格式比较多,例如mp3、acc、speex等,这里以speex为例

private readonly WideBandSpeexCodec _speexCodec;_speexCodec = new WideBandSpeexCodec();_waveIn.WaveFormat = _speexCodec.RecordFormat;void OnAudioCaptured(object sender, WaveInEventArgs e){ byte[] encoded = _speexCodec.Encode(e.Buffer, 0, e.BytesRecorded); _audioClient.Send(encoded);}

3、网络传输,为了保证即时传输udp协议有着天然的优点

using SAEA.Sockets;using SAEA.Sockets.Base;using SAEA.Sockets.Model;using System;using System.Net;namespace GFF.Component.GAudio.Net{ public class AudioClient { IClientSocket _udpClient; BaseUnpacker _baseUnpacker; public event Action<Byte[]> OnReceive; public AudioClient(IPEndPoint endPoint) { var bCOntext= new BaseContext(); _udpClient = SocketFactory.CreateClientSocket(SocketOptionBuilder.Instance.SetSocket(SAEASocketType.Udp) .SetIPEndPoint(endPoint) .UseIocp(bContext) .SetReadBufferSize(SocketOption.UDPMaxLength) .SetWriteBufferSize(SocketOption.UDPMaxLength) .Build()); _baseUnpacker = (BaseUnpacker)bContext.Unpacker; _udpClient.OnReceive += _udpClient_OnReceive; } private void _udpClient_OnReceive(byte[] data) { OnReceive?.Invoke(data); } public void Connect() { _udpClient.Connect(); } public void Send(byte[] data) { _udpClient.SendAsync(data); } public void Disconnect() { _udpClient.Disconnect(); } }}

4、服务器转发,客户端使用udp,服务器这里同样也使用udp来转发

using SAEA.Sockets;using SAEA.Sockets.Base;using SAEA.Sockets.Interface;using SAEA.Sockets.Model;using System;using System.Collections.Concurrent;using System.Net;using System.Threading.Tasks;namespace GFF.Component.GAudio.Net{ public class AudioServer { IServerSocket _udpServer; ConcurrentDictionary<string, IUserToken> _cache; public AudioServer(IPEndPoint endPoint) { _cache = new ConcurrentDictionary<string, IUserToken>(); _udpServer = SocketFactory.CreateServerSocket(SocketOptionBuilder.Instance.SetSocket(SAEASocketType.Udp) .SetIPEndPoint(endPoint) .UseIocp<BaseContext>() .SetReadBufferSize(SocketOption.UDPMaxLength) .SetWriteBufferSize(SocketOption.UDPMaxLength) .SetTimeOut(5000) .Build()); _udpServer.OnAccepted += _udpServer_OnAccepted; _udpServer.OnDisconnected += _udpServer_OnDisconnected; _udpServer.OnReceive += _udpServer_OnReceive; } public void Start() { _udpServer.Start(); } public void Stop() { _udpServer.Stop(); } private void _udpServer_OnReceive(ISession currentSession, byte[] data) { Parallel.ForEach(_cache.Keys, (id) => { try { _udpServer.SendAsync(id, data); } catch { } }); } private void _udpServer_OnAccepted(object obj) { var ut = (IUserToken)obj; if (ut != null) { _cache.TryAdd(ut.ID, ut); } } private void _udpServer_OnDisconnected(string ID, Exception ex) { _cache.TryRemove(ID, out IUserToken _); } }}

5、解码还原,客户端将从服务器收到的数据按约定的压缩格式,进行解压缩还原成音频数据

private readonly BufferedWaveProvider _waveProvider;_waveProvider = new BufferedWaveProvider(_speexCodec.RecordFormat);private void _audioClient_OnReceive(byte[] data){ byte[] decoded = _speexCodec.Decode(data, 0, data.Length); _waveProvider.AddSamples(decoded, 0, decoded.Length);}

6、播放音频,使用播放设备来播放解码后的音频数据

private readonly IWavePlayer _waveOut;_waveOut = new WaveOut();_waveOut.Init(_waveProvider);_waveOut.Play();

三、测试运行

通过分析语音聊天的几个关键问题点后,按步骤封装好代码,接下来就是用实例来测试一下效果了。

客户端封装在按钮事件中:

GAudioClient _gAudioClient = null;private void toolStripDropDownButton2_ButtonClick(object sender, EventArgs e){ if (_gAudioClient == null) { ClientConfig clientCOnfig= ClientConfig.Instance(); _gAudioClient = new GAudioClient(clientConfig.IP, clientConfig.Port + 2); _gAudioClient.Start(); } else { _gAudioClient.Dispose(); _gAudioClient = null; }}

服务端封装在main函数中:

ConsoleHelper.WriteLine("正在初始化语音服务器...", ConsoleColor.DarkBlue);_gAudioServer = new GAudioServer(filePort + 1);ConsoleHelper.WriteLine("语音服务器初始化完毕...", ConsoleColor.DarkBlue);ConsoleHelper.WriteLine("正在启动语音服务器...", ConsoleColor.DarkBlue);_gAudioServer.Start();ConsoleHelper.WriteLine("语音服务器初始化完毕", ConsoleColor.DarkBlue);

万事俱备,现在F5跑起来试试。

C#用6步实现语音聊天(可仿qq、微信)

如上红框所示,喊了几句相当于Hello World的Hello没有问题,大功初步告成~

声明:本网页内容旨在传播知识,若有侵权等问题请及时与本网联系,我们将在第一时间删除处理。E-MAIL:dandanxi6@qq.com

(0)
上一篇 2023年 6月 9日 上午10:12
下一篇 2023年 6月 9日 上午10:21

相关推荐

  • 京东金条和京东白条有什么区别

    京东金条和白条有什么区别?相信很多人都不清楚,而且对这个问题的答案也很好奇。确实,随着我国互连网金融的发展,市面上的网络借贷产品多如牛毛,而且这些贷款产品各有各有特点,想分辨清楚不…

    2023年 5月 31日
  • 家里网速太慢试试这些解决办法(家里网速太慢怎么样网速变快)

    随着互联网的发展 Wi-Fi在我们生活和工作中 已不可或缺 各大运营商 也在逐步提升家庭宽带套餐 可不少用户升级后表示 网速似乎并没有提升多少 这是啥情况? 如何提升家中网速? 网…

    2023年 8月 4日
  • 《快影》导入本地音乐教程

    快影app为用户提供了众多的音乐,可以直接设置添加到作品中。但是如果我们没有找到自己喜欢的歌曲,也可以从本地导入音频文件,然后作为视频的背景音哦!那么快影怎么导入本地音乐呢?下面小…

    互联网 2023年 4月 17日
  • yy神豪赵子龙现实是干什么的,赵子龙和阿哲

    ​  YY主播夏玲美直播间的神豪“赵子龙”,在去年的YY年度盛典上与平生哥一场年度豪刷,想必许多YY游客还记忆犹新。   在去年神豪赵子龙与夏玲美曾经发生过一些误会,导致大哥下掉了…

    2023年 9月 29日
  • qq里怎样取消关注微视等公众号的功能

    大家有没有发现,最近QQ频繁弹出“微视”服务号的消息?而且连个关闭窗口都没有,右划删掉之后,第二天又会再一次弹出“微视”的消息,犹如夏夜灯火下的飞蛾,杀之不尽,挥之不绝。 IT之家…

    2023年 11月 11日
  • 将支付宝的钱转到余额宝怎么赚钱

    对于支付宝大家并不陌生吧,但是,对于支付宝投资可靠吗?支付宝的钱如何转到余额宝获取收益?就不了解了吧。下面就来为您介绍一下吧! 支付宝投资可靠吗?支付宝的钱如何转到余额宝获取收益?…

    2023年 6月 10日
  • 淘宝运营主要干什么工作内容(淘宝电商运营工作内容)

    运营每天早上起来第一件事情,是看数据。按照之前计划,把每月的销售量或者销售额落实到每日,这时候要做一个简单的判断:销售达标还是不达标?判断之后,就会有一个整体的思维分析:达标的话做…

    2023年 3月 7日
  • 我们做淘宝无货源店铺需要准备哪些东西呢

    1、免费注册淘宝店铺,需要缴纳1000元保证金。(这个钱是可以退还给你的)也可以一年缴纳30的,和芝麻信用分有关,(具体信用分多少,自行百度)不过不能退还。 2、注册一个淘宝联盟账…

    互联网 2023年 1月 18日
  • 个人paypal可以收取美金吗

    个人paypal怎么才可以收美元,首先你要注册成为个人用户,然后登陆到网站去申请收款。 下面以我常用的payoneer为例: 1、注册一个账号(推荐使用); 2、填写你的个人信息;…

    2023年 9月 11日
  • 快手直播的时候怎么录屏,电脑上的快手直播伴侣可以录屏吗

    快手直播的时候怎么录屏?现在的互联网科技越来越发达了,在十年前我们还都在线下购物,如今在家里只需要在手机上下单,就可以购买物品。所以有很多平台就上线了直播售货的方式来进行商品交易。…

    2023年 4月 16日