java 示例

package test;

import java.awt.BorderLayout;
import java.awt.GridLayout;
import java.awt.Label;
import java.awt.event.ActionEvent;
import java.awt.event.ActionListener;
import java.util.ArrayList;

import javax.sound.midi.InvalidMidiDataException;
import javax.sound.midi.MidiEvent;
import javax.sound.midi.MidiSystem;
import javax.sound.midi.Sequence;
import javax.sound.midi.Sequencer;
import javax.sound.midi.ShortMessage;
import javax.sound.midi.Track;
import javax.swing.BorderFactory;
import javax.swing.Box;
import javax.swing.BoxLayout;
import javax.swing.JButton;
import javax.swing.JCheckBox;
import javax.swing.JFrame;
import javax.swing.JPanel;

public class BeatBox {
JPanel mainPanel;
ArrayList<JCheckBox> checkboxList;
Sequencer sequencer;
Sequence sequence;
Track track;
JFrame theFrame;

String[] instrumentNames={
"Bass Drum","Closed Hi-Hat","Open Hi-Hat","Acoustic Snare",
"Crash Cymbal","Hand Clap","High Tom","Hi Bongo",
"Maracas","Whistle","Low Conga","Cowbell",
"Vibraslap","Low-mid Tom","High Agogo","Open Hi Conga"};
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(){
// the title for the frame
theFrame = new JFrame("Cyber BeatBox");
theFrame.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);
BorderLayout layout = new BorderLayout();
JPanel background = new JPanel(layout);
//设置面板上摆设组件时的空白边缘
background.setBorder(BorderFactory.createEmptyBorder(10,10,10,10));

checkboxList = new ArrayList<JCheckBox>();
Box buttonBox = new Box(BoxLayout.Y_AXIS);

JButton start = new JButton("Start");
start.addActionListener(new MyStartListener());
buttonBox.add(start);

JButton stop = new JButton("Stop");
stop.addActionListener(new MyStopListener());
buttonBox.add(stop);

JButton upTempo = new JButton("Tempo up");
upTempo.addActionListener(new MyUpTempoListener());
buttonBox.add(upTempo);

JButton downTempo = new JButton("Tempo down");
downTempo.addActionListener(new MyDownTempoListener());
buttonBox.add(downTempo);

Box nameBox = new Box(BoxLayout.Y_AXIS);
for(int i=0;i<16;i++){
nameBox.add(new Label(instrumentNames[i]));
}

background.add(BorderLayout.EAST,buttonBox);
background.add(BorderLayout.WEST,nameBox);

theFrame.getContentPane().add(background);

GridLayout grid = new GridLayout(16,16);
grid.setVgap(2);
grid.setHgap(2);
mainPanel = new JPanel(grid);
background.add(BorderLayout.CENTER,mainPanel);

for(int i=0;i<256;i++){
JCheckBox c = new JCheckBox();
c.setSelected(false);
checkboxList.add(c);
mainPanel.add(c);
}

setUpMidi();

theFrame.setBounds(50,50,300,300);
theFrame.pack();
theFrame.setVisible(true);
}

public void setUpMidi(){
try {
sequencer = MidiSystem.getSequencer();
sequencer.open();
sequence = new Sequence(Sequence.PPQ,4);
track = sequence.createTrack();
sequencer.setTempoInBPM(120);
} catch (Exception e) {
e.printStackTrace();
}
}

public void buildTrackAndStart(){
int[] trackList = null;

sequence.deleteTrack(track);
track = sequence.createTrack();

for(int i=0;i<16;i++){
trackList = new int[16];

int key = instruments[i];
for(int j=0;j<16;j++){
JCheckBox jc = (JCheckBox)checkboxList.get(j + (16*i));
if( jc.isSelected() ){
trackList[j] = key;
}else{
trackList[j] = 0;
}
}

makeTracks(trackList);
track.add(makeEvent(176,1,127,0,16));
}

track.add(makeEvent(192,9,1,0,15));

try {
sequencer.setSequence(sequence);
sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY);
sequencer.start();
sequencer.setTempoInBPM(20);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}

}

public class MyStartListener implements ActionListener{
public void actionPerformed(ActionEvent a){
buildTrackAndStart();
}
}

public class MyStopListener implements ActionListener{
public void actionPerformed(ActionEvent a){
sequencer.stop();
}
}

public class MyUpTempoListener implements ActionListener{
public void actionPerformed(ActionEvent a){
float tempoFactor = sequencer.getTempoFactor();
sequencer.setTempoFactor((float)(tempoFactor * 1.03));
}
}

public class MyDownTempoListener implements ActionListener{
public void actionPerformed(ActionEvent a){
float tempoFactor = sequencer.getTempoFactor();
sequencer.setTempoFactor((float)(tempoFactor * .97));
}
}

public void makeTracks(int[] list){
for(int i=0;i<16;i++){
int key= list[i];

if(key != 0){
track.add(makeEvent(144,9,key,100,i));
track.add(makeEvent(128,9,key,100,i++));
}
}
}

public MidiEvent makeEvent(int comd,int chan,int one,int two,int tick){
MidiEvent event = null;

try {
ShortMessage a = new ShortMessage();
a.setMessage(comd,chan,one,two);
event = new MidiEvent(a,tick);
} catch (InvalidMidiDataException e) {
e.printStackTrace();
}
return event;
}

}

时间: 2024-11-08 21:48:33

java 示例的相关文章

左右JAVA示例代码事件分发和监督机制来实现-绝对原创有用

文章标题:左右JAVA示例代码事件分发和监督机制来实现 文章地址: http://blog.csdn.net/5iasp/article/details/37054171 作者: javaboy2012Email:[email protected]qq:    1046011462 一.场景如果 如果有博客系统中须要实现例如以下功能: 系统中用户公布文章.改动文章.删除文章时,须要一些相关的操作须要运行. 公布文章后,给好友发送邮件通知.给用户加积分,对文章做全文索引. 改动文章后,给好友发送邮

课程作业01:模仿JavaAppArguments.java示例,编写一个程序,此程序从命令行接收多个数字,求和之后输出结果。

1.设计思想: 首先是从JavaAppArguments.java示例开始,此示例已打印参数,定义数字 之和和作为存储单位的整型,然后将输入参数的字符串转化为整型,之后求和即可. 2.程序源码: //课程作业01 //李慧,2016.9.20 package demo; public class CommandParameterSum { public static void main(String[] args) { // TODO Auto-generated method stub Sys

Ldap登陆AD(Active Directory)进行认证的Java示例

原文地址:http://hi.baidu.com/js2007/item/24efbb0fae1c9b90a3df432a package LdapTest; import java.util.Hashtable; import javax.naming.Context; import javax.naming.NamingEnumeration; import javax.naming.NamingException; import javax.naming.AuthenticationExc

HTTP基本认证(Basic Authentication)的JAVA示例

大家在登录网站的时候,大部分时候是通过一个表单提交登录信息.但是有时候浏览器会弹出一个登录验证的对话框,如下图,这就是使用HTTP基本认证.下面来看看一看这个认证的工作过程:第一步:  客户端发送http request 给服务器,服务器验证该用户是否已经登录验证过了,如果没有的话,服务器会返回一个401 Unauthozied给客户端,并且在Response 的 header "WWW-Authenticate" 中添加信息.如下图.第二步:浏览器在接受到401 Unauthozie

Hadoop 2.8.x 分布式存储 HDFS 基本特性, Java示例连接HDFS

02_note_分布式文件系统HDFS原理与操作,HDFS API编程:2.x下HDFS新特性,高可用,联邦,快照 HDFS基本特性 /home/henry/app/hadoop-2.8.1/tmp/dfs/name/current - on namenode cat ./VERSION namespaceID (空间标识号,类似集群识别号) /home/henry/app/hadoop-2.8.1/tmp/dfs/data – on datanode ls -lR blk_1073741844

Spark UDF Java 示例

Spark UDF Java 示例 在这篇文章中提到了用Spark做用户昵称文本聚类分析,聚类需要选定K个中心点,然后迭代计算其他样本点到中心点的距离.由于中文文字分词之后(n-gram)再加上昵称允许各个特殊字符(数字.字母.各种符号--),如果直接在原来的文本数据上进行聚类,由于文本的"多样性",聚类效果并不一定好.因此准确对昵称先进行一个预分类的过程,这里的分类不是机器学习里面的分类算法(逻辑回归.线性回归),而是根据昵称文本的特征进行分类:给定一个文本昵称字符串,分类方法逐个地

算法之冒泡排序(Java示例)

冒泡排序(英语:Bubble Sort) 是一种简单的排序算法.它重复地走访过要排序的数列,一次比较两个元素,如果他们的顺序错误就把他们交换过来.走访数列的工作是重复地进行直到没有再需要交换,也就是说该数列已经排序完成.这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端. 动画示意 实现示例 Java 1 public class BubbleSortExample { 2 3 static void bubbleSort(int[] arr){ 4 int len =

微信公众平台 java示例 接收消息并回复

最近公司在开发微信项目,所以自己也试着申请了个人的订阅服务号,实现了通过微信接收信息转发至java后台解析并回复的消息的简单功能,在还没忘记的时候记录一下,以便日后查阅,并且贡献出代码希望能给大家一个参考. 好首先你要看下面的示例,要事先申请微信公众平台的订阅服务号(个人只能申请这个),地址https://mp.weixin.qq.com ,申请的范例我这里就不讲了,一般根据提示可以自行完成,如果这都完成不了,那只能去度娘翻翻了. 要想让用户发送给公众帐号的消息转发给java后台服务器,首先要 

epub、ocf等常用电子书格式浅析----附JAVA示例程序

一. 电子书介绍 转载请注明http://www.cnblogs.com/xckk/p/6020324.html Epub(Electronic Publication)是一个完全开放和免费的电子书标准.是一个自由的开放标 准,属于一种可以“自动重新编排”的内容. “自动重新编排”的原因是内部使用XHTML来展现文件的内容,用一系列CSS来定义格式和版面设计,达到了内容和编排的分离. 现在EpubEpub包括三项主要规格: 开放出版结构(Open Publication Structure,OP

CentOS安装卸载memcache及JAVA示例

原文地址:http://www.cnblogs.com/zhongshengzhen/ 先安装libevent,memcached依赖libevent的lib [[email protected]_64_81_centos download]#  wget http://www.monkey.org/~provos/libevent-1.2.tar.gz [[email protected]_64_81_centos download]#  tar zxvf libevent-1.2.tar.g