cocos creator麻将教程系列(八)—— 达达麻将语音聊天源码分析
达达麻将语音聊天源码分析
达达麻将版图
语音聊天
1:语音聊天只支持Native平台,iOS与android;
2: 语音聊天的音频格式为amr;
3: native平台实现了语音的录制和播放,可以移植到其他项目使用,代码放在native文件夹下;
录制流程
1:按钮在代码里面监听START与Ended事件开始和结束录音; Voice.js
2: VoiceMgr.js: 封装了android/IOS native平台的调用;
3: cc.vv.voiceMgr.prepare("record.amr");开始录制;
1>暂停所有的游戏音效与音乐;
2>清理掉原来录制的文件;
3>调用native 平台的开始录制函数;
4:Ended事件响应:
1>判断录音是否超过10S,没有超过取消;
2>cc.vv.voiceMgr.cancel() --> 调用到native平台 cancel;
3>cc.vv.voiceMgr.realease() --> 调用native平台,录制完成;
4>getVoiceData: 将录制好的二进制文件转换成文本编码;
5>发送音频文本数据给游戏服务器: voice_msg事件;
播放流程
1:服务器收到 voice_msg事件;
2: 将语音数据在房间广播:voice_msg_push事件;
3: GameNetMgr.js-->收到voice_msg_push事件,然后派发voice_msg;
4: MJRoom.js-->playVoice;
5: cc.vv.voiceMgr.writeVoice(msgfile,msgInfo.msg); 将受到的数据写入声音文件;
6: 播放声音文件cc.vv.voiceMgr.play(msgfile),调用本地接口;
7: update函数里面检车播放时间是否到,调用onPlayerOver到了以后继续恢复原来的游戏音效;
8:优点: native平台下的录音和播放代码是直接可以使用的;
有带改进的地方:音频数据比较大,建议不要走游戏的长连接,阻塞游戏数据通道(广播),可以改成独立的http上传和下载,然后房间里面只广播xxxx说了话;