<?xml version="1.0" encoding="UTF-8" ?>
<rss version="2.0">
<channel>
<title><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></title> 
<link>http://www.jackxiang.com/index.php</link> 
<description><![CDATA[赢在IT，Playin' with IT,Focus on Killer Application,Marketing Meets Technology.]]></description> 
<language>zh-cn</language> 
<copyright><![CDATA[向东博客 专注WEB应用 构架之美 --- 构架之美，在于尽态极妍 | 应用之美，在于药到病除]]></copyright>
<item>
<link>http://www.jackxiang.com/post//</link>
<title><![CDATA[[java技术]输出音频和捕获音频]]></title> 
<author>jack &lt;xdy108@126.com&gt;</author>
<category><![CDATA[WEB2.0]]></category>
<pubDate>Thu, 05 Oct 2006 05:19:29 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//</guid> 
<description>
<![CDATA[ 
	<p align="center">这是我原来用过的两段代码，输出音频和捕获音频。 <br/>构造器里的socket是用来接受来自网络的音频数据。不做网络音频可以去掉它。<br/><br/>希望能与大家分享经验。8-）<br/><br/>import java.io.*; <br/>import javax.sound.sampled.*; <br/>import java.net.*; <br/><br/><br/>/** <br/>* title: voicechat <br/>* description: 输出音频（放音程序） <br/>* copyright: copyright (c) 2001 <br/>* company: <br/>* @author &nbsp;你猜！ <br/>* @version 1.0 <br/>*/ <br/><br/><br/>class playback implements runnable &#123; <br/><br/> final int bufsize = 16384; <br/> sourcedataline line; <br/> thread thread; <br/> socket s; <br/><br/> playback(socket s)&#123;//构造器 取得socket以获得网络输入流 <br/> this.s=s; <br/> &#125; <br/> public void start() &#123; <br/><br/> thread = new thread(this); <br/> thread.setname("playback"); <br/> thread.start(); <br/> &#125; <br/><br/> public void stop() &#123; <br/> thread = null; <br/> &#125; <br/><br/> public void run() &#123; <br/><br/> audioformat format =new audioformat(8000,16,2,true,true);//audioformat(float samplerate, int samplesizeinbits, int channels, boolean signed, boolean bigendian） <br/> bufferedinputstream playbackinputstream; <br/><br/> try &#123; <br/> playbackinputstream=new bufferedinputstream(new audioinputstream(s.getinputstream(),format,2147483647));//封装成音频输出流，如果网络流是经过压缩的需在此加套解压流 <br/> &#125; <br/> catch (ioexception ex) &#123; <br/> return; <br/> &#125; <br/><br/> dataline.info info = new dataline.info(sourcedataline.class,format); <br/><br/> try &#123; <br/> line = (sourcedataline) audiosystem.getline(info); <br/> line.open(format, bufsize); <br/> &#125; catch (lineunavailableexception ex) &#123; <br/> return; <br/> &#125; <br/><br/> byte[] data = new byte[1024];//此处数组的大小跟实时性关系不大，可根据情况进行调整 <br/> int numbytesread = 0; <br/> line.start(); <br/><br/> while (thread != null) &#123; <br/>try&#123; <br/> numbytesread = playbackinputstream.read(data); <br/> line.write(data, 0,numbytesread); <br/>&#125; catch (ioexception e) &#123; <br/> break; <br/> &#125; <br/> &#125; <br/><br/> if (thread != null) &#123; <br/> line.drain(); <br/> &#125; <br/><br/> line.stop(); <br/> line.close(); <br/> line = null; <br/> &#125; <br/>&#125; <br/><br/><br/>import java.io.*; <br/>import javax.sound.sampled.*; <br/>import java.net.*; <br/><br/>/** <br/>* title: voicechat <br/>* description: 音频捕捉（录音程序） <br/>* copyright: copyright (c) 2001 <br/>* company: <br/>* @author &nbsp;你猜！ <br/>* @version 1.0 <br/>*/ <br/><br/>class capture implements runnable &#123; <br/><br/> targetdataline line; <br/> thread thread; <br/> socket s; <br/> bufferedoutputstream captrueoutputstream; <br/><br/> capture(socket s)&#123;//构造器 取得socket以获得网络输出流 <br/> this.s=s; <br/> &#125; <br/><br/> public void start() &#123; <br/><br/> thread = new thread(this); <br/> thread.setname("capture"); <br/> thread.start(); <br/> &#125; <br/><br/> public void stop() &#123; <br/> thread = null; <br/> &#125; <br/><br/> public void run() &#123; <br/><br/> try &#123; <br/> captrueoutputstream=new bufferedoutputstream(s.getoutputstream());//建立输出流 此处可以加套压缩流用来压缩数据 <br/> &#125; <br/> catch (ioexception ex) &#123; <br/> return; <br/> &#125; <br/><br/> audioformat format =new audioformat(8000,16,2,true,true);//audioformat(float samplerate, int samplesizeinbits, int channels, boolean signed, boolean bigendian） <br/> dataline.info info = new dataline.info(targetdataline.class,format); <br/><br/> try &#123; <br/> line = (targetdataline) audiosystem.getline(info); <br/> line.open(format, line.getbuffersize()); <br/> &#125; catch (exception ex) &#123; <br/> return; <br/> &#125; <br/><br/> byte[] data = new byte[1024];//此处的1024可以情况进行调整，应跟下面的1024应保持一致 <br/> int numbytesread=0; <br/> line.start(); <br/><br/> while (thread != null) &#123; <br/> numbytesread = line.read(data, 0,1024);//取数据（1024）的大小直接关系到传输的速度，一般越小越快， <br/> try &#123; <br/> captrueoutputstream.write(data, 0, numbytesread);//写入网络流 <br/> &#125; <br/> catch (exception ex) &#123; <br/> break; <br/> &#125; <br/> &#125; <br/><br/> line.stop(); <br/> line.close(); <br/> line = null; <br/><br/> try &#123; <br/> captrueoutputstream.flush(); <br/> captrueoutputstream.close(); <br/> &#125; catch (ioexception ex) &#123; <br/> ex.printstacktrace(); <br/> &#125; <br/> &#125; <br/>&#125; </p>
]]>
</description>
</item><item>
<link>http://www.jackxiang.com/post//#blogcomment</link>
<title><![CDATA[[评论] [java技术]输出音频和捕获音频]]></title> 
<author> &lt;user@domain.com&gt;</author>
<category><![CDATA[评论]]></category>
<pubDate>Thu, 01 Jan 1970 00:00:00 +0000</pubDate> 
<guid>http://www.jackxiang.com/post//#blogcomment</guid> 
<description>
<![CDATA[ 
	
]]>
</description>
</item>
</channel>
</rss>