开放性实验实验报告
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
基于JAVA的语音、图像信号处理系统
实验报告
学院:信息与电子工程学院
班级:软件工程092
学号:109029041
姓名:钱枫
指导教师:宋起文
二O一一年十二月
一.课程设计原理
开发语言:Java(J2SE)
开发平台:MyEclipse
开发背景:J ava中提供的套接字功能为通信系统的实现提供了基础,通过IO的流传输具体实现了数据的实时传输,javax.sound.sampled 类提供了读取、写入声卡数据的具体方法。
1.套接字:
客户端Socket:Socket(InetAddress host,int port):声明一个连接到某地址的主机内的相应端口的套接字。工作完毕后,使用流对象的close()方法关闭网络通信的输入输出流,用Socket对象的close()方法关闭套接字;
服务端的ServerSocket:ServerSocket(int port,int backlog):声明一个有相应端口被申请的服务器套接字,backlog表示在序列里等待连接的客户端数目,若等待数超过backlog值,则客户端的连接被拒绝,若未声明具体值,则默认随机选择一空闲端口。工作完毕后,使用流对象的close()方法关闭网络通信的输入输出流,用ServerSocket对象的close()方法关闭套接字。
2.输入、输出流:
New BufferedWriter(new OutputStreamWriter(socket2.getOutputStream())):
向套接字的输出数据流写入格式化的数据;
new BufferedReader(new InputStreamReader(socket2.getInputStream())):
从套接字的输入数据流读取格式化的数据。
2.javax.sound.sampled类接口和方法:
new AudioFormat(8000.0f, 8, 2, true, true):设置音频数据格式;TargetDataLine接口:从音频捕获设备获取其数据的数据行;SourceDataLine接口:将音频字节写入设备源数据行;targetDataLine.read(byte[] b, int off, int len):从数据行的输入缓冲区读取音频数据;
sourceDataLine.write(byte[] b, int off, int len):通过此源数据行将音频数据写入混频器。
二.源代码:
客户端部分:
package Communication;
import java.awt.*;
import java.awt.event.*;
import .*;
import javax.swing.*;
import java.io.*;
import javax.sound.sampled.*;
class Volume extends Thread {
private Client tcpClient;
public boolean isConn;
public Volume(Client _tcpClient) {
tcpClient = _tcpClient;
}
public void run() {
StringBuffer sb;
while (isConn) {
sb = new StringBuffer();
int r = (int) (Math.random() * 51);
for (int i = 0; i < r; i++) {
sb.append('.');
}
tcpClient.V oiceSpectrum.setText(sb.toString());
try {
sleep(200);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
tcpClient.V oiceSpectrum.setText(null);
}
}
class ClientThread extends Thread {
private Client tcpClient;
private Volume volume;
private Socket socket;
private OutputStream output;
private InputStream input;
private TargetDataLine targetLine;
private SourceDataLine sourceLine;
private boolean isConn;
public ClientThread(Client _tcpClient) {
tcpClient = _tcpClient;
}
public void run() {
try {
socket = new Socket("localhost", 9999);
} catch (Exception e) {
JOptionPane.showMessageDialog(tcpClient.frame,
"语音服务未开启", "错误", JOptionPane.ERROR_MESSAGE);
tcpClient.tglbtnConn.doClick();
return;