创建音乐盒播放器

<pre name="code" class="java">import javax.sound.midi.*;//使用命令列参数改变乐器和音符
public class MiniMusicCmdLine
{
	public static void main(String [] args)
	{
		MiniMusicCmdLine mini=new MiniMusicCmdLine();
		if(args.length<2)
			System.out.println("Don't forget the instrument and note args");
		else
		{
			System.out.println("main start");
			int instrument=Integer.parseInt(args[0]);
			int note=Integer.parseInt(args[1]);
			mini.play(instrument,note);
			System.out.println("main end");
		}
		System.out.println("main end");
	}
	public void play(int instrument,int note)
	{
		try{
			System.out.println("try start");
			Sequencer player=MidiSystem.getSequencer();
			player.open();
			Sequence seq =new Sequence(Sequence.PPQ,4);
			Track track=seq.createTrack();
			MidiEvent event = null;
			ShortMessage first=new ShortMessage();
			first.setMessage(192,1,instrument,0);
			MidiEvent changeInstrument=new MidiEvent(first,1);
			track.add(changeInstrument);
			ShortMessage a=new ShortMessage();
			a.setMessage(144,1,note,100);
			MidiEvent noteOn=new MidiEvent(a,1);
			track.add(noteOn);
			ShortMessage b=new ShortMessage();
			b.setMessage(128,1,note,100);
			MidiEvent noteOff=new MidiEvent(b,16);
			track.add(noteOff);
			player.setSequence(seq);
			player.start();
			System.out.println("try end");
		}catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}//e:\java project\head first java\chapter 11\minimusiccmdline

import javax.sound.midi.*;//此程序没有进行风险处理所以出错public class MusicTest1{public void play(){Sequencer sequencer=MidiSystem.getSequencer();//Sequencer的作用是蒋midi的信息组合成乐曲System.out.println("We got a sequencer");}public static void main(){MusicTest1 mt=new MusicTest1();mt.play();}}
 

import javax.sound.midi.*;//进行风险处理后的程序
public class MusicTest1
{
	public void play()
	{
		try
		{
			Sequencer sequencer=MidiSystem.getSequencer();
			System.out.println("Successfully got a sequencer");
		}
		catch(MidiUnavailableException ex)
		{
			System.out.println("Brummer");
		}
	}
	public static void main(String [] args)
	{
		MusicTest1 mt=new MusicTest1();
		mt.play();
	}
}

public void takeRisk()throws BadException{//throws throw try catch example
	if(abandonAllHope)
		throw new BadException();
}
public void crossFingers()
{
	try
	{
		anObject.takeRisk();
	}catch(BadException ex)
	{
		System.out.println("Aaargh!");
		ex.printStackTrace();
	}
}

public class TestExceptions//test exceptions
{
	public static void main(String [] args)
	{
		String test="no";
		try{
			System.out.println("start try");
			doRisky(test);
			System.out.println("end try");
		}catch(ScaryException se){
			System.out.println("Scary exception");
		}finally{
			System.out.println("finally");
		}
		System.out.println("end of main");
	}
	static void doRisky(String test)throws ScaryException{
		System.out.println("start risky");
		if("yes".equals(test))
		{
			throw new ScaryException();
		}
		System.out.println("end risky");
		return;
	}
}

public class Washer//ducking exceptions
{
	Laundry laundry=new Laundry();
	public void foo()throws ClothingException{
		laundry.doLaundry();
	}
	public static void main(String [] args)throws ClothingException{
		Washer a=new Washer();
		a.foo();
	}
}

import javax.sound.midi.*;//first 音乐盒
public class MiniMiniMusicApp
{
	public static void main(String [] args)//在main中若class 中实例变量或者函数声明为static则在main中不需要声明一个对象就可以直接用,否则则需要声明一个对象再调用函数或者实例变量
	{
		MiniMiniMusicApp mini =new MiniMiniMusicApp();
		mini.play();
	}
	public void play()
	{
		//取得Sequencer并将它打开
		try{
			Sequencer player =MidiSystem.getSequencer();
			player.open();
			Sequence seq=new Sequence(Sequence.PPQ,4);
			Track track=seq.createTrack();//取得track
			//对track加入几个MidiEvent,注意setMessage()的参数以及MidiEvent的constructor
			ShortMessage a=new ShortMessage();
			a.setMessage(141,1,44,100);
			MidiEvent noteOn=new MidiEvent(a,1);
			track.add(noteOn);

			ShortMessage b=new ShortMessage();
			b.setMessage(128,1,44,100);
			MidiEvent noteOff=new MidiEvent(b,16);
			track.add(noteOff);
			player.setSequence(seq);
			player.start();
		}catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}

import javax.sound.midi.*;//使用命令列参数改变乐器和音符
public class MiniMusicCmdLine
{
	public static void main(String [] args)
	{
		MiniMusicCmdLine mini=new MiniMusicCmdLine();
		if(args.length<2)
			System.out.println("Don't forget the instrument and note args");
		else
		{
			int instrument=Integer.parseInt(args[0]);
			int note=Integer.parseInt(args[1]);
			mini.play(instrument,note);
		}
	}
	public void play(int instrument,int note)
	{
		try{
			Sequencer player=MidiSystem.getSequencer();
			player.open();
			Sequence seq =new Sequence(Sequence.PPQ,4);
			Track track=seq.createTrack();
			MidiEvent event = null;
			ShortMessage first=new ShortMessage();
			first.setMessage(192,1,instrument,0);
			MidiEvent changeInstrument=new MidiEvent(first,1);
			track.add(changeInstrument);
			ShortMessage a=new ShortMessage();
			a.setMessage(144,1,note,100);
			MidiEvent noteOn=new MidiEvent(a,1);
			track.add(noteOn);
			ShortMessage b=new ShortMessage();
			b.setMessage(128,1,note,100);
			MidiEvent noteOff=new MidiEvent(b,16);
			track.add(noteOff);
			player.setSequence(seq);
			player.start();
		}catch(Exception ex)
		{
			ex.printStackTrace();
		}
	}
}


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

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值