財(cái)經(jīng)7.13實(shí)訓(xùn)-視頻第六章_第1頁
財(cái)經(jīng)7.13實(shí)訓(xùn)-視頻第六章_第2頁
財(cái)經(jīng)7.13實(shí)訓(xùn)-視頻第六章_第3頁
財(cái)經(jīng)7.13實(shí)訓(xùn)-視頻第六章_第4頁
財(cái)經(jīng)7.13實(shí)訓(xùn)-視頻第六章_第5頁
已閱讀5頁,還剩27頁未讀, 繼續(xù)免費(fèi)閱讀

下載本文檔

版權(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)用戶因使用這些下載資源對自己和他人造成任何形式的傷害或損失。

最新文檔

評論

0/150

提交評論