财经7.13实训-视频第六章_第1页
财经7.13实训-视频第六章_第2页
财经7.13实训-视频第六章_第3页
财经7.13实训-视频第六章_第4页
财经7.13实训-视频第六章_第5页
免费预览已结束,剩余27页可下载查看

付费下载

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

山东财经大学计算机科学与技术学院Java多

程序设计第六章

Java多技术2技术概述6.1

Java多6.2

文本处理6.3

图像处理6.4

动画制作6.5

音频流处理6.6

JMF框架6.5

音频流处理数字音频格式有很多种,其质量和采样频率和采样精度两个参数有关。

采样频率:每秒采样次数;

采样精度:每次采样所

的数据量。Java支持声音格式:

AU、AIFF、WAVE、MIDI、MP3Java语言提供了两大类处理音频数据流的API,一类是应用于标准计算机设备中的API,它们可以处理各种声音(0-20kHz),如Java

sound等;另一类是应用于

设备中,专门处理语音(20Hz-8kHz),如Java

ephony、Java

Speech等。6.5

音频流处理Java语言应用于标准计算机设备的处理音频的API主要封装在三类程序包中:

java.applet

(JDK)、.sun.j3d.audioengines

(Java

3D)、.sun.media.sound

(JMF)6.5

音频流处理简单的方法通过Applet类的AudioClip接口来装载声音。

void

play():开始

voidloop():

循环

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进行音频文件处理。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("继续");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来处理声音片断,主要包含在两个包中:

javax.sound

com.sun.media.sound6.6

JMF框架JMF(Java

media

framework)API是专门用于处理视、音频

的扩展应用开发包,集成了对视、音频的采集、编码、传输、等处理。

可以在Java

Applet和应用程序中各种文件,例如AU、AVI、MIDI、MPEG、QuickTime和WAV等文件。

可以

从互联网上的流。

可以利用麦克风和

机一类的设备截取音频和

,并保存成多

处理多文件。文件,转换文件格式。

向互联网上传音频和

在互联网上广播音频和数据流。数据。6.6

JMF框架数据源(DataSource)

数据源中包含了也可以是从互联网上数据流,可以是一个多

文件,的数据流。当创建了DataSource对象后,可以将它送入Player对象中。截取设备(Capture

Device)

截取设备指可以截取到音频或

数据的硬件,如麦克风、

机等。截取到的数据可以被送入Player对象中进行处理。6.6

JMF框架器(Player)器接口。Player对象将音频/

数据流作为输入,然后将数据流输出到音箱或屏幕上。有6种状态:

Unrealized:在这种状态下,Player对象已经被实例化,但是并不知道它需要

的多

的任何信息。

Realizing:当调用realize()方法时,Player对象的状态从Unrealized转变为Realizing。在这种状态下,Player对象正在确定它需要占用哪些资源。

Realized:在这种状态下Player对象已经确定了它需要哪些资源,并且也知道需要

的多

的类型。6.6

JMF框架器(Player)Prefetching:当调用prefectch()方法时,Player对象的状态从Realized变为Prefetching。在该状态下的Player对象正在为多做一些准备工作,其中包括加载多 数据,获得需要独占的资源等。这个过程被称预取(Prefetch)。Prefetched:当Player对象完成了预取操作后就到达了该状态。Started:当调用start()方法后,Player对象就进入了该状态并多

。MediaPlayer类(javax.media.bean.playerbean)继承了javax.media.Player接口;ControllerListener(javax.media)接口响应器状态的变化;器包括一个可视组件(Visual

Component)和控制面板组件(Control

Panel

Component)。6.6

JMF框架处理器(Processor)

处理器接口(javax.media.Processor),继承了Player接口。

Processor对象除了支持Player对象支持的所有功能,还可以控制对于输入的多

数据流进行何种处理以及通过数据源向其他的Player对象或Processor对象输出数据。

除了在 器的6种状态外,Processor

对象还包括两种新的状态,这两种状态是在Unrealized状态之后,但是在Realizing状态之前。Configuring:当调用configure()方法后,Processor对象进入该状态。在该状态下,Processor对象连接到数据源并获取输入数据的格式信息

Configured:当完成数据源连接,获得输入数据格式的信息后,Processor对象就处于Configured状态。6.6

JMF框架数据格式(Format)

Format对象(javax.media.Format)中保存了多

的格式信编码的相关信息,但是息。该对象中本身没有记录多它保存了编码的名称。管理器(Manager)

JMF提供4种管理器:

Manager:相当于两个类之间的接口。例如当你需要

一个DataSource对象,你可以通过使用Manager对象创建一个Player对象来它。

PackageManager:该管理器中保存了JMF类

信息。

CaptureDeviceManager:该管理器中保存了截取设备的

信息。

PlugInManager:该管理器中保存了JMF插件的

信息。6.6

JMF框架在JMF编程中,最常见的工作就是创建一个Player对象。通过创建MediaPlayer类的实例来创建;也可以通过Manager类的createPlayer方法创建Player对象。当获得了一个Player对象后,通过调用

ponent方法得到Player对象的视觉部件。然后将视觉部件加入到应用程序或Applet的界面上。Player对象还包含一个控制面板部件(体的ponent方法),在上面可以控制媒、停止和暂停等。186.6

JMF框架例:编写

器,实现如下目标:

主窗口包含一个“文件”菜单,文件菜单包含三个菜单项——“打开”:用来打开一次(默认),还是重复文件;“循环”:;“退出”:退出程序。

主窗口显示彩色背景的“欢迎”信息。器还包含一个视觉部件、一个控制面板部件。文件包含的各帧图像;控制面板文件的

、或进行其他控制视觉部件顺序允许用户暂停、开始操作。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("循环",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("不能找到数据");return;

}器");

return;

}if(player==null){

System.out.println("无法创建=

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");}}运行结果:本章小结的处理方法;本章内容

Java中对文本、图像、动画、声音等多

Java多

框架的基本概念。本章要求

掌握文本显示主要方法、图像处理主要方法、动画实现原理、声音处理主要方法;

掌握JMF中的基本概念。Java语言编程基础程序结构数据类型常量和变量数组流程控制类与对象类的重用接口和多态异常处理内容回顾输入输出和文件处理输入/输出流文件读写FileInputStream、FileOutputStreamFileReader、FileWriterBufferedInputStream、BufferedOutpu

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论