如何将语音聊天室源码支持功能?

摘要:语音聊天室,或多人语音聊天,是即时通信应用中常见的功能之一,比如,QQ的语音讨论组就是我们用得比较多的。这篇文章将实现一个简单的语音聊天室,让多个人可以进入同一个房间进行语音交谈。
语音聊天室,或多人语音聊天,是即时通信应用中常见的功能之一,比如,QQ的语音讨论组就是我们用得比较多的。 这篇文章将实现一个简单的语音聊天室,让多个人可以进入同一个房间进行语音沟通。先看运行效果截图:       从左到右的三张图分别是:登录界面、语音聊天室的主界面、标注了各个控件的主界面。   (如果觉得界面太丑,没关系,后面下载源码后,你可以自己美化~~) 一. C/S结构   很明显,我这个语音聊天室采用的是C/S结构,整个项目结构相对比较简单,如下所示:    该项目的底层是基于OMCS构建的。这样,服务端就基本没写代码,直接把OMCS服务端拿过来用;客户端就比较麻烦些,下面我就重点讲客户端的开发。 二. 客户端控件式开发   客户端开发了多个自定义控件,然后将它们组装到一起,以完成语音聊天室的功能。为了便于讲解,我主界面的图做了标注,以指示出各个自定义控件。     现在我们分别介绍各个控件: 1. 分贝显示器   分贝显示器用于显示声音的大小,比如麦克风采集到的声音的大小,或扬声器播放的声音的大小。如上图中3标注的。 (1)傅立叶变换   将声音数据转换成分贝强度使用的是傅立叶变换。其对应的是客户端项目中的FourierTransformer静态类。源码比较简单,就不贴出来了,大家自己去看。 (2)声音强度显示控件 DecibelDisplayer   DecibelDisplayer 使用的是PrograssBar来显示声音强度的大小。   每当有声音数据交给DecibelDisplayer显示时,首先,DecibelDisplayer会调用上面的傅立叶变换将其转换为分贝,然后,将其映射为PrograssBar的对应的Value。 2.发言者控件SpeakerPanel   SpeakerPanel 用于表示聊天室中的一个成员,如上图中1所示。它显示了成员的ID,成员的声音的强度(使用DecibelDisplayer控件),以及其麦克风的状态(启用、引用)。
阅读全文