版權(quán)說明:本文檔由用戶提供并上傳,收益歸屬內(nèi)容提供方,若內(nèi)容存在侵權(quán),請進(jìn)行舉報(bào)或認(rèn)領(lǐng)
文檔簡介
山東財(cái)經(jīng)大學(xué)計(jì)算機(jī)科學(xué)與技術(shù)學(xué)院Java多
程序設(shè)計(jì)第六章
Java多技術(shù)2技術(shù)概述6.1
Java多6.2
文本處理6.3
圖像處理6.4
動(dòng)畫制作6.5
音頻流處理6.6
JMF框架6.5
音頻流處理數(shù)字音頻格式有很多種,其質(zhì)量和采樣頻率和采樣精度兩個(gè)參數(shù)有關(guān)。
采樣頻率:每秒采樣次數(shù);
采樣精度:每次采樣所
的數(shù)據(jù)量。Java支持聲音格式:
AU、AIFF、WAVE、MIDI、MP3Java語言提供了兩大類處理音頻數(shù)據(jù)流的API,一類是應(yīng)用于標(biāo)準(zhǔn)計(jì)算機(jī)設(shè)備中的API,它們可以處理各種聲音(0-20kHz),如Java
sound等;另一類是應(yīng)用于
設(shè)備中,專門處理語音(20Hz-8kHz),如Java
ephony、Java
Speech等。6.5
音頻流處理Java語言應(yīng)用于標(biāo)準(zhǔn)計(jì)算機(jī)設(shè)備的處理音頻的API主要封裝在三類程序包中:
java.applet
(JDK)、.sun.j3d.audioengines
(Java
3D)、.sun.media.sound
(JMF)6.5
音頻流處理簡單的方法通過Applet類的AudioClip接口來裝載聲音。
void
play():開始
voidloop():
循環(huán)
void
stop():
停止聲音片斷聲音片斷聲音片斷
getAudioClip():獲取聲音片斷66.5
音頻流處理聲音。舉例:顯示圖像和import
java.awt.*;import
java.applet.*;import
javax.swing.*;public
class
AudioImageextends
JApplet{AudioClip
audio;Image
imgDisplay;public
void
init(){imgDisplay
=
getImage(getCodeBase(),"1.jpg");audio
=
getAudioClip(getCodeBase(),"sample.mid");}public
void
paint(Graphics
g){g.drawString("Applet中
聲音和顯示圖像",
30,
30);audio.loop();g.drawImage(imgDisplay,30,
40,
this);}}76.5
音頻流處理利用Auido
API(音頻處理包)來處理聲音片斷,包為sun.audio。舉例:使用Audio
API進(jìn)行音頻文件處理。import
sun.audio.*;import
java.io.*;import
java.awt.event.*;import
java.awt.*;import
javax.swing.*;publicclass
AudioApplicationDemo
extends
JFrameimplements
ActionListener{AudioStream
as;");");JButton
btnStart=new
JButton("開始JButtonbtnPause=new
JButton("暫停JButton
btnContinue=new
JButton("繼續(xù)");6.5
音頻流處理public
AudioApplicationDemo(){try{InputStreamin
=
new
FileInputStream("src/Guiex/hai.wav");as
=
new
AudioStream(in);}catch(Exception
e){e.printStackTrace();}btnStart.addActionListener(this);btnPause.addActionListener(this);btnContinue.addActionListener(this);this.setLayout(new
FlowLayout());this.add(btnStart);this.add(btnContinue);this.add(btnPause);this.pack();this.setVisible(true);
}6.5
音頻流處理public
void
actionPerformed(ActionEvent
e){if(as==null){System.out.println("AudioStream
object
is
not
created!");return;
}Object
cmd
=
e.getSource();if(cmd
==
btnStart){AudioPlayer.player.start(as);}else
if(cmd
==
btnPause){AudioPlayer.player.stop(as);}else
if(cmd
==
btnContinue){AudioPlayer.player.start(as);}
}public
static
void
main(String[]
args)
{AudioApplicationDemo
fame
=
newAudioApplicationDemo();fame.addWindowListener(new
WindowAdapter(){public
void
windowClosing(WindowEvent
e){System.exit(0);}
});}
}6.5
音頻流處理利用Java
框架(JMF)中的Sound
API來處理聲音片斷,主要包含在兩個(gè)包中:
javax.sound
com.sun.media.sound6.6
JMF框架JMF(Java
media
framework)API是專門用于處理視、音頻
的擴(kuò)展應(yīng)用開發(fā)包,集成了對視、音頻的采集、編碼、傳輸、等處理。
可以在Java
Applet和應(yīng)用程序中各種文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。
可以
從互聯(lián)網(wǎng)上的流。
可以利用麥克風(fēng)和
機(jī)一類的設(shè)備截取音頻和
,并保存成多
處理多文件。文件,轉(zhuǎn)換文件格式。
向互聯(lián)網(wǎng)上傳音頻和
在互聯(lián)網(wǎng)上廣播音頻和數(shù)據(jù)流。數(shù)據(jù)。6.6
JMF框架數(shù)據(jù)源(DataSource)
數(shù)據(jù)源中包含了也可以是從互聯(lián)網(wǎng)上數(shù)據(jù)流,可以是一個(gè)多
文件,的數(shù)據(jù)流。當(dāng)創(chuàng)建了DataSource對象后,可以將它送入Player對象中。截取設(shè)備(Capture
Device)
截取設(shè)備指可以截取到音頻或
數(shù)據(jù)的硬件,如麥克風(fēng)、
機(jī)等。截取到的數(shù)據(jù)可以被送入Player對象中進(jìn)行處理。6.6
JMF框架器(Player)器接口。Player對象將音頻/
數(shù)據(jù)流作為輸入,然后將數(shù)據(jù)流輸出到音箱或屏幕上。有6種狀態(tài):
Unrealized:在這種狀態(tài)下,Player對象已經(jīng)被實(shí)例化,但是并不知道它需要
的多
的任何信息。
Realizing:當(dāng)調(diào)用realize()方法時(shí),Player對象的狀態(tài)從Unrealized轉(zhuǎn)變?yōu)镽ealizing。在這種狀態(tài)下,Player對象正在確定它需要占用哪些資源。
Realized:在這種狀態(tài)下Player對象已經(jīng)確定了它需要哪些資源,并且也知道需要
的多
的類型。6.6
JMF框架器(Player)Prefetching:當(dāng)調(diào)用prefectch()方法時(shí),Player對象的狀態(tài)從Realized變?yōu)镻refetching。在該狀態(tài)下的Player對象正在為多做一些準(zhǔn)備工作,其中包括加載多 數(shù)據(jù),獲得需要獨(dú)占的資源等。這個(gè)過程被稱預(yù)?。≒refetch)。Prefetched:當(dāng)Player對象完成了預(yù)取操作后就到達(dá)了該狀態(tài)。Started:當(dāng)調(diào)用start()方法后,Player對象就進(jìn)入了該狀態(tài)并多
。MediaPlayer類(javax.media.bean.playerbean)繼承了javax.media.Player接口;ControllerListener(javax.media)接口響應(yīng)器狀態(tài)的變化;器包括一個(gè)可視組件(Visual
Component)和控制面板組件(Control
Panel
Component)。6.6
JMF框架處理器(Processor)
處理器接口(javax.media.Processor),繼承了Player接口。
Processor對象除了支持Player對象支持的所有功能,還可以控制對于輸入的多
數(shù)據(jù)流進(jìn)行何種處理以及通過數(shù)據(jù)源向其他的Player對象或Processor對象輸出數(shù)據(jù)。
除了在 器的6種狀態(tài)外,Processor
對象還包括兩種新的狀態(tài),這兩種狀態(tài)是在Unrealized狀態(tài)之后,但是在Realizing狀態(tài)之前。Configuring:當(dāng)調(diào)用configure()方法后,Processor對象進(jìn)入該狀態(tài)。在該狀態(tài)下,Processor對象連接到數(shù)據(jù)源并獲取輸入數(shù)據(jù)的格式信息
Configured:當(dāng)完成數(shù)據(jù)源連接,獲得輸入數(shù)據(jù)格式的信息后,Processor對象就處于Configured狀態(tài)。6.6
JMF框架數(shù)據(jù)格式(Format)
Format對象(javax.media.Format)中保存了多
的格式信編碼的相關(guān)信息,但是息。該對象中本身沒有記錄多它保存了編碼的名稱。管理器(Manager)
JMF提供4種管理器:
Manager:相當(dāng)于兩個(gè)類之間的接口。例如當(dāng)你需要
一個(gè)DataSource對象,你可以通過使用Manager對象創(chuàng)建一個(gè)Player對象來它。
PackageManager:該管理器中保存了JMF類
信息。
CaptureDeviceManager:該管理器中保存了截取設(shè)備的
信息。
PlugInManager:該管理器中保存了JMF插件的
信息。6.6
JMF框架在JMF編程中,最常見的工作就是創(chuàng)建一個(gè)Player對象。通過創(chuàng)建MediaPlayer類的實(shí)例來創(chuàng)建;也可以通過Manager類的createPlayer方法創(chuàng)建Player對象。當(dāng)獲得了一個(gè)Player對象后,通過調(diào)用
ponent方法得到Player對象的視覺部件。然后將視覺部件加入到應(yīng)用程序或Applet的界面上。Player對象還包含一個(gè)控制面板部件(體的ponent方法),在上面可以控制媒、停止和暫停等。186.6
JMF框架例:編寫
器,實(shí)現(xiàn)如下目標(biāo):
主窗口包含一個(gè)“文件”菜單,文件菜單包含三個(gè)菜單項(xiàng)——“打開”:用來打開一次(默認(rèn)),還是重復(fù)文件;“循環(huán)”:;“退出”:退出程序。
主窗口顯示彩色背景的“歡迎”信息。器還包含一個(gè)視覺部件、一個(gè)控制面板部件。文件包含的各幀圖像;控制面板文件的
、或進(jìn)行其他控制視覺部件順序允許用戶暫停、開始操作。6.6
JMF框架import
javax.swing.*;importjava.awt.*;import
java.awt.event.*;importjavax.media.*;public
class
MediaPlayer
extends
JFrameimplementsActionListener,
ControllerListener,
ItemListener
{Player
player;Component
vc,cc;boolean =
true,
loop
=false;String
currentDirectory;J Bar
mb;MediaPlayer(String
title){super(title);addWindowListener(new
WindowAdapter(){public
voidwindowClosing(WindowEvent
e){dispose();
}public
void
windowClosed(Window
e){ if(player
!=
null)player.close();System.exit(0);
}
});JJm=
new
JItem
mi
=new
J("文件");Item("打開");mi.addActionListener(this);m.add(mi);m.addSeparator();Item("循環(huán)",false);JCheckBox Item
cbmi
=
new
JCheckBoxcbmi.addItemListener(this);m.add(cbmi);m.addSeparator();mi=new
J Item("退出");mi.addActionListener(this);m.add(mi);mb
=new
J
Bar();mb.add(m);setJ
Bar(mb);setSize(200,200);setVisible(true);
}21public
void
actionPerformed(ActionEvent
e){if(
mand().equals("退出")){dispose();return;}文件",FileDialog.LOAD);FileDialog
fd=new
FileDialog(this,"打開fd.setDirectory(currentDirectory);fd.setVisible(true);if(fd.getFile()==null)
return;currentDirectory
=
fd.getDirectory();if
(player
!=
null)player.close();try{player
=
Manager.createPlayer(newMediaLocator("file:"+fd.getDirectory()+fd.getFile()));}catch(java.io.IOException
e2){System.out.println(e2);
}catch(NoPlayerException
e2)
{System.out.println("不能找到數(shù)據(jù)");return;
}器");
return;
}if(player==null){
System.out.println("無法創(chuàng)建=
false;setTitle(fd.getFile());player.addControllerListener(this);player.prefetch();
}22public
void
controllerUpdate(ControllerEvent
e){if(e
instanceof
ControllerClosedEvent){ if(vc!=null)
{
remove(vc); vc
=
null;
}if(cc!=null)
{
remove(cc); cc
=
null;
}return;
}if(e
instanceof
EndOfMediaEvent)
{if(loop)
{player.setMediaTime(new
Time(0));player.start();
}return;
}pleteEvent)
{if(e
instanceofplayer.start();return;
}pleteEvent)
{ponent();if(e
instanceofvc
=
pif(vc
!=
null)
add(vc);cc
=
player.ponent();if(cc
!=
null)
add(cc,BorderLayout.SOUTH);pack();
}
}public
void
itemStateChanged(ItemEvent
e){ loop
=
!loop;
}public
void
paint(Graphics
g){
super.paint(g);if(
)
{int
w
=
getSize().width;int
h
=
getSize().height;g.setColor(Color.red);g.fillRect(0,mb.getHeight()*2,
w,
h-
mb.getHeight());Font
f=
new
Font("DialogInput",Font.BOLD,16);g.setFont(f);FontMetrics
fm
=
g.getFontMetrics();int
swidth=fm.stringWidth("***歡迎***");g.setColor(Color.black);g.drawString("***歡迎***",
(w-swidth)/2,
(h+getInsets().top)/2);
}
}public
void
update(Graphics
g)
{
paint(g);
}public
static
void
main(String[]
args)
{new
MediaPlayer("
器1.0");}}運(yùn)行結(jié)果:本章小結(jié)的處理方法;本章內(nèi)容
Java中對文本、圖像、動(dòng)畫、聲音等多
Java多
框架的基本概念。本章要求
掌握文本顯示主要方法、圖像處理主要方法、動(dòng)畫實(shí)現(xiàn)原理、聲音處理主要方法;
掌握J(rèn)MF中的基本概念。Java語言編程基礎(chǔ)程序結(jié)構(gòu)數(shù)據(jù)類型常量和變量數(shù)組流程控制類與對象類的重用接口和多態(tài)異常處理內(nèi)容回顧輸入輸出和文件處理輸入/輸出流文件讀寫FileInputStream、FileOutputStreamFileReader、FileWriterBufferedInputStream、BufferedOutpu
溫馨提示
- 1. 本站所有資源如無特殊說明,都需要本地電腦安裝OFFICE2007和PDF閱讀器。圖紙軟件為CAD,CAXA,PROE,UG,SolidWorks等.壓縮文件請下載最新的WinRAR軟件解壓。
- 2. 本站的文檔不包含任何第三方提供的附件圖紙等,如果需要附件,請聯(lián)系上傳者。文件的所有權(quán)益歸上傳用戶所有。
- 3. 本站RAR壓縮包中若帶圖紙,網(wǎng)頁內(nèi)容里面會有圖紙預(yù)覽,若沒有圖紙預(yù)覽就沒有圖紙。
- 4. 未經(jīng)權(quán)益所有人同意不得將文件中的內(nèi)容挪作商業(yè)或盈利用途。
- 5. 人人文庫網(wǎng)僅提供信息存儲空間,僅對用戶上傳內(nèi)容的表現(xiàn)方式做保護(hù)處理,對用戶上傳分享的文檔內(nèi)容本身不做任何修改或編輯,并不能對任何下載內(nèi)容負(fù)責(zé)。
- 6. 下載文件中如有侵權(quán)或不適當(dāng)內(nèi)容,請與我們聯(lián)系,我們立即糾正。
- 7. 本站不保證下載資源的準(zhǔn)確性、安全性和完整性, 同時(shí)也不承擔(dān)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。
最新文檔
- 創(chuàng)新技術(shù)下的實(shí)驗(yàn)室設(shè)備維護(hù)與保養(yǎng)策略
- 2025年滬科版九年級生物上冊階段測試試卷
- 2025年度生產(chǎn)線智能化改造施工與培訓(xùn)服務(wù)合同2篇
- 二零二五年度監(jiān)管金融監(jiān)管總局三連發(fā)金融監(jiān)管技術(shù)支持合同3篇
- 2024版起草借款合同大全
- 2025年牛津上海版八年級科學(xué)上冊月考試卷含答案
- 2025年度5G通信基站建設(shè)與維護(hù)合同2篇
- 二零二五年度房地產(chǎn)樓盤認(rèn)購合同(含健康醫(yī)療)3篇
- 2024年限定區(qū)域獨(dú)家供貨合同版B版
- 2025年度不動(dòng)產(chǎn)投資咨詢服務(wù)合同2篇
- 拼圖行業(yè)未來五年前景展望
- 廣西玉林市(2024年-2025年小學(xué)六年級語文)統(tǒng)編版質(zhì)量測試(上學(xué)期)試卷及答案
- 醫(yī)院醫(yī)??乒ぷ骺偨Y(jié)
- 2024-2025學(xué)年譯林版八年級英語上學(xué)期重點(diǎn)詞匯短語句子歸納【考點(diǎn)清單】
- 廣東省六校聯(lián)考2024-2025學(xué)年高二上學(xué)期12月月考英語試題
- 養(yǎng)老護(hù)理員技能培訓(xùn)的標(biāo)準(zhǔn)化實(shí)施方案
- 2024年企業(yè)采購部年終總結(jié)及今后計(jì)劃(3篇)
- 2024中國誠通控股集團(tuán)限公司總部招聘11人易考易錯(cuò)模擬試題(共500題)試卷后附參考答案
- 物業(yè)客服個(gè)人述職報(bào)告范例
- 數(shù)據(jù)崗位招聘筆試題與參考答案2024年
- 2024屆高考英語詞匯3500左右
評論
0/150
提交評論