Suonare con giava

Ci sto lavorando

 

 

Oggetto: Modelli da riutilizzare

 

 

Contenuti:

1

HTML.IT

2

 

3  
4  

 

Esempi:

1

 

2  
3  
4  

 

Se ci si limita ai file wav si può usare la libreria standard

 3 import javax.sound.sampled.AudioInputStream;
 4 import javax.sound.sampled.AudioSystem;
 5 import javax.sound.sampled.Clip;
 6 import javax.sound.sampled.UnsupportedAudioFileException;
 7 import javax.sound.sampled.LineUnavailableException;
 8 import java.io.IOException;
 9 import java.net.*;
10 import java.awt.Color;
11 import javax.swing.*;
...
17  Clip clip,clip1;
18     JButton jb1;
...
33     jb1 = new JButton();
34     jb1.setText("On");
35     jb1.setBounds(10,10, 100, 40);
36     jb1.addActionListener(new java.awt.event.ActionListener() {
37         public void actionPerformed(java.awt.event.ActionEvent evt) {
38            creaWav("/sound/ClickOn.wav");
39            clip1=clip;
40            clip1.start();
41         }
42     });
43     add(jb1);
...
57     private void creaWav(String pat){
58         //Clip clip;
59         try{
60             URL souURL = getClass().getResource(pat);
61             AudioInputStream  audioIn = AudioSystem.getAudioInputStream(souURL);
62             clip = AudioSystem.getClip();
63             clip.open(audioIn);
64            // clip.start();
65         } catch(Exception ex) {
66             System.err.println(ex.getMessage());
67         }            
69         /*                
70         }catch(UnsupportedAudioFileException e1) { 
71             System.err.println (e1);
72         }catch (IOException e2) { 
73             System.err.println (e2);
74         }catch(LineUnavailableException e3) {
75             System.err.println (e3);
76         }
77         */       
78     } 

 

Solo due particolarità:

I comandi devono essere assolutamente compresi in un bloco try-catch. Infatti queste classi possono scatenate le eccezioni descitte nella paret commentata. Ma visto che funziona lostesso ho preferito usare un catch piu generico ma più sintetico.

Se si vuole tenere il codice in un metodo (creaWav nel nostro caso) purtroppo bisogna utilizzare un'oggetto clip dichiarato esternamente. Se come avevo fatto precedentemente avessi usato un return a clip mi avrebbe dato errore non ho capito perchè.

 20 private Clip creaWav(String pat){
21         Clip clip;
22         try{
23             URL souURL = getClass().getResource(pat);
24             AudioInputStream  audioIn = AudioSystem.getAudioInputStream(souURL);
25             clip = AudioSystem.getClip();
26             clip.open(audioIn);
27         } catch(Exception ex) {
28             System.err.println(ex.getMessage());
29         }
30         return(clip);
31     }   
32 } 

 

Errore: variabile clip potrebbe non essere stta inizializzata!? Se si prova a inizializzarla così: Clip clip = new Clip(); da errore dicendo che essendo Clip uba classe astratta nonpuò essere inizializzata.