Схемыалгоритмоврешениязадачииихописание
Руководствопользователя
ПриложениеBeatBoxпозволяетсоздаватьразличныекомпозиции. Ктомужеоноявляетсяклиентомдлячатаиобменапартитурами.
Вприложениинадоотметитьфлажкамикаждыйиз 16 «битов» (тактов). Например, впервомтакте (из 16) играютбольшойбарабанимаракас, во втором тишина, а в третьем играют маракас и закрытый хэт и т.д. В поле (1) находятся следующие кнопки: 1. Start (старт) – начало воспроизведения. 2. Stop (стоп) – конец воспроизведения. 3. TempoUp – ускорение темпа воспроизведения. 4. TempoDown– замедление темпа воспроизведения. 5. SendIt – отправляет сообщениеиз поля (2)вместе с текущей партитуройв чат. 6. SerializeIt – сохраняет текущую партитуру в файл. 7. Restore– восстанавливает партитуру из файла. В поле три приходят сообщения вместе с партитурой. Чтобы загрузить пришедшую партитуру, необходимо щёлкнуть на сообщение. Список литературы 1. ГОСТ 19.701-90 – Единая система программной документации – Схемы алгоритмов, программ, данных и систем – Условные обозначения и правила выполнения. 2. Сьерра. К. Изучаем Java. – Москва: Эксмо, 2016 – 720с. 3. Эккель Б. Философия Java. 4-е полное изд. – СПб.: Питер, 2015. – 1168 с. Листинг программы Исходный код основной программы:
packageCyberBeatBox;
importjavax.sound.midi.*; importjavax.swing.*; import javax.swing.event.ListSelectionEvent; import javax.swing.event.ListSelectionListener; import java.awt.*; import java.awt.event.ActionEvent; import java.awt.event.ActionListener; import java.io.FileInputStream; import java.io.FileOutputStream; import java.io.ObjectInputStream; import java.io.ObjectOutputStream; import java.net.Socket; import java.util.ArrayList; import java.util.HashMap; import java.util.Iterator; import java.util.Vector;
publicclass BeatBoxFinal {
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};
publicstaticvoid main (String[] args){ new BeatBoxFinal().startUp(args[0]); }
publicvoid 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(); }
publicvoid 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 MySaveListener()); buttonBox.add(saveIt);
JButton read =new JButton("Restore"); read.addActionListener(new MyReadInListener()); buttonBox.add(read);
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();//false, а затем добавляем их в массив c.setSelected(false);//ArrayList инапанель checkboxList.add(c); mainPanel.add(c); }// Конеццикла
theFrame.setBounds(50,50,300,300); theFrame.pack(); theFrame.setVisible(true); }// закрываемметод
publicvoid setUpMidi(){//Получаемобъект Sequencer, 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
publicvoid buildTrackAndStart() { // Здесь будут храниться инструменты // для каждого трека 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(new Integer(key)); } Else { trackList.add(null);//Этот слот в треке должен быть пустым } }// close inner
makeTracks(trackList); track.add(makeEvent(176,1,127,0,16)); }// close outer
// В результате мы всегда имеем 16 тактов track.add(makeEvent(192,9,1,0,15));
try{
sequencer.setSequence(sequence); sequencer.setLoopCount(sequencer.LOOP_CONTINUOUSLY); sequencer.start(); sequencer.setTempoInBPM(120); }catch(Exception e){e.printStackTrace();}
}// close method
//============================================================== inner class listeners
publicclass MyStartListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ buildTrackAndStart(); } }
publicclass MyStopListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ sequencer.stop(); } }
publicclass MyUpTempoListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ float tempoFactor = sequencer.getTempoFactor(); sequencer.setTempoFactor((float)(tempoFactor *1.03)); } }
publicclass MyDownTempoListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ float tempoFactor = sequencer.getTempoFactor(); sequencer.setTempoFactor((float)(tempoFactor *.97)); } }
publicclass MySendListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ // Создаём массив, в котором будут храниться только состояния флажков boolean[] checkboxState =newboolean[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"); } userMessage.setText(""); }// Закрываем метод }// Закрываем вложенный класс
publicclass MySaveListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ boolean[] checkboxState =newboolean[256];
for(int i =0; i <256; i++){ JCheckBox check =(JCheckBox) checkboxList.get(i); if(check.isSelected()){ checkboxState[i]=true; } }
try{ JFileChooser fileSave =new JFileChooser(); fileSave.showSaveDialog(theFrame);
FileOutputStream fileStream =new FileOutputStream(fileSave.getSelectedFile()); ObjectOutputStream os =new ObjectOutputStream(fileStream); os.writeObject(checkboxState);
}catch(Exception ex){ ex.printStackTrace(); } } }
publicclass MyListSelectionListener implements ListSelectionListener { publicvoid 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(); } } } }
publicclass MyReadInListener implements ActionListener { publicvoid actionPerformed(ActionEvent a){ boolean[] checkboxState =null; try{ JFileChooser fileOpen =new JFileChooser(); fileOpen.showOpenDialog(theFrame);
FileInputStream fileIn =new FileInputStream(fileOpen.getSelectedFile()); ObjectInputStream is =new ObjectInputStream(fileIn); checkboxState =(boolean[]) is.readObject(); }catch(Exception ex){ ex.printStackTrace(); }
changeSequence(checkboxState);
sequencer.stop(); buildTrackAndStart(); } }
publicclass RemoteReader implements Runnable { boolean[] checkboxState =null; String nameToShow =null; Object obj =null;
publicvoid 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 e){ e.printStackTrace();} } }
//==============================================================
publicvoid 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); } } }
publicvoid 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; } } Исходныйкодсервера:
package CyberBeatBox;
import java.io.*; import java.net.*; import java.util.*;
publicclass MusicServer { ArrayList clientOutputStreams;
publicstaticvoid main(String[] args){ new MusicServer().go(); }
publicclass ClientHandler implements Runnable { ObjectInputStream in; Socket sock;
public ClientHandler(Socket clientSOcket){ try{ sock = clientSOcket; in =new ObjectInputStream(sock.getInputStream());
}catch(Exception ex){ ex.printStackTrace();} }
publicvoid run(){ Object o1; Object o2; try{ while((o1 = in.readObject())!=null){ o2 = in.readObject(); System.out.println("read two objects"); tellEveryone(o1, o2); } }catch(Exception ex){ ex.printStackTrace();} } }
publicvoid go(){ clientOutputStreams =new ArrayList(); try{ ServerSocket serverSock =new ServerSocket(4242); while(true){ Socket clientSocket = serverSock.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();} }
publicvoid 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();} } } }
Популярное: Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы... Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение... Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние... Как построить свою речь (словесное оформление):
При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою... ©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (328)
|
Почему 1285321 студент выбрали МегаОбучалку... Система поиска информации Мобильная версия сайта Удобная навигация Нет шокирующей рекламы |