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) {
}
}
}
<iframe width="490" scrolling="no" height="150" frameborder="0" align="middle" marginwidth="0" marginheight="0" src="http://www.blogbao.com/script.aspx?userid=45735&AdType=0&AdstyleID=46090&Direction=1" style="width: 490px; height: 150px;"></iframe>
混频器。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) {
}
}
}
<iframe width="490" scrolling="no" height="150" frameborder="0" align="middle" marginwidth="0" marginheight="0" src="http://www.blogbao.com/script.aspx?userid=45735&AdType=0&AdstyleID=46090&Direction=1" style="width: 490px; height: 150px;"></iframe>