Мегаобучалка Главная | О нас | Обратная связь


Схемыалгоритмоврешениязадачииихописание



2018-07-06 328 Обсуждений (0)
Схемыалгоритмоврешениязадачииихописание 0.00 из 5.00 0 оценок




 

Руководствопользователя

 

Приложение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();}

}

}

}



2018-07-06 328 Обсуждений (0)
Схемыалгоритмоврешениязадачииихописание 0.00 из 5.00 0 оценок









Обсуждение в статье: Схемыалгоритмоврешениязадачииихописание

Обсуждений еще не было, будьте первым... ↓↓↓

Отправить сообщение

Популярное:
Модели организации как закрытой, открытой, частично открытой системы: Закрытая система имеет жесткие фиксированные границы, ее действия относительно независимы...
Личность ребенка как объект и субъект в образовательной технологии: В настоящее время в России идет становление новой системы образования, ориентированного на вхождение...
Почему человек чувствует себя несчастным?: Для начала определим, что такое несчастье. Несчастьем мы будем считать психологическое состояние...
Как построить свою речь (словесное оформление): При подготовке публичного выступления перед оратором возникает вопрос, как лучше словесно оформить свою...



©2015-2024 megaobuchalka.ru Все материалы представленные на сайте исключительно с целью ознакомления читателями и не преследуют коммерческих целей или нарушение авторских прав. (328)

Почему 1285321 студент выбрали МегаОбучалку...

Система поиска информации

Мобильная версия сайта

Удобная навигация

Нет шокирующей рекламы



(0.007 сек.)