
AudioCLip主要的方法有:play()播放依次声音;loop()循环播放音乐;stop()停止播放。
做法一:
InputStream is =null
AudioStream as = null
is = getClass().getResourceAsStream("a.wav")
try {
as = new AudioStream(is)
} catch (IOException e) {}
AudioPlayer.player.start(as)
此方法将音乐文件放入流中在播放,仅限于Java Application,容易报错,空指针异常,或者是流异常,不推荐。
做法二:
String music = "a.wav"
AudioClip clip = Applet.newAudioClip(getClass().getResource(music))
次方法在Applet中运行没有问题,但是Application中getclass()会返回空指针,导致失败。
推荐做法:
private URL url
private AudioClip ac
File f1 = new File("C:/3.wav")
try {
url= f1.toURL()
} catch (MalformedURLException e) {
// TODO Auto-generated catch block
e.printStackTrace()
}
ac= Applet.newAudioClip(cb1)
ac.play()
import java.applet.AudioClipimport java.io.*
import java.applet.Applet
import java.awt.Frame
import java.net.MalformedURLException
import java.net.URL
public class JavaClip extends Frame{
public JavaClip(){
super()
}
public static void main(String args[]) {
try {
URL cb
File f = new File("d:\\可爱.wav")//引号里面的是音乐文件所在的绝对鹿筋
cb = f.toURL()
AudioClip aau
aau = Applet.newAudioClip(cb)
aau.play()//循环播放 aau.play() 单曲 aau.stop()停止播放
JavaClip frame=new JavaClip()
//frame.setBounds(0, 0, 300, 200)
//frame.setVisible(true)
} catch (MalformedURLException e) {
e.printStackTrace()
}
}
}
package jmf.com
import java.awt.BorderLayout
import java.awt.Component
import java.awt.FileDialog
import java.awt.event.ActionEvent
import java.awt.event.ActionListener
import java.awt.event.ItemEvent
import java.awt.event.ItemListener
import java.awt.event.WindowAdapter
import java.awt.event.WindowEvent
import javax.media.ControllerClosedEvent
import javax.media.ControllerEvent
import javax.media.ControllerListener
import javax.media.EndOfMediaEvent
import javax.media.Manager
import javax.media.MediaLocator
import javax.media.NoPlayerException
import javax.media.Player
import javax.media.PrefetchCompleteEvent
import javax.media.RealizeCompleteEvent
import javax.media.Time
import javax.swing.JCheckBoxMenuItem
import javax.swing.JFrame
import javax.swing.JMenu
import javax.swing.JMenuBar
import javax.swing.JMenuItem
import javax.swing.SwingUtilities
import javax.swing.UIManager
public class JMFMediaPlayer extends JFrame implements ActionListener,
ControllerListener, ItemListener {
// JMF的播放器
Player player
// 播放器的视频组件和控制组件
Component vedioComponent
Component controlComponent
// 标示是否是第一次打开播放器
boolean first = true
// 标示是否需要循环
boolean loop = false
// 文件当前目录
String currentDirectory
// 构造方法
public JMFMediaPlayer(String title) {
super(title)
addWindowListener(new WindowAdapter() {
public void windowClosing(WindowEvent e){
// 用户点击窗口系统菜单的关闭按钮
// 调用dispose以执行windowClosed
dispose()
}
public void windowClosed(WindowEvent e){
if (player != null){
// 关闭JMF播放器对象
player.close()
}
System.exit(0)
}
})
// 创建播放器的菜单
JMenu fileMenu = new JMenu("文件")
JMenuItem openMemuItem = new JMenuItem("打开")
openMemuItem.addActionListener(this)
fileMenu.add(openMemuItem)
// 添加一个分割条
fileMenu.addSeparator()
// 创建一个复选框菜单项
JCheckBoxMenuItem loopMenuItem = new JCheckBoxMenuItem("循环", false)
loopMenuItem.addItemListener(this)
fileMenu.add(loopMenuItem)
fileMenu.addSeparator()
JMenuItem exitMemuItem = new JMenuItem("退出")
exitMemuItem.addActionListener(this)
fileMenu.add(exitMemuItem)
JMenuBar menuBar = new JMenuBar()
menuBar.add(fileMenu)
this.setJMenuBar(menuBar)
this.setSize(200, 200)
try {
// 设置界面的外观,为系统外观
UIManager.setLookAndFeel(UIManager.getSystemLookAndFeelClassName())
SwingUtilities.updateComponentTreeUI(this)
} catch (Exception e) {
e.printStackTrace()
}
this.setVisible(true)
}
/**
* 实现了ActionListener接口,处理组件的活动事件
*/
public void actionPerformed(ActionEvent e) {
if (e.getActionCommand().equals("退出")) {
// 调用dispose以便执行windowClosed
dispose()
return
}
FileDialog fileDialog = new FileDialog(this, "打开媒体文件", FileDialog.LOAD)
fileDialog.setDirectory(currentDirectory)
fileDialog.setVisible(true)
// 如果用户放弃选择文件,则返回
if (fileDialog.getFile() == null){
return
}
currentDirectory = fileDialog.getDirectory()
if (player != null){
// 关闭已经存在JMF播放器对象
player.close()
}
try {
// 创建一个打开选择文件的播放器
player = Manager.createPlayer(new MediaLocator("file:"
+ fileDialog.getDirectory() + fileDialog.getFile()))
} catch (java.io.IOException e2) {
System.out.println(e2)
return
} catch (NoPlayerException e2) {
System.out.println("不能找到播放器.")
return
}
if (player == null) {
System.out.println("无法创建播放器.")
return
}
first = false
this.setTitle(fileDialog.getFile())
// 播放器的控制事件处理
player.addControllerListener(this)
// 预读文件内容
player.prefetch()
}
/**
* 实现ControllerListener接口的方法,处理播放器的控制事件
*/
public void controllerUpdate(ControllerEvent e) {
// 调用player.close()时ControllerClosedEvent事件出现。
// 如果存在视觉部件,则该部件应该拆除(为一致起见,
// 我们对控制面板部件也执行同样的 *** 作)
if (e instanceof ControllerClosedEvent) {
if (vedioComponent != null) {
this.getContentPane().remove(vedioComponent)
this.vedioComponent = null
}
if (controlComponent != null) {
this.getContentPane().remove(controlComponent)
this.controlComponent = null
}
return
}
// 如果是媒体文件到达尾部事件
if (e instanceof EndOfMediaEvent) {
if (loop) {
// 如果允许循环,则重新开始播放
player.setMediaTime(new Time(0))
player.start()
}
return
}
// 如果是播放器预读事件
if (e instanceof PrefetchCompleteEvent) {
// 启动播放器
player.start()
return
}
// 如果是文件打开完全事件,则显示视频组件和控制器组件
if (e instanceof RealizeCompleteEvent) {
vedioComponent = player.getVisualComponent()
if (vedioComponent != null){
this.getContentPane().add(vedioComponent)
}
controlComponent = player.getControlPanelComponent()
if (controlComponent != null){
this.getContentPane().add(controlComponent, BorderLayout.SOUTH)
}
this.pack()
}
}
// 处理“循环”复选框菜单项的点击事件
public void itemStateChanged(ItemEvent e) {
loop = !loop
}
public static void main(String[] args){
new JMFMediaPlayer("JMF媒体播放器")
}
}
欢迎分享,转载请注明来源:内存溢出
微信扫一扫
支付宝扫一扫
评论列表(0条)