j2me 播放语音 文件(wav mid等)

package com.lc.media;

/*
 * 解决播放音乐文件卡:
 * 1.使用Thread
 * 2.不能在播放时调用 player.close()/inputStream.close()i
 * 而是应该在PlayerListener中调用该函数来关闭资源
 */
import java.io.IOException;
import java.io.InputStream;

import javax.microedition.lcdui.Command;
import javax.microedition.lcdui.CommandListener;
import javax.microedition.lcdui.Display;
import javax.microedition.lcdui.Displayable;
import javax.microedition.lcdui.Form;
import javax.microedition.media.Manager;
import javax.microedition.media.Player;
import javax.microedition.media.PlayerListener;
import javax.microedition.midlet.MIDlet;
import javax.microedition.midlet.MIDletStateChangeException;

public class MIDlet3MusicWithThread extends MIDlet implements PlayerListener {

	private Form form = new Form("music");
	private Command exitCmd = new Command("exit", Command.EXIT, 1);
	private Command music1Cmd = new Command("1", Command.SCREEN, 1);

	protected void destroyApp(boolean arg0) throws MIDletStateChangeException {
		// TODO Auto-generated method stub

	}

	protected void pauseApp() {
		// TODO Auto-generated method stub

	}

	protected void startApp() throws MIDletStateChangeException {
		Display.getDisplay(this).setCurrent(form);
		form.addCommand(exitCmd);
		form.addCommand(music1Cmd);
		form.setCommandListener(new CommandListener() {

			public void commandAction(Command cmd, Displayable arg1) {
				// TODO Auto-generated method stub
				if (cmd == exitCmd) {
					notifyDestroyed();
				} else if (cmd == music1Cmd) {
					new Music1Thread().start();
				}
			}
		});

	}

	public void playerUpdate(Player player, String event, Object eventData) {
		// TODO Auto-generated method stub

	}

	class Music1Thread extends Thread implements PlayerListener {
		InputStream is;
		Player player;

		public void run() {
			// TODO Auto-generated method stub
			try {
				is = this.getClass().getResourceAsStream("/Audio.wav");
				// is = this.getClass().getResourceAsStream("/halt.wav");
				player = (Player) Manager.createPlayer(is, "audio/x-wav");

				player.realize();
				System.out.println("-------------");
				System.out.println("realize");
				form.append("realize");
				player.prefetch();
				System.out.println("prefetch");
				form.append("prefetch");
				player.addPlayerListener(this);
				System.out.println("addPlayerListner");
				form.append("addPlayerListener");
				player.start();
				System.out.println("start");
				form.append("start");

			} catch (Exception e) {
				// TODO: handle exception
			} finally {
				/*
				 * 导致音乐播放卡的原因 if(null != player) { player.close(); } if(null !=
				 * is) { try { is.close(); } catch (IOException e) { // TODO
				 * Auto-generated catch block e.printStackTrace(); } }
				 */
			}

			super.run();
		}

		public void playerUpdate(Player player, String event, Object obj) {
			// TODO Auto-generated method stub

			if (PlayerListener.END_OF_MEDIA.equals(event)) {
				System.out.println("close");
				form.append("close");
				if(null != player)
				{
					player.close();
				}
				
				if(null != is)
				{
					try {
						is.close();
					} catch (IOException e) {
						// TODO Auto-generated catch block
						e.printStackTrace();
					}
				}
			}
		}
	}
}

解决播放音乐文件卡:
 * 1.使用Thread

 * 2.不能在播放时调用 player.close()/inputStream.close()

而是应该在PlayerListener中调用该函数来关闭资源


player = (Player) Manager.createPlayer(is, "audio/x-wav"); // wav文件
player = (Player) Manager.createPlayer(is, "audio/midi");//mid文件


mid文件的加载速度高于wav


  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值