java实现语音聊天_java 语音聊天核心代码
import java.io.*;
import javax.sound.sampled.*;
import java.net.*;
class Playback implements Runnable {
final int bufSize = 16384;
SourceDataLine line;
Thread thread;
Socket s;
Playback(Socket s){//构造器 取得socket以获得网络输入流
this.s=s;
}
public void start() {
thread = new Thread(this);
thread.setName("Playback");
thread.start();
}
public void stop() {
thread = null;
}
public void run() {
AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
BufferedInputStream playbackInputStream;
try {
playbackInputStream=new BufferedInputStream(new AudioInputStream(s.getInputStream(),format,2147483647));//封装成音频输出流,如果网络流是经过压缩的需在此加套解压流
}
catch (IOException ex) {
return;
}
DataLine.Info info = new DataLine.Info(SourceDataLine.class,format);
try {
line = (SourceDataLine) AudioSystem.getLine(info);
line.open(format, bufSize);
} catch (LineUnavailableException ex) {
return;
}
byte[] data = new byte[1024];//此处数组的大小跟实时性关系不大,可根据情况进行调整
int numBytesRead = 0;
line.start();
while (thread != null) {
try{
numBytesRead = playbackInputStream.read(data);
line.write(data, 0,numBytesRead);
} catch (IOException e) {
break;
}
}
if (thread != null) {
line.drain();
}
line.stop();
line.close();
line = null;
}
}
//音频捕获部分,
import java.io.*;
import javax.sound.sampled.*;
import java.net.*;
/**
* Title: VoiceChat
* Description: 音频捕捉(录音程序)
* Copyright: Copyright (c) 2001
*/
class Capture implements Runnable {
TargetDataLine line;
Thread thread;
Socket s;
BufferedOutputStream captrueOutputStream;
Capture(Socket s){//构造器 取得socket以获得网络输出流
this.s=s;
}
public void start() {
thread = new Thread(this);
thread.setName("Capture");
thread.start();
}
public void stop() {
thread = null;
}
public void run() {
try {
captrueOutputStream=new BufferedOutputStream(s.getOutputStream());//建立输出流 此处可以加套压缩流用来压缩数据
}
catch (IOException ex) {
return;
}
AudioFormat format =new AudioFormat(8000,16,2,true,true);//AudioFormat(float sampleRate, int sampleSizeInBits, int channels, boolean signed, boolean bigEndian)
DataLine.Info info = new DataLine.Info(TargetDataLine.class,format);
try {
line = (TargetDataLine) AudioSystem.getLine(info);
line.open(format, line.getBufferSize());
} catch (Exception ex) {
return;
}
byte[] data = new byte[1024];//此处的1024可以情况进行调整,应跟下面的1024应保持一致
int numBytesRead=0;
line.start();
while (thread != null) {
numBytesRead = line.read(data, 0,128);//取数据(1024)的大小直接关系到传输的速度,一般越小越快,
try {
captrueOutputStream.write(data, 0, numBytesRead);//写入网络流
}
catch (Exception ex) {
break;
}
}
line.stop();
line.close();
line = null;
try { captrueOutputStream.flush(); captrueOutputStream.close(); } catch (IOException ex) { ex.printStackTrace(); } } }
java实现语音聊天_java 语音聊天核心代码相关推荐
- java并发 cpu高_java高并发核心要点|系列5|CPU内存伪共享
上节提到的:伪共享,今天我们来说说. 那什么是伪共享呢? 这得从CPU的缓存结构说起.以下如图,CPU一般来说是有三级缓存,1 级,2级,3级,越上面的,越靠近CPU的,速度越快,成本也越高.也就是说 ...
- JAVA里tokens意思_Java TokenMetadata.sortedTokens方法代码示例
import org.apache.cassandra.locator.TokenMetadata; //导入方法依赖的package包/类 /** * Get the "primary r ...
- java 实现自旋锁_java自旋锁的代码实现
自旋锁:spinlock 是指尝试获取锁的线程不会立即阻塞,而是采用循环的方式获取锁,这样的好处是减少线程上下文切换的消耗,缺点是循环好用CPU 代码: import java.util.concur ...
- java构造函数重载继承_Java基础-继承 - 写代码换盆的个人空间 - OSCHINA - 中文开源技术交流社区...
访问权限 Java 中有三个访问权限修饰符:private.protected 以及 public,如果不加访问修饰符,表示包级可见. 可以对类或类中的成员(字段和方法)加上访问修饰符. 类可见表示其 ...
- java二重循环计数_java的二重循环代码样例
1.计算三个班的平均分 import java.util.Scanner; public class AvgScore{ public static void main (Sting[] args){ ...
- java 自定义登录态_java – 自定义HTTP状态代码
我考虑在一个项目中使用fluent-http. 我从一个简单的"登录/密码"页面开始.我用字段登录名和密码创建一个简单的POJO: public class LoginReques ...
- java实现qq抢红包_java实现 pta 抢红包代码
pta 抢红包代码 java实现pta抢红包代码,因为超时,没有办法跑完所有测试,只能拿到19分. import java.util.ArrayList; import java.util.Array ...
- java 编码 正弦计算器_Java 简单功能计算器代码
带界面的计算机: JAVA编写. package com.ALiangJie.Calculator; import javax.swing.*; import java.awt.*; import j ...
- java gui构造工具_Java Web框架 静态代码块、构造代码块、构造函数、普通代码块 执行顺序 Decompiler JD-GUI 反编译工具...
1.下载jd-gui-windows-1.4.0. http://jd.benow.ca/ 2.通过jd-gui.exe查看.class文件,用于分析类编译过程. 3.源文件. // 加载相应的 He ...
最新文章
- python元组(tuple)使用示例+常用方法+列表(list)和元组(tuple)的异同?
- Java中的锁[原理、锁优化、CAS、AQS]
- Codeforces Round #506 (Div. 3) - F. Multicolored Markers (思维)
- 如何确保sublime text每次启动时不会自动打开以前打开的文档
- java调用c的sdk_如何使用java调用c++的sdk动态库 sdk已存在 java方法怎么写? 怎么调用??在线等!!!...
- zbrush 添加纹理贴图_想学习3D游戏模型,3Dmax、MAYA和ZBrush都需要掌握吗?
- 树:二叉树的非递归遍历算法
- 共享单车变身“行走的弹幕”,清华大学等17所高校均有投放
- 几个有趣的Javascript Hack
- matlab 仿真光学实验报告,光学信息处理实验的Matlab仿真.doc
- 理性讨论: 《崩坏3》是不是目前打击感最好的动作手游?
- oracle dbms_lob trim,DBMS_LOB
- 推荐系统入门实践:世纪佳缘会员推荐(完整版)
- 【svn】svn的Replacing来历及解决办法
- 工匠精神消失的手机2020:衰落、变局、绝唱、破圈
- 取消键盘Fn功能键方式
- 计算机网络基础:OSI模型与TCP/IP协议的关系
- ai作文批改_作文批改功能,AI,你可以在批改记录中看到自己每次的进步
- Qt 窗口置顶与取消
- 2022云南最新道路运输安全员考试题库及答案