如何捕获音频及输出音频

这是我原来用过的两段代码,输出音频和捕获音频。
构造器里的socket是用来接受来自网络的音频数据。不做网络音频可以去掉它。

希望能与大家分享经验。8-)

import java.io.*;
import javax.sound.sampled.*;
import java.net.*;

/**
* Title:        VoiceChat
* Description:  输出音频(放音程序)
* Copyright:    Copyright (c) 2001
* Company:
* @author       你猜!
* @version 1.0
*/

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
* Company:
* @author       你猜!
* @version 1.0
*/

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,1024);//取数据(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();
           }
       }

时间: 2024-12-04 14:49:20

如何捕获音频及输出音频的相关文章

如何捕获音频及输出音频。

这是我原来用过的两段代码,输出音频和捕获音频.构造器里的socket是用来接受来自网络的音频数据.不做网络音频可以去掉它.希望能与大家分享经验.8-)import java.io.*; import javax.sound.sampled.*; import java.net.*; /** * Title:        VoiceChat * Description:  输出音频(放音程序) * Copyright:    Copyright (c) 2001 * Company: * @au

volume table-蓝牙模块开发音频音乐输出中,如何调大模块的音频输出?

问题描述 蓝牙模块开发音频音乐输出中,如何调大模块的音频输出? 现在在做蓝牙模块开发,在使用CSR公司提供的Music Manager工具调音频的效果.其中有一项是"Speak Gain Settings",而这一项中的最大值为 0-F(0dB,音量大小为+15).现在我想要蓝牙模块输出为2dB(手机连接蓝牙模块后,手机播放1KHZ 0dB的测试信号,从模块中音频输出经电容去掉直流后的信号为2dB),我把其调到最大值0-F时输出的dB仍太小.我就在想是否有一个工具或者什么方法是否能加大

jtextarea-log4j2 ,怎么能捕获它的输出,然后显示到swing组件中呢

问题描述 log4j2 ,怎么能捕获它的输出,然后显示到swing组件中呢 项目中使用log4j2作日志 ,但要求在swing界面中同步显示最新的信息,怎么能捕获它的输出,然后显示到swing组件中呢 解决方案 http://blog.csdn.net/silence1214/article/details/6451820

获取数据-采集到音频或者读取音频文件获取到数据怎么通过live555处理发送出去

问题描述 采集到音频或者读取音频文件获取到数据怎么通过live555处理发送出去 用live555把通过网络摄像头获取视频发送到远端实现了,现在想用live555读取.acc文件获取音频数据然后打包发送出去,应该怎么做??? 解决方案 顶一个!坐等高人

JS中捕获console.log()输出的方法_javascript技巧

本文实例讲述了JS中捕获console.log()输出的方法.分享给大家供大家参考.具体分析如下: 我们知道console.log()可以将信息输出到debugger中供开发者查看.但如果我们想要在JS中获取console.log()的输出结果呢?其实不难,先将原本的console.log保存起来,然后替换成另外一个实现即可.代码如下: var lastLog; console.oldLog = console.log; console.log = function(str) { console

Windowsxp系统下怎样让音频从光驱音频输出

  1.在"我的电脑"上右键,选择"属性"项,打开系统属性窗口,切换到"硬件"标签页,点击"设备管理器"按钮,打开设备管理器窗口. 2.打开光驱子节点,右键点击光驱设备选择"属性"项,打开光驱属性窗口,点击"属性"标签页,将选项"为此CD-ROM设备启用数字CD音频"前的勾去掉. 3.依次点击"开始--程序--附件--娱乐",打开"Win

NVIDIA Jetson TK1学习与开发:如何解决输入和输出音频问题

若Jetson TK1的音频不能用,可以在终端输入以下命令,再次测试,就可以使用了.(注意:在Jetson TK1硬件上音频处,上面的是话筒,下面的是听筒). amixer cset name="Stereo ADC MIXL ADC2 Switch" 0 amixer cset name="Stereo ADC MIXR ADC2 Switch" 0 amixer cset name="Int Mic Switch" 0 amixer cset

VEGAS 5.0 音频新手入门——音频处理及DX音频插件简介

五课 音频处理及DX音频插件简介 通过上节课的学习,你可以完整地录到歌手的干净人声. 接下来就是对干净的人声进行音频处理,以获得最佳的听感. 对人声常用的音频处理一般包括以下几个方面(注意顺序,很重要): 1.EQ:也就是均衡,因为话筒的拾音频响曲线差异的以及歌手嗓音特征差异,一般根据录出的人声实际效果作适当处理,比如有的歌手声音太尖,有的听起来很闷,有的鼻音很重,有的唇齿音很重,这些都是由于声音各频段的强弱不均衡造成的听觉差异.可以通过EQ对各频段的声音信号均衡(增减)处理,能起到改善作用.

程序+文件用音频传输-使用音频传输大文件可行性问题

问题描述 使用音频传输大文件可行性问题 两台电脑只用音频传输一个文件.一头把文件转码成音频.另一头把音频读取并转码成为文件. 用程序解决.