|
马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。
您需要 登录 才可以下载或查看,没有帐号?立即注册
x
因为能用到多少功能就用多少,不能用就不用!总的来说:要简单要性能好,可以不用框架。你说java复杂,就是因为你把java(j2ee)与这些框架混在了一起。
这是我本来用过的两段代码,输入音频和捕捉音频。
机关器里的socket是用来承受来自收集的音频数据。不做收集音频能够往失落它。
但愿能与人人分享履历。8-)
importjava.io.*;
importjavax.sound.sampled.*;
importjava.net.*;
/**
*Title:VoiceChat
*Description:输入音频(放音程序)
*Copyright:Copyright(c)2001
*Company:
*@author你猜!
*@version1.0
*/
classPlaybackimplementsRunnable{
finalintbufSize=16384;
SourceDataLineline;
Threadthread;
Sockets;
Playback(Sockets){//机关器获得socket以取得收集输出流
this.s=s;
}
publicvoidstart(){
thread=newThread(this);
thread.setName("Playback");
thread.start();
}
publicvoidstop(){
thread=null;
}
publicvoidrun(){
AudioFormatformat=newAudioFormat(8000,16,2,true,true);//AudioFormat(floatsampleRate,intsampleSizeInBits,intchannels,booleansigned,booleanbigEndian)
BufferedInputStreamplaybackInputStream;
try{
playbackInputStream=newBufferedInputStream(newAudioInputStream(s.getInputStream(),format,2147483647));//封装成音频输入流,假如收集流是经由紧缩的需在此加套解压流
}
catch(IOExceptionex){
return;
}
DataLine.Infoinfo=newDataLine.Info(SourceDataLine.class,format);
try{
line=(SourceDataLine)AudioSystem.getLine(info);
line.open(format,bufSize);
}catch(LineUnavailableExceptionex){
return;
}
byte[]data=newbyte[1024];//此处数组的巨细跟及时性干系不年夜,可依据情形举行调剂
intnumBytesRead=0;
line.start();
while(thread!=null){
try{
numBytesRead=playbackInputStream.read(data);
line.write(data,0,numBytesRead);
}catch(IOExceptione){
break;
}
}
if(thread!=null){
line.drain();
}
line.stop();
line.close();
line=null;
}
}
importjava.io.*;
importjavax.sound.sampled.*;
importjava.net.*;
/**
*Title:VoiceChat
*Description:音频捕获(灌音程序)
*Copyright:Copyright(c)2001
*Company:
*@author你猜!
*@version1.0
*/
classCaptureimplementsRunnable{
TargetDataLineline;
Threadthread;
Sockets;
BufferedOutputStreamcaptrueOutputStream;
Capture(Sockets){//机关器获得socket以取得收集输入流
this.s=s;
}
publicvoidstart(){
thread=newThread(this);
thread.setName("Capture");
thread.start();
}
publicvoidstop(){
thread=null;
}
publicvoidrun(){
try{
captrueOutputStream=newBufferedOutputStream(s.getOutputStream());//创建输入流此处能够加套紧缩流用来紧缩数据
}
catch(IOExceptionex){
return;
}
AudioFormatformat=newAudioFormat(8000,16,2,true,true);//AudioFormat(floatsampleRate,intsampleSizeInBits,intchannels,booleansigned,booleanbigEndian)
DataLine.Infoinfo=newDataLine.Info(TargetDataLine.class,format);
try{
line=(TargetDataLine)AudioSystem.getLine(info);
line.open(format,line.getBufferSize());
}catch(Exceptionex){
return;
}
byte[]data=newbyte[1024];//此处的1024能够情形举行调剂,应跟上面的1024应坚持分歧
intnumBytesRead=0;
line.start();
while(thread!=null){
numBytesRead=line.read(data,0,1024);//取数据(1024)的巨细间接干系到传输的速率,一样平常越小越快,
try{
captrueOutputStream.write(data,0,numBytesRead);//写进收集流
}
catch(Exceptionex){
break;
}
}
line.stop();
line.close();
line=null;
try{
captrueOutputStream.flush();
captrueOutputStream.close();
}catch(IOExceptionex){
ex.printStackTrace();
}
}
}
为什么外国人还要写那些框架进行代码封装,他们不就是为了别人使用时可以更简单么!如果要达到一个企业级项目的不用框架是很难的。小一些的项目还行,大的光是MVC模式的设计的编码量就够大的了。还有性能方面,单轮windows,这个工具是微软写的,。 |
|