Nessun risultato. Prova con un altro termine.
Guide
Notizie
Software
Tutorial
  • Lezione 133 di 134
  • livello avanzato
Indice lezioni

sintetizzare suoni

Il codice completo di un programma per sintetizzare suoni.
Il codice completo di un programma per sintetizzare suoni.
Link copiato negli appunti

Come ho gia detto è anche possibile sintetizzare suoni, questo è quello che fa il prossimo programma, da editare nel file sintetizzatore.java

import javax.swing.*;
import java.awt.*;
import java.awt.event.*;
import javax.swing.border.*;
import java.io.*;
import java.util.*;
import javax.sound.sampled.*;
import javax.sound.midi.*;
public class sintetizzatore extends JFrame
{
int TEMPO=50;
int CANALE=0;
int UNS=-1;
int StrUMENTO=0;
Sintetizzatore SINTETIZZATORE=new Sintetizzatore();
// GUI
JLabel tastiera1=new JLabel(new ImageIcon("tastiera1.gif"));
JLabel tastiera2=new JLabel(new ImageIcon("tastiera2.gif"));
JButton OkB=new JButton("Ok");

JComboBox Strumenti=new JComboBox();
JComboBox Canali=new JComboBox();
JLabel uns=new JLabel("Ultima nota suonata");
JTextField msg=new JTextField(
"Nessuna nota"
);
JSlider SL=new JSlider();
public sintetizzatore()
{
setTitle("Sintetizzatore sonoro by Pietro Castellucci");
setupAspetto();
setupValori();
setupEventi();
SINTETIZZATORE.setStrumento(
Strumenti.getSelectedIndex(),CANALE);
setresizable(false);
setdefaultCloseOperation(DO_NOTHING_ON_CLOSE);
pack();
Toolkit t = Toolkit.getdefaultToolkit();
Dimension d=t.getScreensize();
Dimension win=getsize();
win=getsize();
setLocation(d.width/2-(win.width/2)-1,d.height/2-(win.height/2)-1);
show();
}

void setupAspetto()
{
tastiera1.setCursor(new Cursor(Cursor.HAND_CURSOR));
tastiera2.setCursor(new Cursor(Cursor.HAND_CURSOR));
OkB.setCursor(new Cursor(Cursor.HAND_CURSOR));
tastiera1.setToolTipText(
"Cliccami per suonare"
);
tastiera2.setToolTipText(
"Cliccami per suonare"
);
OkB.setToolTipText(
"Esco dal programma"
);

JPanel P=new JPanel(new borderLayout());
JPanel Pannello=new JPanel(new GridLayout(2,1));
Pannello.add(tastiera1);
Pannello.add(tastiera2);
P.add(Pannello,borderLayout.CENTER);
JPanel SP=new JPanel(new FlowLayout());
Strumenti.setborder(
borderFactory.createTitledborder(
"Strumenti"
)
);
Canali.setborder(
borderFactory.createTitledborder(
"Canali"
)
);
SP.add(Strumenti);
// SP.add(Canali);
SP.add(uns);
msg.setEditable(false);
msg.setBackground(P.getBackground());
SP.add(msg);
SP.add(OkB);
P.add(SP,borderLayout.SOUTH);
SL.setborder(borderFactory.createTitledborder(
"Pressione "
));
SL.setOrientation(JSlider.VERTICAL);
SL.setMajorTickSpacing(25);
SL.setMaximum(100);
SL.setMinimum(0);
SL.setMinorTickSpacing(1);
SL.setPaintLabels(true);
SL.setPaintTicks(true);
SL.setPainttrack(true);
SL.setSnapToTicks(true);
SL.setValue(TEMPO);
P.add(SL,borderLayout.EAST);

setContentPane(P);
}

void setupValori()
{
try
{
int i=0;
while (true)
{
String nome= SINTETIZZATORE.Strumenti[i++].getName();
Strumenti.addItem(nome);
}
}
catch (ArrayIndexOutOfBoundsException e)
{};

try
{
int i=0;
while (true)
{
String nome="Canale"+" "+(i+1);
SINTETIZZATORE.CANALI[i++].allNotesOff();
Canali.addItem(nome);
}
}
catch (ArrayIndexOutOfBoundsException e)
{};
if (Strumenti.getItemCount()>0)
Strumenti.setSelectedIndex(StrUMENTO);
}

void setupEventi()
{
tastiera1.addMouseListener(new Tastiera1Listener());
tastiera2.addMouseListener(new Tastiera2Listener());

Strumenti.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
SINTETIZZATORE.setStrumento(
Strumenti.getSelectedIndex(),CANALE);
}
}
);

Canali.addItemListener(new ItemListener()
{
public void itemStateChanged(ItemEvent e)
{
CANALE=Canali.getSelectedIndex();
SINTETIZZATORE.cambiaCanale(CANALE);
}
});

OkB.addActionListener(new ActionListener()
{
public void actionPerformed(ActionEvent e)
{
System.out.println("Grazie per avere suonato con me!");
System.exit(0);
}
}
);

}
// Eventi

public class Tastiera1Listener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{
// System.out.println("Tastiera 1 Punto: (x="+e.getX()+",y="+e.getY()+")");
UNS=getNota(e.getX());
// System.out.println("Nota="+nota);
TEMPO=SL.getValue();
SINTETIZZATORE.suona(UNS,TEMPO,CANALE);
msg.setText(""+(UNS+1));
}
public void mouseReleased(MouseEvent e)
{}
}

public class Tastiera2Listener implements MouseListener
{
public void mouseClicked(MouseEvent e)
{}
public void mouseEntered(MouseEvent e)
{}
public void mouseExited(MouseEvent e)
{}
public void mousePressed(MouseEvent e)
{
// System.out.println("Tastiera 2 Punto: (x="+e.getX()+",y="+e.getY()+")");
UNS=64+getNota(e.getX());
// System.out.println("Nota="+nota);
TEMPO=SL.getValue();
SINTETIZZATORE.suona(UNS,TEMPO,CANALE);
msg.setText(""+(UNS+1));
}
public void mouseReleased(MouseEvent e)
{}
}

// Utility fun
int getNota (int pos)
{
int nota;
nota=(pos/12);
return nota;
}

public static void main(String[] arg)
{
new sintetizzatore();
}

//*****************************************
// SOUND MANAGER
//*****************************************
//***********************************************************
// Sintetizzatore:
//***********************************************************
public class Sintetizzatore
{
private Synthesizer SYNT;
private Sequencer sequencer;
private Sequence seq;
private Soundbank BANK;
public Instrument[] Strumenti;
public MidiChannel[] CANALI;
public Sintetizzatore()
{
setupSintetizzatore();
}
void setupSintetizzatore()
{
try
{
SYNT=MidiSystem.getSynthesizer();
sequencer=MidiSystem.getSequencer();
seq= new Sequence(Sequence.PPQ, 10);
SYNT.open();
BANK = SYNT.getdefaultSoundbank();
if (BANK != null)
Strumenti = SYNT.getdefaultSoundbank().getInstruments();
else
Strumenti = SYNT.getAvailableInstruments();
CANALI=SYNT.getChannels();
}
catch(MidiUnavailableException ecc){tuttonull();}
catch(InvalidMidiDataException ecc2){tuttonull();}
;
}
void tuttonull()
{
SYNT=null;
sequencer=null;
seq=null;
BANK=null;
Strumenti=null;
}
public void setStrumento(int str,int can)
{
SA=str;
int prog=Strumenti[str].getPatch().getProgram();
CANALI[can].programChange(prog);
}
private int SA=0;
public void cambiaCanale(int can)
{
int prog=Strumenti[SA].getPatch().getProgram();
CANALI[can].programChange(prog);
}
public void suona(int nota,int tempo, int canale)
{
CANALI[canale].allNotesOff();
CANALI[canale].noteOn(nota,tempo);
}
public void suona(int nota,int tempo)
{
suona(nota,tempo,0);
}
public void zitto()
{
CANALI[0].allNotesOff();
}

} // End of Sintetizzatore
}

Avrete notato la corposità del programma, non fatevi spaventare, perché la maggior parte del codice serve per la grafica e per sentire gli eventi, la parte interessante per sintetizzare suoni l'ho racchiusa nella sottoclasse Sintetizzatore, ovvero in
sintetizzatore.Sintetizzatore

ovvero la seguente:

//***********************************************************
// Sintetizzatore:
//***********************************************************
public class Sintetizzatore
{
private Synthesizer SYNT;
private Sequencer sequencer;
private Sequence seq;
private Soundbank BANK;
public Instrument[] Strumenti;
public MidiChannel[] CANALI;
public Sintetizzatore()
{
setupSintetizzatore();
}
void setupSintetizzatore()
{
try
{
SYNT=MidiSystem.getSynthesizer();
sequencer=MidiSystem.getSequencer();
seq= new Sequence(Sequence.PPQ, 10);
SYNT.open();
BANK = SYNT.getdefaultSoundbank();
if (BANK != null)
Strumenti = SYNT.getdefaultSoundbank().getInstruments();
else
Strumenti = SYNT.getAvailableInstruments();
CANALI=SYNT.getChannels();
}
catch(MidiUnavailableException ecc){tuttonull();}
catch(InvalidMidiDataException ecc2){tuttonull();}
;
}
void tuttonull()
{
SYNT=null;
sequencer=null;
seq=null;
BANK=null;
Strumenti=null;
}
public void setStrumento(int str,int can)
{
SA=str;
int prog=Strumenti[str].getPatch().getProgram();
CANALI[can].programChange(prog);
}
private int SA=0;
public void cambiaCanale(int can)
{
int prog=Strumenti[SA].getPatch().getProgram();
CANALI[can].programChange(prog);
}
public void suona(int nota,int tempo, int canale)
{
CANALI[canale].allNotesOff();
CANALI[canale].noteOn(nota,tempo);
}
public void suona(int nota,int tempo)
{
suona(nota,tempo,0);
}
public void zitto()
{
CANALI[0].allNotesOff();
}
} // End of Sintetizzatore

L'aspetto del programma è il seguente:

interfaccia

Ti consigliamo anche