免费观看又色又爽又黄的小说免费_美女福利视频国产片_亚洲欧美精品_美国一级大黄大色毛片

java代碼生成聲音 javaparser 生成代碼

如何實(shí)現(xiàn)java中的聲音添加,播放等操作。

可以使用Applet組件,主要的代碼如下(缺點(diǎn)是能播放WAv格式的,還有其它格式,不過(guò)mp3不行,):

創(chuàng)新互聯(lián)建站是一家集網(wǎng)站設(shè)計(jì)、網(wǎng)站建設(shè)、網(wǎng)站頁(yè)面設(shè)計(jì)、網(wǎng)站優(yōu)化SEO優(yōu)化為一體的專(zhuān)業(yè)網(wǎng)站設(shè)計(jì)公司,已為成都等多地近百家企業(yè)提供網(wǎng)站建設(shè)服務(wù)。追求良好的瀏覽體驗(yàn),以探求精品塑造與理念升華,設(shè)計(jì)最適合用戶(hù)的網(wǎng)站頁(yè)面。 合作只是第一步,服務(wù)才是根本,我們始終堅(jiān)持講誠(chéng)信,負(fù)責(zé)任的原則,為您進(jìn)行細(xì)心、貼心、認(rèn)真的服務(wù),與眾多客戶(hù)在蓬勃發(fā)展的市場(chǎng)環(huán)境中,互促共生。

import java.applet.Applet;

import java.applet.AudioClip;

import java.awt.FlowLayout;

import java.awt.event.*;

import java.io.File;

import java.net.MalformedURLException;

//播放音樂(lè)按鈕

private JButton getPlayButton(){

if(playButton==null){

playButton=new JButton("播放");

playButton.addActionListener(new ActionListener(){

public void actionPerformed(ActionEvent e){

if(filePath.getText()!=null){

try{

if(audioClip!=null){

audioClip.stop();

}

audioClip=Applet.newAudioClip(new File(filePath.getText()).toURI().toURL());

audioClip.play();//播放

}//只需要添加一個(gè)File對(duì)象傳入文件路徑

catch(MalformedURLException ee){ee.printStackTrace();}

}

}

});

}

return playButton;

}

什么是Java小程序

(小應(yīng)用程序)

采用Java創(chuàng)建的基于HTML的程序。瀏覽器將其暫時(shí)下載到用戶(hù)的硬盤(pán)上,并在Web頁(yè)打開(kāi)時(shí)在本地運(yùn)行。

可通過(guò)因特網(wǎng)下載并在接收計(jì)算機(jī)上運(yùn)行的一小段程序。小應(yīng)用程序通常用Java語(yǔ)言編寫(xiě)并運(yùn)行在瀏覽器軟件中,applet典型用于為萬(wàn)維網(wǎng)網(wǎng)頁(yè)頁(yè)面定制或添加交互格式元素。Applet可以翻譯為小應(yīng)用程序,可通過(guò)因特網(wǎng)下載并在接收計(jì)算機(jī)上運(yùn)行的一小段程序。,Java Applet就是用Java語(yǔ)言編寫(xiě)的這樣的一些小應(yīng)用程序,它們可以直接嵌入到網(wǎng)頁(yè)中,并能夠產(chǎn)生特殊的效果。包含Applet的網(wǎng)頁(yè)被稱(chēng)為Java- powered頁(yè),可以稱(chēng)其為Java支持的網(wǎng)頁(yè)。

當(dāng)用戶(hù)訪(fǎng)問(wèn)這樣的網(wǎng)頁(yè)時(shí), Applet被下載到用戶(hù)的計(jì)算機(jī)上執(zhí)行,但前提是用戶(hù)使用的是支持Java的網(wǎng)絡(luò)l瀏覽器。由于Applet是在用戶(hù)的計(jì)算機(jī)上執(zhí)行的,因此它的執(zhí)行速度不受網(wǎng)絡(luò)帶寬或者M(jìn)odem存取速度的限制。用戶(hù)可以更好地欣賞網(wǎng)頁(yè)上Applet產(chǎn)生的多媒體效果。

在Java Applet中,可以實(shí)現(xiàn)圖形繪制,字體和顏色控制,動(dòng)畫(huà)和聲音的插入,人機(jī)交互及網(wǎng)絡(luò)交流等功能。 Applet還提供了名為抽象窗口工具箱(Abstract Window Toolkit, AWT)的窗口環(huán)境開(kāi)發(fā)工具。 AWT利用用戶(hù)計(jì)算機(jī)的GUI元素,可以建立標(biāo)準(zhǔn)的圖形用戶(hù)界面,如窗口、按鈕、滾動(dòng)條等等。目前,在網(wǎng)絡(luò)上有非常多的Applet范例來(lái)生動(dòng)地展現(xiàn)這些功能,讀者可以去調(diào)閱相應(yīng)的網(wǎng)頁(yè)以觀看它們的效果。

Applet的工作原理.

含有Applet的網(wǎng)頁(yè)的HTML文件代碼中部帶有applet 和/applet這樣一對(duì)標(biāo)記,當(dāng)支持Java的網(wǎng)絡(luò)瀏覽器遇到這對(duì)標(biāo)記時(shí),就將下載相應(yīng)的小應(yīng)用程序代碼并在本地計(jì)算機(jī)上執(zhí)行該Applet。

Java Applet 是用Java 語(yǔ)言編寫(xiě)的一些小應(yīng)用程序,這些程序是直接嵌入到頁(yè)面中,由支持Java的瀏覽器(IE 或 Nescape)解釋執(zhí)行能夠產(chǎn)生特殊效果的程序。它可以大大提高Web頁(yè)面的交互能力和動(dòng)態(tài)執(zhí)行能力。包含Applet的網(wǎng)頁(yè)被稱(chēng)為Java- powered頁(yè),可以稱(chēng)其為Java支持的網(wǎng)頁(yè)。

當(dāng)用戶(hù)訪(fǎng)問(wèn)這樣的網(wǎng)頁(yè)時(shí),Applet被下載到用戶(hù)的計(jì)算機(jī)上執(zhí)行,但前提是用戶(hù)使用的是支持Java的網(wǎng)絡(luò)瀏覽器。由于Applet是在用戶(hù)的計(jì)算機(jī)上執(zhí)行的,所以它的執(zhí)行速度不受網(wǎng)絡(luò)帶寬或者M(jìn)odem存取速度的限制,用戶(hù)可以更好地欣賞網(wǎng)頁(yè)上Applet產(chǎn)生的多媒體效果。

Applet 小應(yīng)用程序的實(shí)現(xiàn)主要依靠java.applet 包中的Applet類(lèi)。與一般的應(yīng)用程序不同,Applet應(yīng)用程序必須嵌入在HTML頁(yè)面中,才能得到解釋執(zhí)行;同時(shí)Applet可以從Web頁(yè)面中獲得參數(shù),并和Web頁(yè)面進(jìn)行交互。

含有Applet的網(wǎng)頁(yè)的HTML文件代碼中必須帶有applet和/applet這樣一對(duì)標(biāo)記,當(dāng)支持Java的網(wǎng)絡(luò)瀏覽器遇到這對(duì)標(biāo)記時(shí),就將下載相應(yīng)的小程序代碼并在本地計(jì)算機(jī)上執(zhí)行該Applet小程序。

Applet是一種Java的小程序,它通過(guò)使用該Applet的HTML文件,由支持Java的網(wǎng)頁(yè)瀏覽器下載運(yùn)行。也可以通過(guò)java開(kāi)發(fā)工具的 appletviewer來(lái)運(yùn)行。Applet 程序離不開(kāi)使用它的HTML文件。這個(gè)HTML文件中關(guān)于Applet的信息至少應(yīng)包含以下三點(diǎn):

1)字節(jié)碼文件名(編譯后的Java文件,以.class為后綴)

2)字節(jié)碼文件的地址

3)在網(wǎng)頁(yè)上顯示Applet的方式。

一個(gè)HTML文件增加Applet有關(guān)的內(nèi)容只是使網(wǎng)頁(yè)更加富有生氣,如添加聲音、動(dòng)畫(huà)等這些吸引人的特征,它并不會(huì)改變HTML文件中與Applet無(wú)關(guān)的元素。

(一) Applet程序開(kāi)發(fā)步驟

Applet程序開(kāi)發(fā)主要步驟如下:

1)選用EDIT或Windows Notepad等工具作為編輯器建立Java Applet源程序。

2)把Applet的源程序轉(zhuǎn)換為字節(jié)碼文件。

3)編制使用class 的HTML文件。在HTML文件內(nèi)放入必要的APPLET語(yǔ)句。

下面舉一個(gè)最簡(jiǎn)單的HelloWorld 例子來(lái)說(shuō)明Applet程序的開(kāi)發(fā)過(guò)程:

(1) 編輯Applet 的java源文件

創(chuàng)建文件夾C:\ghq,在該文件夾下建立 HelloWorld.java

文件的源代碼如下:

import java.awt.*;

import java.applet.*;

public class HelloWorld extends Applet //繼承Appelet類(lèi),這是Appelet Java程序的特點(diǎn)

{

public void paint(Graphics g )

{

g.drawString("Hello World!",5,35);

}

}

保存上述程序在C:\ghq\HelloWorld.java文件里。

(2)編譯Applet

編譯HelloWorld.java源文件可使用如下JDK命令:

C:\ghq\javac HelloWorld.javaEnter

注意:如果編寫(xiě)的源程序違反了Java編程語(yǔ)言的語(yǔ)法規(guī)則,Java編譯器將在屏幕上顯示語(yǔ)法錯(cuò)誤提示信息。源文件中必須不含任何語(yǔ)法錯(cuò)誤,Java編譯器才能成功地把源程序轉(zhuǎn)換為appletviewer和瀏覽器能夠執(zhí)行的字節(jié)碼程序。

成功地編譯Java applet之后生成響應(yīng)的字節(jié)碼文件HelloWorld.class的文件。用資源管理器或DIR命令列出目錄列表,將會(huì)發(fā)現(xiàn)目錄C:\ghq中多了一個(gè)名為HelloWorld.class的文件。

(3)創(chuàng)建HTML文件

在運(yùn)行創(chuàng)建的HelloWorld.class 之前,還需創(chuàng)建一個(gè)HTML文件,appletviewer或?yàn)g覽器將通過(guò)該文件訪(fǎng)問(wèn)創(chuàng)建的Applet。為運(yùn)行HelloWorld.class, 需要?jiǎng)?chuàng)建包含如下HTML語(yǔ)句的名為HelloWorld.html的文件。

HTML

TITLEHelloWorld! Applet/TITLE

APPLET

CODE="JavaWorld.class"

WIDTH=200

HEIGHT=100

/APPLET

/HTML

本例中,APPLET語(yǔ)句指明該Applet字節(jié)碼類(lèi)文件名和以像素為單位的窗口的尺寸。雖然這里HTML文件使用的文件名為 HelloWorld.HTML,它對(duì)應(yīng)于HelloWorld.java的名字,但這種對(duì)應(yīng)關(guān)系不是必須的,可以用其他的任何名字(比如說(shuō) Ghq.HTML)命名該HTML文件。但是使文件名保持一種對(duì)應(yīng)關(guān)系可給文件的管理帶來(lái)方便。

(4)執(zhí)行 HelloWorld.html

如果用appletviewer運(yùn)行HelloWorld.html,需輸入如下的命令行:

C:\ghq\appletviewer JavaWorld.htmlENTER

可以看出,該命令啟動(dòng)了appletviewer并指明了HTML文件,該HTML文件中包含對(duì)應(yīng)于HelloWorld 的APPLET語(yǔ)句。

如果用瀏覽器運(yùn)行HelloWorld Applet,需在瀏覽器的地址欄中輸入HTML文件URL地址。

至此,一個(gè)Applet程序的開(kāi)發(fā)運(yùn)行整個(gè)過(guò)程結(jié)束了(包括java源文件、編譯的class文件、html文件以及用appletviewer或用瀏覽器運(yùn)行)。

(二) Applet類(lèi)

Applet類(lèi)是所有Applet應(yīng)用的基類(lèi),所有的Java小應(yīng)用程序都必須繼承該類(lèi)。如下所示。

import java. applet.*;

public class OurApplet extends Applet

{

......

......

}

Applet類(lèi)的構(gòu)造函數(shù)只有一種,即:public Applet()

Applet實(shí)現(xiàn)了很多基本的方法,下面列出了Applet類(lèi)中常用方法和用途。

public final void setStub(AppletStub stub)

//設(shè)置Applet的stub.stub是Java和C之間轉(zhuǎn)換參數(shù)并返回值的代碼位,它是由系統(tǒng)自動(dòng)設(shè)定的。

public boolean isActive();// 判斷一個(gè)Applet是否處于活動(dòng)狀態(tài)。

public URL getDocumentBase();// 檢索表示該Applet運(yùn)行的文件目錄的對(duì)象。

public URL getCodeBase();// 獲取該Applet 代碼的URL地址。

public String getParameter(String name);// 獲取該Applet 由name指定參數(shù)的值。

public AppletContext getAppletContext();// 返回瀏覽器或小應(yīng)用程序觀察器。

public void resize(int width,int height);// 調(diào)整Applet運(yùn)行的窗口尺寸。

public void resize(Dimension d);// 調(diào)整Applet運(yùn)行的窗口尺寸。

public void showStatus(String msg);// 在瀏覽器的狀態(tài)條中顯示指定的信息。

public Image getImage(URL url); // 按url指定的地址裝入圖象。

public Image getImage(URL url,String name);// 按url指定的地址和文件名加載圖像。

public AudioClip getAudioClip(URL url);// 按url指定的地址獲取聲音文件。

public AudioClip getAudioClip(URL url, String name);// 按url指定的地址和文件名獲取聲音。

public String getAppletInfo();// 返回Applet應(yīng)用有關(guān)的作者、版本和版權(quán)方面的信息;

public String[][] getParameterInfo();

// 返回描述Applet參數(shù)的字符串?dāng)?shù)組,該數(shù)組通常包含三個(gè)字符串: 參數(shù)名、該參數(shù)所需值的類(lèi)型和該參數(shù)的說(shuō)明。

public void play(URL url);// 加載并播放一個(gè)url指定的音頻剪輯。

public void destroy();//撤消Applet及其所占用的資源。若該Applet是活動(dòng)的,則先終止該Applet的運(yùn)行。

(1) Applet運(yùn)行狀態(tài)控制基本方法

Applet類(lèi)中的四種基本方法用來(lái)控制其運(yùn)行狀態(tài):init()、start()、stop()、destroy()

init()方法

這個(gè)方法主要是為Applet的正常運(yùn)行做一些初始化工作。當(dāng)一個(gè)Applet被系統(tǒng)調(diào)用時(shí),系統(tǒng)首先調(diào)用的就是該方法。通常可以在該方法中完成從網(wǎng)頁(yè)向Applet傳遞參數(shù),添加用戶(hù)界面的基本組件等操作。

start()方法

系統(tǒng)在調(diào)用完init()方法之后,將自動(dòng)調(diào)用start()方法。而且,每當(dāng)用戶(hù)離開(kāi)包含該Applet的主頁(yè)后又再返回時(shí),系統(tǒng)又會(huì)再執(zhí)行一遍 start()方法。這就意味著start()方法可以被多次執(zhí)行,而不像init()方法。因此,可把只希望執(zhí)行一遍的代碼放在init()方法中。可以在start()方法中開(kāi)始一個(gè)線(xiàn)程,如繼續(xù)一個(gè)動(dòng)畫(huà)、聲音等。

stop()方法

這個(gè)方法在用戶(hù)離開(kāi)Applet所在頁(yè)面時(shí)執(zhí)行,因此,它也是可以被多次執(zhí)行的。它使你可以在用戶(hù)并不注意Applet的時(shí)候,停止一些耗用系統(tǒng)資源的工作以免影響系統(tǒng)的運(yùn)行速度,且并不需要人為地去調(diào)用該方法。如果Applet中不包含動(dòng)畫(huà)、聲音等程序,通常也不必實(shí)現(xiàn)該方法。

destroy()方法

與對(duì)象的finalize()方法不同,Java在瀏覽器關(guān)閉的時(shí)候才調(diào)用該方法。Applet是嵌在HTML文件中的,所以destroty()方法不關(guān)心何時(shí)Applet被關(guān)閉,它在瀏覽器關(guān)閉的時(shí)候自動(dòng)執(zhí)行。在destroy()方法中一般可以要求收回占用的非內(nèi)存獨(dú)立資源。(如果在 Applet仍在運(yùn)行時(shí)瀏覽器被關(guān)閉,系統(tǒng)將先執(zhí)行stop()方法,再執(zhí)行destroy()方法。

(2) Applet應(yīng)用的有關(guān)參數(shù)說(shuō)明

利用Applet來(lái)接收從HTML中傳遞過(guò)來(lái)的參數(shù),下面對(duì)這些參數(shù)作一簡(jiǎn)單說(shuō)明:

* CODE標(biāo)志

CODE標(biāo)志指定Applet的類(lèi)名;WIDTH和HEIGHT標(biāo)志指定Applet窗口的像素尺寸。在APPLET語(yǔ)句里還可使用其他一些標(biāo)志。

* CODEBASE 標(biāo)志

CODEBASE標(biāo)志指定Applet的URL地址。Applet的通用資源定位地址URL,它可以是絕對(duì)地址,如。也可以是相對(duì)于當(dāng)前HTML所在目錄的相對(duì)地址,如/AppletPath/Name。如果HTML文件不指定 CODEBASE 標(biāo)志,瀏覽器將使用和HTML文件相同的URL。

* ALT 標(biāo)志

雖然Java在WWW上很受歡迎,但并非所有瀏覽器都對(duì)其提供支持。如果某瀏覽器無(wú)法運(yùn)行Java Applet,那么它在遇到APPLET語(yǔ)句時(shí)將顯示ALT標(biāo)志指定的文本信息。

* ALIGN 標(biāo)志

ALIGN標(biāo)志可用來(lái)控制把Applet窗口顯示在HTML文檔窗口的什么位置。與HTMLLMG語(yǔ)句一樣,ALIGN標(biāo)志指定的值可以是TOP、MIDDLE或BOTTOM。

* VSPACE與HSPACE 標(biāo)志

VSPACE和HSPACE標(biāo)志指定瀏覽器顯示在Applet窗口周?chē)乃胶拓Q直空白條的尺寸,單位為像素。如下例使用該標(biāo)志在Applet窗口之上和之下各留出50像素的空白,在其左和其右各留出25像素的空白:

* NAME 標(biāo)志

NAME標(biāo)志把指定的名字賦予Applet的當(dāng)前實(shí)例。當(dāng)瀏覽器同時(shí)運(yùn)行兩個(gè)或多個(gè)Applet時(shí),各Applet可通過(guò)名字相互引用或交換信息。如果忽略NAME標(biāo)志,Applet的名字將對(duì)應(yīng)于其類(lèi)名。

* PARAM 標(biāo)志

通用性是程序設(shè)計(jì)所追求的目標(biāo)之一。使用戶(hù)或者程序員能很方便地使用同一個(gè)Applet完成不同的任務(wù)是通用性的具體表現(xiàn)。從HTML文件獲取信息是提高Applet通用性的一條有效途徑。

假設(shè)編制了一個(gè)把某公司的名字在屏幕上卷動(dòng)的Applet。為了使該Applet更加通用,則可以使該Applet從HTML文件獲取需要卷動(dòng)的文本信息。這樣,若想顯示另一個(gè)公司的名字,用不著修改Java Applet本身,只需修改HTML文件即可。

PARAM 標(biāo)志可用來(lái)在HTML文件里指定參數(shù),格式如下所示:

PARAM Name="name" Value="Liter"

Java Applet可調(diào)用getParameter方法獲取HTML文件里設(shè)置的參數(shù)值。

上面這個(gè)例子就是一個(gè)簡(jiǎn)單主頁(yè)的HTML文件代碼。代碼第五行中的P,是為了確保Applet出現(xiàn)在新的一行,若沒(méi)有它, Applet將會(huì)緊接著上一行的最后一個(gè)單詞出現(xiàn)。代碼第六、七兩行是關(guān)于Applet的一些參數(shù)。其中第六行是必需的Applet參數(shù),定義了編譯后的包含Applet字節(jié)碼的文件名,后綴通常為“.class”;和以象素為單位的Applet的初始寬度與高度。第七行則是附加的Applet參數(shù),它由一個(gè)分離的

標(biāo)記來(lái)指定其后的名稱(chēng)和值,在這里是img的值為“example.gif’,它代表了一個(gè)圖形文件名。

Applet的下載與圖形文件一樣需要一定的時(shí)間,若干秒后它才能在屏幕上顯示出來(lái)。等待的時(shí)間則取決于Applet的大小和用戶(hù)的網(wǎng)絡(luò)連接的速度。一旦下載以后,它便和本地計(jì)算機(jī)上的程序以相同的速度運(yùn)行了。

Applet在用戶(hù)的計(jì)算機(jī)上執(zhí)行時(shí),還可以下載其它的資源,如聲音文件、圖像文件或更多的Java代碼,有些Applet還允許用戶(hù)進(jìn)行交互式操作。但這需要重復(fù)的鏈接與下載,因此速度很慢,這是一個(gè)亟待解決的問(wèn)題,可以想到的一個(gè)好辦法是采用類(lèi)似高速緩存的技術(shù),將每次下載的文件都臨時(shí)保存在用戶(hù)的硬盤(pán)上,雖然第一次使用時(shí)花的時(shí)間比較多,但當(dāng)再次使用時(shí),只需直接從硬盤(pán)上讀取文件而無(wú)需再與Internet連接,便可以大大提高性能了。

從哪里得到Applet

自從Java日益流行之后,世界各地的愛(ài)好者們便不斷創(chuàng)造出各種各樣的Applet。這里列出了幾個(gè)較大的Applet收集站,讀者可以去逛一逛,看看這些Applet的效果如何,相信會(huì)使人流連忘返的。

這是Intemet上最負(fù)盛名的Applet收集站,它按照小應(yīng)用程序的用途加以分類(lèi),并列出了它們的說(shuō)明、功能和程序代碼,其規(guī)模和種類(lèi)之多,令人嘆為觀止。

這個(gè)站點(diǎn)的特色是對(duì)它收集的小應(yīng)用程序都加以評(píng)分,JARS是小應(yīng)用程序評(píng)價(jià)服務(wù)(Java Applet Rating Services)的簡(jiǎn)稱(chēng)。許多Java開(kāi)發(fā)者均以能獲得其好評(píng)為榮。

這個(gè)URL可真夠長(zhǎng)的!這是Yahoo公司提供的小應(yīng)用程序目錄,收集的數(shù)量雖然稍遜于Gamelan,但也很可觀了。

/java_applets/ BR這是網(wǎng)景公司提供的小應(yīng)用程序演示網(wǎng)頁(yè),同時(shí)也提供一些Java信息。

這是一個(gè)小應(yīng)用程序的信息站點(diǎn),提供了許多實(shí)用信息,讀者可以借助這里的數(shù)據(jù)庫(kù),查詢(xún)自己感興趣的小應(yīng)用程序的相關(guān)信 .

applet的超類(lèi)是panel,

如果您認(rèn)為本詞條還有待完善,需要補(bǔ)充新內(nèi)容或修改錯(cuò)誤內(nèi)容,請(qǐng) 編輯詞條

貢獻(xiàn)者(共6名):

jlbstz2003、fuweimin911、明明我心521、mengduanhonglo、邪惡怖怖、lym13

本詞條在以下詞條中被提及:

java.applet、JRE、web2.0、www

“Applet”在英漢詞典中的解釋(來(lái)源:百度詞典):

applet

n.

1. 【電腦】程序類(lèi)型(一小程序可附予其它程序一些功能,像Java就是一受歡迎用之以產(chǎn)生applet的語(yǔ)言)

關(guān)于本詞條的評(píng)論(共4條):查看評(píng)論

返回頁(yè)首

?2008 Baidu

如何用java編程,實(shí)現(xiàn)聲音特征的提取?

您好,1 雙方之間的網(wǎng)絡(luò)連接

Java在這方面有其獨(dú)特的優(yōu)勢(shì),Java提供了豐富的網(wǎng)絡(luò)類(lèi)庫(kù)的支持,可以輕松編寫(xiě)多種類(lèi)型的網(wǎng)絡(luò)通信程序。在我下面的例子中我就使用了TCP/IP協(xié)議,通過(guò)Java的Socket類(lèi)進(jìn)行編程。

2 音頻信號(hào)的采集和回放以及音頻數(shù)字信號(hào)的編碼與解碼

在解決這兩個(gè)問(wèn)題的時(shí)候,在網(wǎng)上很幸運(yùn)地通過(guò)一些文章的介紹,找到了Answer Machine 演示程序的源代碼(由of jsresources.org的Florian Bomers 和Matthias Pfisterer編寫(xiě),網(wǎng)址)。在這個(gè)程序代碼中,有幾個(gè)解決我們問(wèn)題所需要的類(lèi),而且作者將這些類(lèi)封裝的很好,我們基本不需要做什么改動(dòng),只需要屏蔽其中的調(diào)試信息的輸出就行了,更可貴的是它還封裝了幾種常見(jiàn)的音頻格式。其中的GSM格式(Global System for Mobile Telecommunications)就是我們下面例子中采用的壓縮格式,GSM格式可以將128kbps 的音頻數(shù)據(jù)流 (16bit通過(guò)8k Hz的音頻采樣) 壓縮為13kbps 的音頻數(shù)據(jù)流,非常適合語(yǔ)音信號(hào)的傳送,所以可謂是一石二鳥(niǎo)。

我分析過(guò)這幾個(gè)類(lèi)的源代碼,不得不佩服它的作者,每個(gè)類(lèi)的源代碼都很精煉,大家可以自己分析一下。好了下面就給大家講講這幾個(gè)類(lèi),并且將它們用到的Java Sound API中的類(lèi)和函數(shù)等一并做個(gè)簡(jiǎn)單介紹,讓大家對(duì)Java Sound API中常用的類(lèi)也有個(gè)大致的了解。由于Java Sound API中的類(lèi)比較多。限于篇幅無(wú)法對(duì)所有用到的類(lèi)做詳盡的解釋?zhuān)韵聝?nèi)容只是簡(jiǎn)單提及了各個(gè)類(lèi)的用途和使用規(guī)范,有關(guān)Java Sound API中類(lèi)的具體介紹請(qǐng)大家訪(fǎng)問(wèn)這里, 查找javax.sound.sampled的相關(guān)內(nèi)容。

以下的提到幾個(gè)文件是從Answer Machine 演示程序的源代碼中提取出來(lái)的,由于是開(kāi)放源代碼的程序,大家在使用的時(shí)候請(qǐng)注意相關(guān)的公共協(xié)議。

① AMAudioFormat類(lèi)(封裝在AMAudioFormat.java文件中)

AMAudioFormat類(lèi)封裝了CD、FM、TELEPHONE、GSM這四種質(zhì)量的音頻格式的參數(shù),使用起來(lái)也非常簡(jiǎn)單,這樣我們?cè)谑褂肑ava Sound API時(shí)就不用自己去寫(xiě)那些復(fù)雜的代碼了,但為了明白Java Sound API的原理,我們需要對(duì)它的代碼做一下分析。它使用了Java Sound API中的AudioFormat這個(gè)類(lèi),這個(gè)類(lèi)非常重要,在Java中對(duì)任何音頻數(shù)據(jù)的使用都要實(shí)現(xiàn)通過(guò)它指定所需要使用的音頻格式,AudioFormat類(lèi)有一個(gè)嵌套的類(lèi)AudioFormat.Encoding,實(shí)際上大部分對(duì)AudioFormat類(lèi)的使用都是使用的這個(gè)嵌套的類(lèi)。

AMAudioFormat類(lèi)的重要方法:

名稱(chēng):getLineAudioFormat

調(diào)用格式:getLineAudioFormat(整型音頻格式代號(hào))

返回值: 根據(jù)傳遞音頻格式代號(hào)生成的AudioFormat對(duì)象。

說(shuō)道這里大家可能要問(wèn)了,那么通過(guò)Java Sound API可以直接使用GSM格式嗎?答案是比較復(fù)雜,但同樣有解決的辦法,作者在這里使用了另外的開(kāi)源程序的類(lèi)庫(kù)-tritonus的GSM編碼解碼庫(kù)。大家需要在這里下載tritonous_share.jar和tritonus_gsm.jar兩個(gè)文件,并在AMAudioFormat類(lèi)中引用,這樣就完成了GSM格式的設(shè)置。需要告訴大家的是在對(duì)AMAudioFormat.java這個(gè)類(lèi)進(jìn)行編譯后,我們的程序運(yùn)行的時(shí)候就可以不需要tritonous_share.jar和tritonus_gsm.jar這兩個(gè)文件的支持了。

② AudioCapture類(lèi)(封裝在AudioCapture.java文件中)

AudioCapture類(lèi)封裝了從音頻硬件捕獲音頻數(shù)據(jù)并自動(dòng)編碼為GSM音頻壓縮數(shù)據(jù)的過(guò)程,并且通過(guò)它的getAudioInputStream()方法提供給我們一個(gè)音頻數(shù)據(jù)輸入流,我們就可以直接將這個(gè)流發(fā)送到網(wǎng)絡(luò)中。

AudioCapture 類(lèi)的重要方法:

名稱(chēng):getAudioInputStream

調(diào)用格式:getAudioInputStream()

返回值:AudioInputStream對(duì)象

AudioCapture 類(lèi)使用了Java Sound API中的AudioInputStream、AudioFormat、AudioSystem這幾個(gè)類(lèi)和TargetDataLine、LineListener接口。除了AudioFormat類(lèi)我再簡(jiǎn)單介紹一下其他的類(lèi):

AudioInputStream 類(lèi)是帶有特殊音頻格式和長(zhǎng)度的InputStream類(lèi),它有兩個(gè)構(gòu)造方法,分別是AudioInputStream(InputStream stream, AudioFormat format,long length)和AudioInputStream(TargetData -Line line)。

TargetDataLine 接口是DataLine接口的一種,通過(guò)它就可以直接從音頻硬件獲取數(shù)據(jù)了,它有幾個(gè)常用的方法,分別是:open(AudioFormat format)、void open(AudioFormat format, int bufferSize)、int read(byte[] b, int off, int len)。

AudioSystem 類(lèi)是Java標(biāo)準(zhǔn)音頻系統(tǒng)的入口點(diǎn),在AudioSystem 類(lèi)中使用他的getLine() 方法創(chuàng)建TargetDataLine對(duì)象。

LineListener接口用來(lái)對(duì)線(xiàn)路狀態(tài)改變的時(shí)間進(jìn)行監(jiān)聽(tīng),他的重要的方法是update(LineEvent event)方法。

③ AudioPlayStream類(lèi)(封裝在AudioPlayStream.java文件中)

AudioPlayStream類(lèi)與AudioCapture類(lèi)剛好相反,它封裝了GSM壓縮音頻數(shù)據(jù)的解碼和音頻信號(hào)的回放過(guò)程,提供給我們一個(gè)音頻信號(hào)輸出流。AudioCapture類(lèi)用到的Java Sound API中的類(lèi)它也基本都用到了,只是它使用了SourceDataLine接口而不是TargetDataLine接口

④ Debug類(lèi)(封裝在Debug.java文件中)

Debug類(lèi)主要用來(lái)在調(diào)試時(shí)輸出訊息,代碼很少,后來(lái)我把其中輸出信息的語(yǔ)句都屏蔽了,對(duì)程序運(yùn)行沒(méi)有影響。

為了方便使用以上的幾個(gè)類(lèi),我們需要對(duì)它們進(jìn)行編譯和打包,編譯時(shí)需要設(shè)置相關(guān)的編譯環(huán)境,以下是我們需要用到的命令行

set CLASSPATH=%CLASSPATH%;.;tritonus_gsm.jar;tritonus_share.jar

javac am*.java amaudio*.java

jar cmf packagingmanifest.mf am.jar am*.class

amaudio*.class

說(shuō)明一下,我將以上提到的Java源碼文件放在了am目錄下,編譯之后可以得到一個(gè)8k的am.jar文件,我們下一步所需要做的就是在我們的程序中引用這個(gè)包。

分享題目:java代碼生成聲音 javaparser 生成代碼
文章源于:http://m.newbst.com/article2/dopjpoc.html

成都網(wǎng)站建設(shè)公司_創(chuàng)新互聯(lián),為您提供品牌網(wǎng)站制作移動(dòng)網(wǎng)站建設(shè)服務(wù)器托管定制開(kāi)發(fā)網(wǎng)站設(shè)計(jì)公司用戶(hù)體驗(yàn)

廣告

聲明:本網(wǎng)站發(fā)布的內(nèi)容(圖片、視頻和文字)以用戶(hù)投稿、用戶(hù)轉(zhuǎn)載內(nèi)容為主,如果涉及侵權(quán)請(qǐng)盡快告知,我們將會(huì)在第一時(shí)間刪除。文章觀點(diǎn)不代表本網(wǎng)站立場(chǎng),如需處理請(qǐng)聯(lián)系客服。電話(huà):028-86922220;郵箱:631063699@qq.com。內(nèi)容未經(jīng)允許不得轉(zhuǎn)載,或轉(zhuǎn)載時(shí)需注明來(lái)源: 創(chuàng)新互聯(lián)

商城網(wǎng)站建設(shè)