beatbox最终版本
来源:互联网 发布:淘宝蓝海产品 编辑:程序博客网 时间:2024/04/28 11:34
//BeatBox服务器端最终版import java.io.*;import java.net.*;import java.util.*;public class MusicServer{ArrayList<ObjectOutputStream> clientOutputStreams;public static void main(String [] args){new MusicServer().go();}public class ClientHandler implements Runnable{ObjectInputStream in;Socket clientSocket;public ClientHandler(Socket socket){try{clientSocket=socket;in=new ObjectInputStream(clientSocket.getInputStream());}catch(Exception ex){ex.printStackTrace();}}public void run()//服务器接受并传送2个对象{Object o2=null;Object o1=null;try{while((o1=in.readObject())!=null){o2=in.readObject();System.out.println("read two Objects");tellEveryone(o1,o2);}}catch(Exception ex){ex.printStackTrace();}}}public void go(){clientOutputStreams=new ArrayList<ObjectOutputStream>();try{ServerSocket serverSocket=new ServerSocket(4242);while(true){Socket clientSocket=serverSocket.accept();ObjectOutputStream out=new ObjectOutputStream(clientSocket.getOutputStream());clientOutputStreams.add(out);Thread t=new Thread(new ClientHandler(clientSocket));t.start();System.out.println("got a connection");}}catch(Exception ex){ex.printStackTrace();}}public void tellEveryone(Object one,Object two){Iterator it=clientOutputStreams.iterator();while(it.hasNext()){try{ObjectOutputStream out=(ObjectOutputStream)it.next();out.writeObject(one);out.writeObject(two);}catch(Exception ex){ex.printStackTrace();}}}}
package AppendixA;// chapter 14import java.awt.*;import javax.swing.*;import javax.swing.event.ListSelectionEvent;import javax.swing.event.ListSelectionListener;import java.io.*;import javax.sound.midi.*;import java.util.*;import java.awt.event.*;import java.net.*;public class BeatBoxFinal { // implements MetaEventListener JPanel mainPanel; JList incomingList; JTextField userMessage; ArrayList<JCheckBox> checkboxList; int nextNum; ObjectInputStream in; ObjectOutputStream out; Vector<String> listVector = new Vector<String>(); String userName ; HashMap<String, boolean[]> otherSeqsMap = new HashMap<String, boolean[]>(); Sequencer sequencer; Sequence sequence; Sequence mySequence = null; 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 BeatBoxFinal().startUp(args[0]); } public void startUp(String name) { userName = name; try { Socket sock = new Socket("127.0.0.1", 4242); out = new ObjectOutputStream(sock.getOutputStream()); in = new ObjectInputStream(sock.getInputStream()); Thread remote = new Thread(new RemoteReader()); remote.start(); } catch (Exception ex) { System.out.println("couldn't connect - you'll have to play alone."); } setUpMidi(); buildGUI(); } public void buildGUI() { 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); JButton sendIt = new JButton("sendIt"); sendIt.addActionListener(new MySendListener()); buttonBox.add(sendIt); JButton saveIt = new JButton("Serialize It"); // new button saveIt.addActionListener(new MySendListener()); buttonBox.add(saveIt); userMessage = new JTextField(); buttonBox.add(userMessage); incomingList = new JList(); incomingList.addListSelectionListener(new MyListSelectionListener()); incomingList.setSelectionMode(ListSelectionModel.SINGLE_SELECTION); JScrollPane theList = new JScrollPane(incomingList); buttonBox.add(theList); incomingList.setListData(listVector); 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(1); 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); } // end loop theFrame.setBounds(50,50,300,300); theFrame.pack(); theFrame.setVisible(true); } // close method public void setUpMidi() { try { sequencer = MidiSystem.getSequencer(); sequencer.open(); // sequencer.addMetaEventListener(this); sequence = new Sequence(Sequence.PPQ,4); track = sequence.createTrack(); sequencer.setTempoInBPM(120); } catch(Exception e) {e.printStackTrace();} } // close method public void buildTrackAndStart() { // this will hold the instruments for each vertical column, // in other words, each tick (may have multiple instruments) ArrayList<Integer> trackList = null; sequence.deleteTrack(track); track = sequence.createTrack(); for (int i = 0; i < 16; i++){ trackList = new ArrayList<Integer>(); for (int j = 0; j < 16; j++){ JCheckBox jc = (JCheckBox) checkboxList.get(j + (16 * i)); if (jc.isSelected()){ int key = instruments[i]; trackList.add(key); } else { trackList.add(null); } } // close inner makeTracks(trackList); } // close outer track.add(makeEvent(192,9,1,0,15)); // - so we always go to full 16 beats try { sequencer.setSequence(sequence); sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY); sequencer.start(); sequencer.setTempoInBPM(120); } catch(Exception e) {e.printStackTrace();} } // close method //============================================================== inner class listeners 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 class MySendListener implements ActionListener { // new - save public void actionPerformed(ActionEvent a) { // make an arraylist of just the STATE of the checkboxes boolean[] checkboxState = new boolean[256]; for (int i = 0; i < 256; i++) { JCheckBox check = (JCheckBox) checkboxList.get(i); if (check.isSelected()) { checkboxState[i] = true; } } try { out.writeObject(userName + nextNum++ + ": " + userMessage.getText()); out.writeObject(checkboxState); } catch(Exception ex) { ex.printStackTrace(); System.out.println("sorry dude. Could not send it to the server"); } } // close method } // close inner class public class MyListSelectionListener implements ListSelectionListener { public void valueChanged(ListSelectionEvent le) { if (!le.getValueIsAdjusting()) { String selected = (String) incomingList.getSelectedValue(); if (selected != null) { boolean[] selectedState = (boolean[]) otherSeqsMap.get(selected); changeSequence(selectedState); sequencer.stop(); buildTrackAndStart(); } } } } /*public class RemoteReader implements Runnable{boolean [] checkboxState=null;String nameToShow = null;Object obj=null;public void run(){try{while((obj=in.readObject())!=null){System.out.println("got an object from server");System.out.println(obj.getClass());nameToShow=(String)obj;checkboxState=(boolean [])in.readObject();otherSeqsMap.put(nameToShow,checkboxState);listVector.add(nameToShow);incomingList.setListData(listVector);}}catch(Exception ex){ex.printStackTrace();}}}*/ public class RemoteReader implements Runnable { boolean[] checkboxState = null; String nameToShow = null; Object obj = null; public void run() { try { while ((obj=in.readObject()) != null) { System.out.println("got an object from server"); System.out.println(obj.getClass()); String nameToShow = (String) obj; checkboxState = (boolean[]) in.readObject(); otherSeqsMap.put(nameToShow, checkboxState); listVector.add(nameToShow); incomingList.setListData(listVector); } }catch (Exception e) { e.printStackTrace(); } } }//============================================================== public void changeSequence(boolean[] checkboxState) { for (int i = 0; i < 256; i++) { JCheckBox check = (JCheckBox) checkboxList.get(i); if (checkboxState[i]) { check.setSelected(true); } else { check.setSelected(false); } } } public void makeTracks(ArrayList<Integer> list) { Iterator it = list.iterator(); for (int i = 0; i < 16; i++) { Integer num = (Integer) it.next(); if (num != null) { int numKey = num.intValue(); track.add(makeEvent(144, 9, numKey, 100, i)); track.add(makeEvent(128, 9, numKey, 100, i+1)); } } } 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(Exception e) { } return event; }}
0 0
- beatbox最终版本
- 最终版本
- 创建BeatBox
- 存贮beatbox
- 图片上传最终版本
- 解析器最终版本
- UIQ3.1最终稳定版本
- wince 播放器 最终版本
- 最终版本NandFlash分区信息
- 最终的Linux版本决定
- Java: BeatBox 网络版
- Head_First_Java之BeatBox.java
- DoomIII预演版的最终版本
- 英特尔发布下一代音频技术最终版本
- Ext.form.ComboBox 表格下拉最终版本
- [转帖]Android Permission大全1.0最终版本
- SQL----动态分页存储过程最终版本
- Android Permission大全1.0最终版本
- 从Android资源角度谈Android代码内存优化
- OC学习笔记21--OC中集合类的读写文件操作及NSData与NSValue
- vps建站及相关知识整理
- bzoj 2594
- atitit.js 与c# java交互html5化的原理与总结.doc
- beatbox最终版本
- 关于C++函数调用的那些事儿
- 学习matlab小结(1)-monte carlo & binomial method-2015.08.18
- HashMap的用法
- 黑马程序员_Java入门及基础语法上
- Maven学习 (四) 使用Nexus搭建Maven私服
- HDU 3342 Legal or Not(强连通)
- Maven学习 (五) Elipse中发布一个Maven项目到Tomcat
- Maven学习 (六) 搭建多模块企业级项目