java语音播放事例

AudioSystem类充当取样音频系统资源的入口点。此类允许查询和安装在系统上的

混频器。AudioSystem包括许多在不同格式间转换音频数据的方法,以及在音频文

件和流文件之间进行转换的方法。它还提供不用显式处理混频器即可直接从

AudioSystem获得Line的方法

AudioFormat 是在声音流中指定特定数据安排的类。通过检查以音频格式存储的信息,可以发现在二进制声音数据中解释位的方式。

Line.Info类
   Line.Info对象包含关于行的信息。只有Line.Info本身提供的信息是该行的Java类。Line.Info子类添加该行的其他种类的信息。这些附加信息取决于通过Line.Info子类所描述的行种类实现的Line子接口。

DataLine.Info类
  除了继承自超类Line.Info的类信息以外,DataLine.Info还提供特定于数据行的其他信息。这些信息包括:受数据行支持的音频格式  其内部缓冲区的最大和最小

接口SourceDataLine
   源数据行是可以写入数据的数据行。它充当其混频器的源。应用程序将音频字节写入源数据行,这样可处理字节缓冲并将它们传给混频器。混频器可以将这些样本与取自其他源的样本混合起来,然后将该混合物传递到输出端口之类的目标(它可表示声卡上的音频输出设备)


程序事例:

import java.io.File;

import javax.sound.sampled.AudioFormat;
import javax.sound.sampled.AudioInputStream;
import javax.sound.sampled.AudioSystem;
import javax.sound.sampled.DataLine;
import javax.sound.sampled.SourceDataLine;

public class Playtest {

    /**
     * @param args
     */
    public static void main(String[] args) {
        // TODO Auto-generated method stub
        try {
            AudioInputStream ais = AudioSystem.getAudioInputStream(new File(
                    "c:\\abc.wav"));// 获得音频输入流
            AudioFormat baseFormat = ais.getFormat();// 指定声音流中特定数据安排
            System.out.println("baseFormat="+baseFormat);
            DataLine.Info info = new DataLine.Info(SourceDataLine.class,
                    baseFormat);
            System.out.println("info="+info);
            SourceDataLine line = (SourceDataLine) AudioSystem.getLine(info);
            // 从混频器获得源数据行
            System.out.println("line="+line);
            line.open(baseFormat);// 打开具有指定格式的行,这样可使行获得所有所需的系统资源并变得可操作。
            line.start();// 允许数据行执行数据 I/O
            int BUFFER_SIZE = 4000 * 4;
            int intBytes = 0;
            byte[] audioData = new byte[BUFFER_SIZE];
            while (intBytes != -1) {
                intBytes = ais.read(audioData, 0, BUFFER_SIZE);// 从音频流读取指定的最大数量的数据字节,并将其放入给定的字节数组中。
                if (intBytes >= 0) {
                    int outBytes = line.write(audioData, 0, intBytes);// 通过此源数据行将音频数据写入混频器。
                }
            }

        } catch (Exception e) {

        }
    }
}


 

 

你可能感兴趣的:(java)