我创建了一个服务器应用程序,该应用程序从客户端接收声音,然后广播此声音,该声音以字节存储,然后将字节发送回连接到服务器的客户端。现在,我目前仅使用一个客户端进行测试,客户端正在接收语音,但是声音一直在卡顿。有人可以告诉我我做错了吗?

我想我理解为什么声音播放不流畅但不了解如何解决问题的部分原因。

代码是波纹管的。

客户端:

将声音发送到服务器的部分

public void captureAudio()

{

Runnable runnable = new Runnable(){

public void run()

{

first=true;

try {

final AudioFileFormat.Type fileType = AudioFileFormat.Type.AU;

final AudioFormat format = getFormat();

DataLine.Info info = new DataLine.Info(TargetDataLine.class, format);

line = (TargetDataLine)AudioSystem.getLine(info);

line.open(format);

line.start();

int bufferSize = (int) format.getSampleRate()* format.getFrameSize();

byte buffer[] = new byte[bufferSize];

out = new ByteArrayOutputStream();

objectOutputStream = new BufferedOutputStream(socket.getOutputStream());

running = true;

try {

while (running) {

int count = line.read(buffer, 0, buffer.length);

if (count > 0) {

objectOutputStream.write(buffer, 0, count);

out.write(buffer, 0, count);

InputStream input = new ByteArrayInputStream(buffer);

final AudioInputStream ais = new AudioInputStream(input, format, buffer.length /format.getFrameSize());

}

}

out.close();

objectOutputStream.close();

}

catch (IOException e) {

System.exit(-1);

System.out.println("exit");

}

}

catch(LineUnavailableException e) {

System.err.println("Line Unavailable:"+ e);

e.printStackTrace();

System.exit(-2);

}

catch (Exception e) {

System.out.println("Direct Upload Error");

e.printStackTrace();

}

}

};

Thread t = new Thread(runnable);

t.start();

}

从服务器接收数据字节的部分

private void playAudio() {

//try{

Runnable runner = new Runnable() {

public void run() {

try {

InputStream in = socket.getInputStream();

Thread playTread = new Thread();

int count;

byte[] buffer = new byte[100000];

while((count = in.read(buffer, 0, buffer.length)) != -1) {

PlaySentSound(buffer,playTread);

}

}

catch(IOException e) {

System.err.println("I/O problems:" + e);

System.exit(-3);

}

}

};

Thread playThread = new Thread(runner);

playThread.start();

//}

//catch(LineUnavailableException e) {

//System.exit(-4);

//}

}//End of PlayAudio method

private void PlaySentSound(final byte buffer[], Thread playThread)

{

synchronized(playThread)

{

Runnable runnable = new Runnable(){

public void run(){

try

{

InputStream input = new ByteArrayInputStream(buffer);

final AudioFormat format = getFormat();

final AudioInputStream ais = new AudioInputStream(input, format, buffer.length /format.getFrameSize());

DataLine.Info info = new DataLine.Info(SourceDataLine.class, format);

sline = (SourceDataLine)AudioSystem.getLine(info);

sline.open(format);

sline.start();

Float audioLen = (buffer.length / format.getFrameSize()) * format.getFrameRate();

int bufferSize = (int) format.getSampleRate() * format.getFrameSize();

byte buffer2[] = new byte[bufferSize];

int count2;

ais.read( buffer2, 0, buffer2.length);

sline.write(buffer2, 0, buffer2.length);

sline.flush();

sline.drain();

sline.stop();

sline.close();

buffer2 = null;

}

catch(IOException e)

{

}

catch(LineUnavailableException e)

{

}

}

};

playThread = new Thread(runnable);

playThread.start();

}

}

java 音频电台_Java-通过Java套接字广播语音相关推荐

  1. Java套接字程序_java – 通过Web套接字进行应用程序到应用程序的通信

    我通过Web套接字(没有浏览器工作)获得应用程序到应用程序的通信有些麻烦.由于这似乎不是最常用的网络套接字应用程序,我想知道是否有人有这方面的经验. 为什么我要使用网络套接字? 由于防火墙问题,我需要 ...

  2. java 音频解码_java视频音频解码-封装xuggle-实现多种视频编码格式解码扩展

    手头做一个视频相关项目,但是客户发来的测试视频(avi格式) 现有组件不能解码.现有 视频解码组件方案有基于JMF和opencv Jni调用.远远不能满足目前市面上玲琅满目的各种视频编码 标准. 进行 ...

  3. java 音频转换_java实现音频转换

    这里需要用到第三方 ffmpeg.exe package com.convertaudio; import java.io.File; import java.util.ArrayList; impo ...

  4. stomp java客户端_Stomp-Spring服务器端的Web套接字Java客户端

    stomp java客户端 问题: 为了分析问题,我不得不编写一个简单的Java Web套接字客户端站点代码,并使用基于stomp的Web套接字代理连接到服务器端基于Spring的应用程序. 解决方案 ...

  5. java中套接字,如何在java中获得一个开放的套接字?

    在 Java中,我如何获得一个开放的套接字?我有2个JFrame;在第一个JFrame中,我打开了Client socket的连接.在同一个JFrame中,我创建了另一个JFrame(JFrame2) ...

  6. Java知多少(105)套接字(Socket)

    网络应用模式主要有: 主机/终端模式:集中计算,集中管理: 客户机/服务器(Client/Server,简称C/S)模式:分布计算,分布管理: 浏览器/服务器模式:利用Internet跨平台. www ...

  7. java flex xml文件_Flex xml套接字到Java xml套接字

    我需要在Java中创建一个与使用Flex实现的客户端具有相同功能的客户端. 在Flex中,客户端使用XMLSocket.send发送以下数据: .Net服务器接收并作出响应. 我正在尝试通过执行以下操 ...

  8. Java基础23 网络编程 socket套接字流 TCP传输总结

    一.网络编程的概念 1.计算机网络:将不同地区的计算机,使用网络来进行连接 实现不同地区的数据的交互与共享(互联时代) 2. 网络编程的三要素:IP地址 端口号 协议 3. ip地址:是在网络连接中 ...

  9. Java网编之:Socket套接字

    目录 一.Socket概念 二.Socket基本操作 三.Socket建立通信原理 四.服务器端:ServerSocket类 1.构造方法 2.常用方法 五.客户端与服务器端相互沟通:Socket类 ...

最新文章

  1. 02软件需求读书笔记(二)
  2. linux硬盘目录下,Linux 新添加的硬盘格式化并挂载到目录下
  3. kaggle比赛模型融合指南
  4. 虚拟主机6大骗术,站长朋友小心了
  5. 红外摄像机的功率究竟有多大
  6. java 定时器框架_java定时器
  7. 代码评审中的代码协同
  8. ubuntu安装maven_Linux操作系统下将项目发布到Maven中央仓库图文教程
  9. 用sql语句也样创建oracle,Oracle中用sql语句创建数据库
  10. Exception:must implement OnFragmentInteractionListener
  11. 初步学习CRM的感想
  12. 【完美解决方案】Error during artifact deployment. See server log for details.
  13. 泊松分布(Poisson Distribution)
  14. 我为什么既支持又反对接口用Map来传输数据?
  15. Excel表格模板打包下载┆收集了各类各行业Excel表格、word模板
  16. Apache PHP 的gzip压缩输出的实现方法
  17. Ubuntu中连不上网,百度 ping 不通
  18. Ubuntu 更新错误修复大全
  19. VENUE | S6L初次安装详细视频指南
  20. CCNA 2网络设备总结

热门文章

  1. Real-Time DNA Sequencing from Single Polymerase Molecules
  2. 改变div php,js改变div样式
  3. javascript requestAnimationFrame 解决 setTimeout、setInterval 时间不准的方法。
  4. 【Java挠头】继承、抽象、接口、多态、向上转型、向下转型等精妙干货
  5. EC2实例,EBS及EFS存储
  6. matlab门槛回归,重磅!这可能是最全的门槛回归汇总了
  7. java socket监控_ZeroMQ(java)中监控Socket
  8. dataset的去重计数 g2_去互联网公司面试,面试官问我SpringCloud,附答案
  9. c语言程序设计01,c语言程序设计01.doc
  10. Python的零基础超详细讲解(第十二天)-Python函数及使用