java 多媒体_Java知多少(102)多媒体基础

本文详细介绍了如何使用Java Applet来播放幻灯片、动画、声音和视频。通过示例代码解释了如何加载和显示图片序列以实现幻灯片和动画效果,并展示了如何使用AudioClip类播放不同格式的音频文件,包括控制播放、循环和停止。此外,还讨论了在加载大型音频文件时如何利用多线程避免影响程序初始化的技巧。
摘要由CSDN通过智能技术生成

本节介绍 Java程序播放幻灯片和动画,播放声音和视频的方法。

播放幻灯片和动画

用实例说明播放幻灯片和动画的方法。

【例 12-7】小应用程序先将幻灯片读入数组在存储,单击鼠标变换幻灯片,逐张显示。

1 import java.applet.*import java.awt.*;2 import java.awt.event.*;3 public class Example7_7 extends Applet implementsMouseListener{4 final int number = 50; //假定幻灯片有50张

5 int count = 0;6 Image[] card = newImage[number];7 public voidinit(){8 addMouseListener(this);9 for (int i = 0; i < number; i++){10 card[i] = getImage(getCodeBase(), "DSC0033" + i + ".jpg");11 }12 }13 public voidpaint(Graphics g){14 if ((card[count]) != null)15 g.drawImage(card[count], 10, 10, card[count].getWidth(this),card[count].getHeitht(this), this);16 }17 public voidmousePressed(MouseEvent e){18 count = (count + 1) % number; //循环逐张显示

19 repaint();20 }21 public voidmouseRelease(MouseEvent e){}22 public voidmouseEntered(MouseEvent e){}23 public voidmouseExited(Mouse Event e){}24 public voidmouseClicked(MouseEvent e){}25 }

【例 12-8】小应用程序说明播放动画的方法,要求播放的图片和小程序放在相同的目录中,程序通过快速显示一组图片造成显示动画的效果。小应用程序利用线程控制动画图片的逐显示。

1 import java.applet.*;2 import java.awt.*;3 import java.awt.event.*;4 public class Example7_8 extends Applet implementsRunnable{5 final int number = 50;6 int count = 0;7 Thread mythread;8 Image[] pic = newImage[number];9 public voidinit(){10 setSize(300, 200);11 for (int i = 0; i <= number; i++){12 //载入动画图片

13 pic[i - 1] = getImage(getCodeBase(), "DSC0033" + i + ".jpg");14 }15 }16 public voidstart(){17 mythread = new Thread(this); //创建一个线程

18 mythread.start(); //启动线程执行

19 }20 public voidstop(){21 mythread = null;22 }23 public voidrun(){24 //线程的执行代码

25 while (true){26 repaint();27 count = (count + 1) % number; //改变显示的图片号

28 try{29 mhythread.sleep(200);30 }31 catch(InterruptedExeception e){}32 }33 }34 public voidpaint(Graphics g){35 if ((pic[count] != null)36 g.drawImage(pic[count], 10, 10, pic[count].getwidth(this), pic[count].getHeight(this), this);37 }38 }

播放声音

Java语言老根据地的音频格式有多种:au、aiff、wav、midi、rfm等。小程序要播放音频文件,可使用类AudioClip,该类在java.applet.AudioClip类库中定义。小程序先创建AudioClip对象,并用getAudioClip()方法为其初始化。代码形式如下:

AudioClip audioClip = getAudioClip(getCodeBase(),”myAudioClipFile.au”);

如果要从网上获得音频文件,可用方法getAudioClip(URL url, String name),根据url地址及音频文件name获得可播放的音频对象。

控制声音的播放有3个方法:play()播放声音,loop()循环播放和stop()停止播放。

【例 12-9】能播放声音的小应用程序。

1 import java.applet.*;2 import java.awt.*;3 import java.awt.event.*;4 public class Example7_9 extends Applet implementsActionListener{5 AudioClip clip; //声明一个音频对象

6 Button buttonPlay, buttonLoop, buttonStop;7 public voidinit(){8 clip = getAudioClip(getCodeBase(), "2.wav");9 //根据程序所在地址处声音文件2.wav创建音频对象,10 //Applet类的getCodeBase()方法可以获得小程序所在的html页面的URL地址。

11 buttonPlay = new Button("开始播放");12 buttonLoop = new Button("循环播放");13 buttonStop = new Button("停止播放");14 buttonPlay.addActionListener(this);15 buttonStop.addActionListener(this);16 buttonLoop.addActionListener(this);17 add(buttonPlay);18 add(buttonLoop);19 add(buttonStop);20 }21 public voidstop(){22 clip.stop(); //当离开此页面时停止播放

23 }24 public voidactionPerformed(ActionEvent e){25 if (e.getSource() ==buttonPlay){26 clip.play();27 }28 else if (e.getSource() ==buttonLoob){29 clip.loop();30 }31 else if (e.getSource() ==buttonStop){32 clip.stop();33 }34 }35 }

【例 12-10】如果声音文件较大或网络速度慢会影响小程序的初始化工作。这可用多线程技术解决。在一个级别较低的线程中完成音频对象的创建,即由后台载入声音文件,前台播放。

1 import java.applet.*;2 import java.awt.*;3 import java.awt.event.*;4 public class Hanoi extends applet implementsRunnable, ActionListener{5 AudioClip clip; //声明一个音频对象

6 textField text;7 Thread thread;8 Button buttonPlay, buttonLoop, buttonStop;9 public voidinit(){10 thread = new Thread(this); //创建新线程

11 thread .setPriority(Thread.MIN_PRIORITY);12 buttonPlay = new Button("开始播放");13 buttonLoop = new Button( "循环播放");14 buttonStop = new Button("停止播放");15 text = new textField(12);16 buttonPlay.addActionListener(this);17 buttonStop.addActionListener(this);18 buttonLoop.addActionListener(this);19 add(buttonPlay);20 add(buttonLoop);21 add(buttonStop);22 add(text);23 }24 public voidstart(){25 thread.start();26 }27 public voidstop(){28 clip.stop();29 }30 public voidactionPerformed(ActionEvent e){31 if (e.getSource() ==buttonPlay(){32 clip.play();33 }34 else if (e.getSource() ==buttonLoop(){35 clip.loop();36 }37 else if (e.getSource() ==buttonStop(){38 clip.stop();39 }40 }41 public voidrun(){42 //在线程thread 中创建音频对象

43 clip = getAudioclip(getCodeBase(), "2.wav");44 text.setText("请稍等");45 if(clip ! = null){46 buttonPlay.setBackground(Color.red); buttonLoop.setBackground(Color.green); text.setText("您可以播放了");47 } //获得音频对象后通知可以播放

48 }49 }

系列文章:

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值