AudioSystem類充當(dāng)取樣音頻系統(tǒng)資源的入口點。此類允許查詢和安裝在系統(tǒng)上的
混頻器。AudioSystem包括許多在不同格式間轉(zhuǎn)換音頻數(shù)據(jù)的方法,以及在音頻文
件和流文件之間進行轉(zhuǎn)換的方法。它還提供不用顯式處理混頻器即可直接從
AudioSystem獲得Line的方法
AudioFormat 是在聲音流中指定特定數(shù)據(jù)安排的類。通過檢查以音頻格式存儲的信息,可以發(fā)現(xiàn)在二進制聲音數(shù)據(jù)中解釋位的方式。
Line.Info類
Line.Info對象包含關(guān)于行的信息。只有Line.Info本身提供的信息是該行的Java類。Line.Info子類添加該行的其他種類的信息。這些附加信息取決于通過Line.Info子類所描述的行種類實現(xiàn)的Line子接口。
DataLine.Info類
除了繼承自超類Line.Info的類信息以外,DataLine.Info還提供特定于數(shù)據(jù)行的其他信息。這些信息包括:受數(shù)據(jù)行支持的音頻格式 其內(nèi)部緩沖區(qū)的最大和最小
接口SourceDataLine
源數(shù)據(jù)行是可以寫入數(shù)據(jù)的數(shù)據(jù)行。它充當(dāng)其混頻器的源。應(yīng)用程序?qū)⒁纛l字節(jié)寫入源數(shù)據(jù)行,這樣可處理字節(jié)緩沖并將它們傳給混頻器。混頻器可以將這些樣本與取自其他源的樣本混合起來,然后將該混合物傳遞到輸出端口之類的目標(biāo)(它可表示聲卡上的音頻輸出設(shè)備)
程序事例:
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();// 指定聲音流中特定數(shù)據(jù)安排
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);
// 從混頻器獲得源數(shù)據(jù)行
System.out.println("line="+line);
line.open(baseFormat);// 打開具有指定格式的行,這樣可使行獲得所有所需的系統(tǒng)資源并變得可操作。
line.start();// 允許數(shù)據(jù)行執(zhí)行數(shù)據(jù) 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);// 從音頻流讀取指定的最大數(shù)量的數(shù)據(jù)字節(jié),并將其放入給定的字節(jié)數(shù)組中。
if (intBytes >= 0) {
int outBytes = line.write(audioData, 0, intBytes);// 通過此源數(shù)據(jù)行將音頻數(shù)據(jù)寫入混頻器。
}
}
} 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包括許多在不同格式間轉(zhuǎn)換音頻數(shù)據(jù)的方法,以及在音頻文
件和流文件之間進行轉(zhuǎn)換的方法。它還提供不用顯式處理混頻器即可直接從
AudioSystem獲得Line的方法
AudioFormat 是在聲音流中指定特定數(shù)據(jù)安排的類。通過檢查以音頻格式存儲的信息,可以發(fā)現(xiàn)在二進制聲音數(shù)據(jù)中解釋位的方式。
Line.Info類
Line.Info對象包含關(guān)于行的信息。只有Line.Info本身提供的信息是該行的Java類。Line.Info子類添加該行的其他種類的信息。這些附加信息取決于通過Line.Info子類所描述的行種類實現(xiàn)的Line子接口。
DataLine.Info類
除了繼承自超類Line.Info的類信息以外,DataLine.Info還提供特定于數(shù)據(jù)行的其他信息。這些信息包括:受數(shù)據(jù)行支持的音頻格式 其內(nèi)部緩沖區(qū)的最大和最小
接口SourceDataLine
源數(shù)據(jù)行是可以寫入數(shù)據(jù)的數(shù)據(jù)行。它充當(dāng)其混頻器的源。應(yīng)用程序?qū)⒁纛l字節(jié)寫入源數(shù)據(jù)行,這樣可處理字節(jié)緩沖并將它們傳給混頻器。混頻器可以將這些樣本與取自其他源的樣本混合起來,然后將該混合物傳遞到輸出端口之類的目標(biāo)(它可表示聲卡上的音頻輸出設(shè)備)
程序事例:
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();// 指定聲音流中特定數(shù)據(jù)安排
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);
// 從混頻器獲得源數(shù)據(jù)行
System.out.println("line="+line);
line.open(baseFormat);// 打開具有指定格式的行,這樣可使行獲得所有所需的系統(tǒng)資源并變得可操作。
line.start();// 允許數(shù)據(jù)行執(zhí)行數(shù)據(jù) 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);// 從音頻流讀取指定的最大數(shù)量的數(shù)據(jù)字節(jié),并將其放入給定的字節(jié)數(shù)組中。
if (intBytes >= 0) {
int outBytes = line.write(audioData, 0, intBytes);// 通過此源數(shù)據(jù)行將音頻數(shù)據(jù)寫入混頻器。
}
}
} 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>
更多文章、技術(shù)交流、商務(wù)合作、聯(lián)系博主
微信掃碼或搜索:z360901061

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