语音聊天室( 三 )


语音聊天室

文章插图
语音聊天其中complete 的值用于标誌终止声音播放的异常原因 。类似的,初始化完成之后要使AudioCapture 对象捕获和压缩声音数据还需要其他的操作,首先声明一个InputStream 对象,赋其值为AudioCapture 对象的getAudioInputStream() 方法的返回值,执行对象的start() 方法,然后在建立一个循环,将通过InputStream 的read() 方法得到的数据传送到网路上 。例如以下代码:sendStream.write(compressedVoice,0,b);......通过使用CallLink 的几个方法,我们可以方便的传输和接收音频数据流 。以下是它的代码://使用套接字进行连线void open() throws IOException, UnknownHostException//打开网路连线// 监听,等候呼叫inServSock new ServerSocket(TALK_PORT); inSock inServSock.accept();public InputStream getInputStream()throws IOException//返回音频数据输入流H if (inSock != null)return inSock.getInputStream();elsereturn null;publicOutputStreamgetOutputStream()throwsIOException//返回音频数据输出流if (outSock != null)return outSock.getOutputStream();elsereturn null;void close() throws IOException//关闭网路连线 ;inSock.close();outSock.close();程式的代码总体有366 行,限于篇幅,这里就不一一列举了 。编译以及程式的使用方法:运行和编译本程式需要加上额外的环境参数,为了方便使用可以建立以下内容的批处理档案:(假设程式所需要的包均在程式所在目录下的lib 资料夹中)用于编译的批处理程式c.bat 的内容javac -classpath .;lib\am.jar jphone.java用于运行的批处理程式r.bat 的内容java -classpath .;lib\am.jar jphone启动时在A 计算机的IP 地址框内输入要进行连线的计算机B 的IP 地址,在计算机B 的IP 地址框内输入要进行连线的计算机A 的IP 地址,让后分别点击“拨出电话”按钮就可以进行连线了 。当然别忘了接上麦克风和打开音箱电源,呵呵 。提醒大家,这里的IP 地址栏里预先存在的地址是127.0.0.1,也就是说,程式也可以和自己进行连线,点击“拨出电话”按钮,等8 秒左右敲敲你的麦克风,听到没有,是不是也有“嘣、嘣、嘣”的声音??