Your Ad Here
首页 | 编程语言 | 网站建设 | 游戏天堂 | 冲浪宝典 | 网络安全 | 操作系统 | 软件时空 | 硬件指南 | 病毒相关 | IT 认证
软讯网络 > 编程语言 > Java > 利用java录制音频文件
【标  题】:利用java录制音频文件
【关键字】:java
【来  源】:http://blog.csdn.net/zhangjunhd/archive/2006/11/02/1363416.aspx

利用java录制音频文件

Your Ad Here

利用java录制音频文件

本文主要使用javax.sound.sample的类和接口来实现录制音频的功能。并给出一个实例。(实例参考自jsresources.org

@Author:JZhang 06-11-2

E-mail:zhangjunhd@gmail.com

Blog: http://blog.csdn.net/zhangjunhd/

 

AudioSystemwrite方法:

  Public static int write(AudioInputSystem stream,AudioFileFormat.Type fileType,File out)

                   Throws IOException

将表示指定文件类型的音频文件的字节流写入所提供的外部文件。

参数:

  stream----包含要写入文件的音频数据的音频输入流

  fileType----要写入的音频文件的种类

  out----应将文件数据写入其中的外部文件

 

实现具体步骤:

1.  指定一个待存储音频数据的音频文件

File outputFile=new File(“文件名”);

 

2.  指定待存储的音频数据的格式

AudioFormat audioFormat=new AudioFormat(“指定一种编码格式”);

 

3.  创建一个目标数据行,并指定音频数据相关格式

TargetDataLine targetDataLine=null;

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

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

 

4.  定义音频文件类型

AudioFileFormat.Type targetType=AudioFileFormat.Type.WAVE;

 

5.  调用write方法

 

具体流程

 

 

一个实例

 

/*
 * Copyright (c) 1999 - 2001 by Matthias Pfisterer
 * All rights reserved.
*/

import java.io.IOException;

import java.io.File;

 

import javax.sound.sampled.DataLine;

import javax.sound.sampled.TargetDataLine;

import javax.sound.sampled.AudioFormat;

import javax.sound.sampled.AudioSystem;

import javax.sound.sampled.AudioInputStream;

import javax.sound.sampled.LineUnavailableException;

import javax.sound.sampled.AudioFileFormat;

 

public class SimpleAudioRecorder

extends Thread

{

       private TargetDataLine          m_line;

       private AudioFileFormat.Type       m_targetType;

       private AudioInputStream      m_audioInputStream;

       private File                    m_outputFile;

 

       public SimpleAudioRecorder(TargetDataLine line,

                                 AudioFileFormat.Type targetType,

                                 File file)

       {

              m_line = line;

              m_audioInputStream = new AudioInputStream(line);

              m_targetType = targetType;

              m_outputFile = file;

       }

 

      

       public void start()

       {

             

              m_line.start();

             

              super.start();

       }

 

       public void stopRecording()

       {

              m_line.stop();

              m_line.close();

       }

 

      

       public void run()

       {

                     try

                     {

                            AudioSystem.write(

                                   m_audioInputStream,

                                   m_targetType,

                                   m_outputFile);

                     }

                     catch (IOException e)

                     {

                            e.printStackTrace();

                     }

       }

 

       public static void main(String[] args)

       {

              if (args.length != 1 || args[0].equals("-h"))

              {

                     printUsageAndExit();

              }

             

              String      strFilename = args[0];

              File  outputFile = new File(strFilename);

 

              /*使用编码格式: PCM 44.1 kHz, 16 bit signed,

                 stereo.

              */

              AudioFormat   audioFormat = new AudioFormat(

                     AudioFormat.Encoding.PCM_SIGNED,

                     44100.0F, 16, 2, 4, 44100.0F, false);

 

             

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

              TargetDataLine       targetDataLine = null;

              try

              {

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

                     targetDataLine.open(audioFormat);

              }

              catch (LineUnavailableException e)

              {

                     out("unable to get a recording line");

                     e.printStackTrace();

                     System.exit(1);

              }

             

              AudioFileFormat.Type    targetType = AudioFileFormat.Type.WAVE;

             

              SimpleAudioRecorder    recorder = new SimpleAudioRecorder(

                     targetDataLine,

                     targetType,

                     outputFile);

 

              /* 用户按下回车,开始录音。

              */

              out("Press ENTER to start the recording.");

              //由于键盘输入ENTER将返回两个值,分别为1310.所以执行两次System.in.read();

              try

              {

                     /*int s=*/System.in.read();

                     //System.out.println("test1:"+s);

              }

              catch (IOException e)

              {

                     e.printStackTrace();

              }

              try

              {

                     /*int s=*/System.in.read();

                     //System.out.println("test1:"+s);

              }

              catch (IOException e)

              {

                     e.printStackTrace();

              }

              /* 此处,开始录音。

               */

              recorder.start();

              out("Recording...");

 

              /*用户按下回车,停止录音。

              */

              out("Press ENTER to stop the recording.");

              try

              {

                     int s=System.in.read();

                     System.out.println("test2"+s);

              }

              catch (IOException e)

              {

                     e.printStackTrace();

              }

 

              recorder.stopRecording();

              out("Recording stopped.");

       }

 

       private static void printUsageAndExit()

       {

              out("SimpleAudioRecorder: usage:");

              out("\tjava SimpleAudioRecorder -h");

              out("\tjava SimpleAudioRecorder <audiofile>");

              System.exit(0);

       }

 

       private static void out(String strMessage)

       {

              System.out.println(strMessage);

       }

}

 
JSP课程复习资料(1)——几个名词解释:【上一篇】
POI使用【z】:【下一篇】
【相关文章】
  • 如何设定执行Java的Linux安全环境
  • JAVA入门学习资料
  • JAVA生成缩略图
  • java验证码类
  • java生成jpg图片
  • Java游戏学习
  • java 去掉字符串中的'\'字符
  • 一网友(sixsun)的java笔记
  • 应聘JAVA程序员
  • java - finalize
  • 【随机文章】
  • 创建通用的HttpRequest对象
  • Delphi让你发送Flash电子邮件
  • Fedora core5中添加源sourcelist,使用yum管理包
  • socket例子实现
  • sco unixware使用点滴
  • 比较器(Comparator)实例
  • IPV6 中6所指何物
  • 发现一个有用的js事件onpropertychange
  • Oracle 8i 到 9i 升级之路
  • QQ被盗这样找回来[鉴于好友的QQ被盗]
  • 【相关评论】
    没有相关评论
    【发表评论】
    姓名:
    邮件:
    随机码*
    评论*
          
    |  首 页  |  版权声明  |  联系我们   |  网站地图  |
    CopyRight © 2004-2007 软讯网络 All Rigths Reserved.