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

相关推荐

  • 115网盘天翼云盘威联通nas挂载教程

    大家好,多年的存储服务器领域的工作经历,让我有机会学到一些专业知识。然而每个人站在不同立场,内容就会有所偏重,客观与否还请大家指正,期待深入探讨交流。本文章内容创作仅代表作者观点,…

    2023年 7月 16日
  • 怎样让陌生的小公狗对你产生好感

    ꉂ(ˊᗜˋ*)大家好啊,祝大家发大财,事业顺利,感情和睦,阖家欢乐,身体健康,福禄寿增长。 今天和大家分享一个有意思的知识,在见面的一瞬间,如何让村里陌生的小狗成为你的朋友,当然这…

    2023年 8月 12日
  • 微信加好友营销方法

    我们平时要添加客户微信的时候只能手动一个一个输入联系方式,非常复杂而且很耗时间。而且过于频繁地添加客户很有可能会导致微信被限制添加好友,严重的话可能会被封号。 为了方便员工大量添加…

    2023年 1月 23日
  • qq音乐ios版9.7内测发布

    IT之家 12 月 15 日消息,据网友反馈,腾讯 QQ 音乐 iOS 版推送了 12.0 测试版,本次更新支持「臻品母带」,采用全新神经网络技术,深度还原母带品质,让音乐宛如录制…

    2023年 9月 6日
  • 腾讯手游助手连不上网怎么办,腾讯手游助手多开内存不足怎么办

    如果你平时非常喜欢玩游戏的话,那么相信当小编提到腾讯手游助手这款软件的话,你一定会非常的熟悉了。而最近,有的小伙伴在使用腾讯手游助手软件玩热门游戏的时候,遇到了这样的问题,就是腾讯…

    2022年 12月 29日
  • matplotlib和python数据分析

    matplotlib采用面向对象的技术来实现,因此组成图表的各个元素都是对象,在编写较大的应用程序时通过面向对象的方式使用matplotlib将更加有效。但是使用这种面向对象的调用…

    2023年 7月 28日
  • 网速越来越慢,你可以试试重启路由器吗

    路由器我们每天都会使用,但是路由器使用久了到底要不要重启呢?今天小编就在这分享,赶紧来学习了解一下吧。 首先家里的路由器其实是需要重启的,很多人就是因为从来没有重启过,导致路由器越…

    2023年 6月 8日
  • 打官司需要向法官提供案例吗,打官司有相关判例可以作为参考吗

    上周跟大家分享了给法官邮寄类案检索报告的重要性,很多朋友深有体会,通过提交类似案例的方式,得到了法官的认可,最终取得了胜诉结果。但也有很多朋友留言、私信,不知道怎么进行检索,今天就…

    2023年 9月 8日
  • 常州ca数字证书电子签章在哪里办理

    广东数字证书(CA)及电子签章办理指南 韶关市公共资源交易系统 GDCA数字证书及电子签章申请指南 一、办理证书说明 数字证书用于韶关市公共资源交易一体化平台进行招投标操作,使用数…

    2023年 3月 2日
  • 百度智能云发布千帆大模型平台2.0

    IT之家 9 月 5 日消息,在今日举办的 2023 百度云智大会上,百度智能云宣布千帆大模型平台 2.0 全面升级发布。 据百度云官方介绍,千帆大模型平台 2.0 升级带来了多项…

    2023年 9月 12日