Newsgroup: it.comp.java
Titolo: Generare suoni.

Salve a tutti. Da qualche parte su internet ho estrapolato questo codice
che ho in parte riadattato:
import javax.sound.sampled.*;
public class Tone {
     //campionamenti al secondo
     public static final float SAMPLE_RATE = 8000f;
     /**
      * @param hz frequenza
      * @param msec durata in millisecondi
      * @throws javax.sound.sampled.LineUnavailableException eccezione
      */
     public static void sound(int hz, int msec) throws
LineUnavailableException {
         //creo un array di tipo byte da un solo elemento
         byte[] buf = new byte[1];
         AudioFormat af = new AudioFormat(SAMPLE_RATE, 8, 1, true, false);
         SourceDataLine sdl = AudioSystem.getSourceDataLine(af);
         sdl.open(af);
         sdl.start();
         for (int i=0; i < msec * 8; i++) {
             double angle = i / (SAMPLE_RATE / hz) * 2.0 * Math.PI;
             buf[0] = (byte)(Math.sin(angle) * 110.0);
             sdl.write(buf,0,1);
         }
         sdl.drain();
         sdl.stop();
         sdl.close();
     }
}
E questo è il main:
public class Main {
     public static void main(String[] args) {
         try {
             Tone.sound(1000, 1000);
             Tone.sound(700, 1000);
             Tone.sound(1200, 1000);
         }
         catch (LineUnavailableException e) {
              System.out.println(e);
         }
     }//fine main
}
Nella chiamata Tone.sound(1000, 1000); il primo argomento è la frequenza
in Hz, il secondo parametro la durata in millisecondi.
Tutto funziona, ma se riduco i tempi (ad esempio creo una piccola
applicazione che genera i codici morse) tra una chiamata e l'altra della
classe statica Tone si sentono dei "clic" molto fastidiosi ed inoltre il
suono risulta "impastato".
Non si riesce a creare una classe un po' più "furba" e che risenta meno
(o per nulla) delle variazioni veloci?
Spero di essermi spiegato al meglio...
Saluti.


Non sono sicura di aver ben capito.
In pratica quello che vorresti aggiungere è una sorta di filtro passa
altro per eliminare le frequenze che ti causano problemi?

 altro per eliminare le frequenze che ti causano problemi?
No, vorrei semplicemente poter gestire dei suoni in morse senza dei 
fastidiosi "click" sonori.
Infatii il mio script genera semplicemente un suono che devo per forza 
richiamare più volte per generare lunghezze differenti.
Ho notato che richiamandolo più volte, soprattutto con intervalli molto 
brevi l'uno dall'altro, genera un suono che fa schifo...
L'ideale sarebbe riuscire a generare un suono che sia già un carattere, 
in modo da non creare (ed eseguire) ogni volta un punto ed una linea, 
altrimenti da i problemi che dicevo prima.
Ho viosto che in giro ci sono anche librerie JMF per gestire audio/video 
in java, ma ho trovato anche ben poche info su come implementarle e non 
so nemmeno se fanno al caso mio.

 Passa basso.
Si ma in pratica? Avete provato per caso il codice che ho postato?

 Io no. Ti si è voluto dire di generare una forma d'onda meno spigolosa.
Ah ok, sorry non avevo intuito.. Vedrò se riesco a far qualcosa di meglio.
Nel frattempo segnalo un sito che ho trovato con fatica (ma che devo 
ancora visionare): 
http://www.developer.com/java/other/article.php/2226701
Potrebbe esser utile anche ad altri.
Saludos!