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>
更多文章、技術交流、商務合作、聯系博主
微信掃碼或搜索:z360901061

微信掃一掃加我為好友
QQ號聯系: 360901061
您的支持是博主寫作最大的動力,如果您喜歡我的文章,感覺我的文章對您有幫助,請用微信掃描下面二維碼支持博主2元、5元、10元、20元等您想捐的金額吧,狠狠點擊下面給點支持吧,站長非常感激您!手機微信長按不能支付解決辦法:請將微信支付二維碼保存到相冊,切換到微信,然后點擊微信右上角掃一掃功能,選擇支付二維碼完成支付。
【本文對您有幫助就好】元
