Microphone对象--FlashCom Develop阅读笔记 (十)

2006-03-09 00:41:18

这一节讲述如何使用Microphone对象,包括怎么减少麦克风的回音。 获取麦克风 1 : Microphone.get([index]); 2 : //一般如果只有一个麦克风的话,可以用Microphone.get() 来自flashcomguru forums的检测麦克风函数: 01 : function checkforMic() { 02 : micArray = Microphone.names;; 03 : if (micArray.length >= 1){ 04 : temp_mic = Microphone.get(); 05 : if(temp_mic == -1) 06 : trace( '--- mic is detected but its busy' ); 07 : else 08 : trace( '--- mic detected' ); 09 : delete temp_mic; 10 : } else if (micArray.length == 0) { 11 : trace( '--- no Mic detected' ); 12 : } 13 : } 14 : 或者使用下面的更简单的函数: 01 : function checkForMic(){ 02 : return Microphone.names.length; 03 : } 04 : 05 : // trace ('User have a Mic? -> '+checkForMic()); 06 : 07 : function isMicBusy(){ 08 : if(arguments.length) return Microphone.get(arguments[0]) == -1; 09 : return Microphone.get() == -1; 10 : } 11 : // trace ('Is user's Mic busy? -> '+isMicBusy()); 避免回音 如果你使用外置的话筒,因为会有较大的增益,就不可避免的遇到回音的问题。 为了尽量降低话筒的回音,FlashCom Server提供了回音抑制功能。要使用这一功能,可以通过下面的方法: 1: myMicrophone.useEchoSuppression(true); 这样就可以保持较好的语音效果,而不会从话筒传递过多的的回音。但尽管如此,仍然会有部分的回音无法消除,下面是一些好的建议: 1. 适当调低你的话筒音量 2. 让话筒远离你的音箱 3. 及时查找你的设备故障 4. 如果可以尽量使用戴在头上的耳机或听筒 保持Microphone始终打开 为了节约带宽,FlashCom server默认会关闭Microphone对象当它不再使用的时候。但是,有时候你可能需要保持Microphone保持始终打开(例如为了保证没有任何延迟),你可以使用下面的方法: 1: my_mic.setSilenceLevel(0) 音量调节 Flashcomguru上提供了如何调节音量的方法: 1 : //Attach your netstream audio to a movielcip: 2 : movieclip_mc.attachAudio(yournetStream); 3 : // create a sound object 4 : my_snd = new Sound(movieclip_mc); 5 : // to adjust the volume 6 : my_snd.setVolume(50); 服务器端计算在线人数的方法 最简单的计算在线人数的方法 通过 application.clients.length 就可以了 客户端需要的话可以call服务器端定义的函数,最方便的还是使用共享对象来存取了,下面给出完整的实现方法。 在服务器端的main.asc文件中写入: 01 : application.onAppStart = function() { 02 : this.users_so = SharedObject.get('users_so'); 03 : }; 04 : 05 : application.onConnect = function(newClient, name) 06 : { 07 : // Accept the client's connection 08 : application.acceptConnection(newClient); 09 : i = application.clients.length; 10 : this.users_so.setProperty('users', i); 11 : } 12 : application.onDisconnect = function(client) 13 : { 14 : i = application.clients.length; 15 : this.users_so.setProperty('users', i); 16 : } 在客户端fla文件中添加: 1 : users_so = SharedObject.getRemote('users_so', client_nc.uri, false); 2 : // 更新在线用户数 3 : users_so.onSync = function(list) { 4 : txtNumberUsers.text = users_so.data.users; 5 : } 简单的视频聊天室,欢迎测试 一个改进版的视频聊天室,目前功能还需完善。主要作了私聊方式的改进(直接在用户列表中选择),和踢人和禁止功能等通过按钮实现(需要管理员权限)。 2004-08-19:修改了视频私聊部分,自动显示自己的视频,选择用户列表中的用户查看视频。 2004-08-11:增加用户列表图标功能,检查用户是否有摄像头和性别(但目前boblog用户注册没有填写性别,故暂时没有判断),添加部分Flash支持的UBB标识 2004-07-30:增加聊天表情功能,使用smilyTextField 组件,并修正了中文的冲突和定位问题,欢迎使用! 2004-07-12:Boblog1.5版增加了注册功能后,注册用户可以直接登录聊天室。 有摄像头的可以直接点视频窗口打开视频。 2004-07-11:取消管理员登录功能,自动判断用户级别。 有任何建议可以在此提出! 注意:需要注册网站用户才可以登录聊天室。 点这里注册 [目前在服务器端作了限制,该聊天室最多可同时10个连接。] 点击新窗口查看此Flash 关于SmileyTextField组件的又一问题 之前有提到过该组件无法正常显示表情图片的位置(总是显示在第一行),但是当把该组件集成到FlashCom的chat组件中时候,却有另外一个问题出现,表情图片Y位置有向下的偏移,而且越来越多,这个问题困扰我好久。也尝试过许多方法,今天终于找出问题的所在。 组件action的第550行有如下代码: 1 : if ((tag_type == 'br' && str_array[0].length == 2) || (tag_type == 'p' && str_array[0].length == 1)) { 2 : this.pixel_pos = 0; 3 : this.line++; 4 : if (this.cutLine != this.line - 1) this.cutPos = i; 5 : this.smiley_mc_array[this.line] = new Array(); 6 : } 问题就出在这行: 1 : this.line++;// 因为FlashCom的chat组件在服务器段发送信息的时候会在每条信息最后加上 标记,这是正确的,但是表情符号是在客户端解析的,因为上面的程序遇到br标记时候会增加行数(因为独立程序的换行标记是该组件添加了,没有考虑到系统会自动加换行标记 ),而这样的话,表情符号就和文字内容的垂直位置就有偏移了。 以上内容希望对使用SmileyTextField组件的朋友有所获益~如有问题,欢迎大家一起讨论! 2004-07-20 发现一个问题,在次补正。 1 : //经过以上修改后 2 : this.smiley_mc_array[this.line] = new Array(); 3 : //上面这行要修改为,否则表情符号无法正常清空 4 : this.smiley_mc_array[this.line+1] = new Array();