java大作业
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
java大作业
课程名称:java大作业
设计题目:简单的节奏发声器
学院:计算机科学与信息工程学院学生姓名:
学生学号:
专业班级:
指导教师:
年月日
1.简介
程序的主要功能有:提供用户界面,可勾选每组乐器的不同节拍的复选框组成一定规律的节奏发声,且带有播放、暂停、加快/减慢节奏的功能。主要涉及java程序设计以下部分:
(1)GUI编程:利用GUI接口使用相应的功能组件和合理的布局方式完成程序的用户界面。
(2)组件的事件监听:为相应的功能组件注册事件,利用实现ActionListener接口的内部类完成对应事件的事件监听。
(3)JavaSound API:程序主要用到只有MIDI部分,利用核心部分的Sequencer、Sequence与Track对象的方法,完成程序的具体节奏发声。
2.程序源码
package en;
import java.awt.*;
import javax.swing.*;
import javax.sound.midi.*;
import java.util.*;
import java.awt.event.*;
/*这个程序主要用到时JavaSound API的midi即电子发声装置的一些标准*/ public class BeatBox {
private JPanel mainPanel;
/*用于储存复选框*/
private ArrayList
/*Sequencer用于控制Sequence对象。
* 它用于将所有的midi数据送到正确装置,相当与实际生活的发声装置,如CD播放器。
* 哎哎不是我们考虑的问题啦!*/
private Sequencer sequencer;
/*Sequence 是一种数据结构,包含可由Sequencer 对象回放的音乐信息。
* 类似于生活中CD*/
private Sequence sequence;
private Track track;
/*Track 占用Sequencer 演奏的数据层次中的一个中间层。
* sequencer 演奏sequence,它包含音轨,而音轨包含MIDI 事件。
* Sequencer 可能提供mute 或solo 具体音轨的控制。
* 类似于播放的歌曲本身,而track也类似歌曲它是由许多的音符(相对应数字)组成的。
*/
private JFrame theFrame;
/*各种乐器的名称*/
private String[] instrumentNames={"低音鼓","闭镲","开镲","原声","铙钹","拍子","高音鼓","高音圆鼓","沙球","口哨","低音手鼓","颈铃","颤音叉","中低嗵鼓","高音撞铃","高音手鼓"};
/*各种乐器所对应的编号*/
private int[] instruments={35,42,46,38,49,39,50,60,70,72,64,56,58,47,67,63};
public static void main(String[] args) {
new BeatBox().buildGUI();
}
public void buildGUI(){
theFrame=new JFrame("Cyber BeatBox");
/*frame.setDefaultCloseOperation()是设置用户在此窗体上发起"close" 时默认执行的操作。
* EXIT_ON_CLOSE:使用System exit 方法退出应用程序。*/
theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
/*使用边界布局*/
BorderLayout layout=new BorderLayout();
JPanel background=new JPanel(layout);
/*设置边框属性距内部10像素*/
background.setBorder(BorderFactory.createEmptyBorder(10,10,10,10)); checkbokList=new ArrayList
/*Box容器用于放置按钮,设置从上到下纵向布置组件*/
Box buttonBox=new Box(BoxLayout.Y_AXIS);
/*开始播放,添加开始播放的事件监听*/
JButton start=new JButton("开始");
start.addActionListener(new MyStartListener());
buttonBox.add(start);
/*结束播放*/
JButton stop=new JButton("结束");
stop.addActionListener(new MyStopListener());
buttonBox.add(stop);
/*加快节奏*/
JButton upTempo=new JButton("加快");
upTempo.addActionListener(new MyUpTempoListener()); buttonBox.add(upTempo);
/*减慢节奏*/
JButton downTempo=new JButton("减慢");
downTempo.addActionListener(new MyDownTempoListener()); buttonBox.add(downTempo);
/*Box容器用于放置乐器名,设置从上到下纵向布置组件*/
Box nameBox=new Box(BoxLayout.Y_AXIS);
for(int i=0;i<16;i++){
nameBox.add(new Label(instrumentNames[i]));
}