JavaTargetDataLineInterface to read captured data from the buffer of the target data row,
SourceDataLineInterface to write audio data into the buffer of the Data row.
For example, you can obtain data rows from an audio capture device.
Call the start method to start the operation.
Call the stop method to stop.
Package chat; </P> <p> Import javax. swing. jtextarea; <br/>/** <br/> * @ author Hello <br/> * packed the sender and cycler, for GUI call <br/> */<br/> public class chat {</P> <p> private messagereceiver massagereceiver; <br/> private messagesender massagesender; <br/> private soundreceiver; <br/> private soundsender; </P> <p> public chat (jtextarea textarea) {<br/> massagesender = new messagesender ("231.0.0.1", 10000, textarea); <br/> massagereceiver = new messagereceiver ("231.0.0.1", textarea ); <br/> soundsender = new soundsender ("231.0.0.1",); <br/> soundreceiver = new soundreceiver ("231.0.0.1", 10001,1024); <br/> restart. start (); <br/>}</P> <p> Public void send (string message) {<br/> massagesender. send (Message); <br/>}</P> <p> Public void soundstart () {<br/> soundreceiver. start (); <br/> soundsender. start (); <br/>}</P> <p> Public void soundstop () {<br/> soundreceiver. stop (); <br/> soundsender. stop (); <br/>}< br/>
Package chat; </P> <p> Import javax. sound. sampled. *; <br/>/** <br/> * @ author Hello <br/> * Playing part <br/> */<br/> public class soundsender extends udpsender implements runnable {</P> <p> private targetdataline line; <br/> private int bufferlength; <br/> private thread; <br/> private Boolean isstart; </P> <p> Public soundsender (string groupaddress, int port, int bufferlength) {<br/> super (groupaddress, Port ); <Br/> audioformat format = new audioformat (8000,16, 2, true, true); <br/> dataline. info info = new dataline. info (targetdataline. class, format); <br/> try {<br/> line = (targetdataline) audiosystem. getline (Info); <br/> line. open (format, line. getbuffersize (); <br/>} catch (lineunavailableexception e) {<br/> E. printstacktrace (); <br/>}< br/> This. bufferlength = bufferlength; <br/> isstart = false; <br/>}</ P> <p> Public void run () {<br/> byte [] buffer = new byte [bufferlength]; <br/> while (isstart &&! Thread. isinterrupted () {<br/> line. read (buffer, 0, buffer. length); // write the data that receives the mic into the buffer <br/> send (buffer ); <br/>}</P> <p> Public void start () {<br/> If (thread = NULL |! Thread. isalive () {<br/> thread = new thread (this); <br/> line. start (); <br/> thread. start (); <br/> isstart = true; <br/>}</P> <p> Public void stop () {<br/> thread. interrupt (); <br/> line. stop (); <br/> isstart = false; <br/>}</P> <p >}< br/>
Package chat; </P> <p> Import javax. sound. sampled. *; <br/>/** <br/> */<br/> public class soundreceiver extends udpreceiver implements runnable {</P> <p> private sourcedataline line; <br/> private thread; <br/> private Boolean isstart; </P> <p> Public soundreceiver (string groupaddress, <br/> int port, <br/> int buffersize) {<br/> super (groupaddress, port, buffersize); <br/> audioformat format = new Udioformat (8000,16, 2, true, true); <br/> dataline. info info = new dataline. info (sourcedataline. class, format); <br/> try {<br/> line = (sourcedataline) audiosystem. getline (Info); <br/> line. open (format, 10240); <br/>} catch (lineunavailableexception e) {<br/> E. printstacktrace (); <br/>}</P> <p> Public void run () {<br/> while (isstart &&! Thread. isinterrupted () {<br/> byte [] DATA = super. receive (); <br/> line. write (data, 0, Data. length); // convert data to audio <br/>}</P> <p> Public void start () {<br/> If (thread = NULL |! Thread. isalive () {<br/> thread = new thread (this); <br/> line. start (); <br/> isstart = true; <br/> contect (); <br/> thread. start (); <br/>}</P> <p> Public void stop () {<br/> thread. interrupt (); <br/> line. stop (); <br/> isstart = false; <br/> close (); <br/>}< br/>
Package chat; </P> <p> Import Java. io. ioexception; <br/> Import java.net. *; </P> <p>/** <br/> * @ author chch87 <br/> * base class for sending UDP packets, extended messagesender and soundsender <br/> */</P> <p> public class udpsender {</P> <p> protected multicastsocket S; <br/> protected inetaddress group; <br/> protected int port; <br/> protected datagrampacket DGP; </P> <p> Public udpsender (string groupaddress, int port) {<br/> This. port = port; <B R/> try {<br/> S = new multicastsocket (); <br/> group = inetaddress. getbyname (groupaddress); // The Group must be a multicast group! For example, 231.0.0.1 <br/>} catch (ioexception e) {<br/> E. printstacktrace (); <br/>}< br/> DGP = new datagrampacket (New byte [0], 0, group, Port ); <br/>}</P> <p> Public void close () {<br/> If (s! = NULL) <br/> S. close (); <br/>}</P> <p> protected void send (byte [] buffer) {<br/> DGP. setdata (buffer); <br/> DGP. setlength (buffer. length); <br/> try {<br/> S. send (DGP); <br/>}catch (ioexception e) {<br/> E. printstacktrace (); <br/>}< br/>
Package chat; </P> <p> Import Java. io. ioexception; <br/> Import java.net. *; </P> <p>/** <br/> * @ author chch87 <br/> * base class for receiving UDP packets, extended messagereceiver and soundreceiver <br/> */<br/> public class udpreceiver {</P> <p> protected multicastsocket s; <br/> protected inetaddress group; <br/> protected byte [] buffer; <br/> protected datagrampacket DGP; <br/> protected int port; <br/> protected int buffersize; <br/> protected Boolean isclose; </P> <p> Public udpreceiver (string groupaddress, int port, int buffersize) {<br/> try {<br/> S = new multicastsocket (port); <br/> group = inetaddress. getbyname (groupaddress); // The Group must be a multicast group! For example, 231.0.0.1 <br/> S. joingroup (Group); <br/> // s. setloopbackmode (true); // during the LAN test, you can enable the disable callback <br/>} catch (ioexception e) {<br/> E. printstacktrace (); <br/>}< br/> buffer = new byte [buffersize]; <br/> DGP = new datagrampacket (buffer, buffersize ); <br/> isclose = false; <br/> This. port = port; <br/> This. buffersize = buffersize; <br/>}</P> <p> Public void close () {<br/> If (s! = NULL & group! = NULL) {<br/> try {<br/> S. leavegroup (Group); <br/> S. close (); <br/>}catch (ioexception e) {<br/> E. printstacktrace (); <br/>}< br/> isclose = true; <br/>}</P> <p> Public void contect () {<br/> If (isclose) {<br/> try {<br/> S = new multicastsocket (port); <br/> S. joingroup (Group); <br/>} catch (ioexception e) {<br/> E. printstacktrace (); <br/>}< br/> buffer = new byte [buffersize]; <br/> DGP = new datagrampacket (buffer, buffersize ); <br/> isclose = false; <br/>}</P> <p> protected byte [] receive () {<br/> try {<br/> S. receive (DGP); <br/>} catch (ioexception e) {<br/> E. printstacktrace (); <br/>}< br/> return buffer; <br/>}</P> <p> protected int getdgplength () {<br/> return DGP. getlength (); <br/>}</P> <p> protected string getip () {<br/> return DGP. getaddress (). tostring (); <br/>}</P> <p >}< br/>