Sto creando un mio gioco in java riguardo il biliardo...ad esso ho aggiunto anche i suoni che vengono emessi agli urti tra le palline...per riprodurre questi suoni ho implementato (e uso) questo algoritmo :
dove "hit.wav" è il file musicale da riprodurre , e ogni volta che devo far suonare richiamo il metodo "suona ()"codice:public synchronized void suona () { try { File f = new File(getClass().getResource("/jpool/music/hit.wav")).toURI()); AudioFormat af = AudioSystem.getAudioFileFormat(f).getFormat(); ais = AudioSystem.getAudioInputStream(f); DataLine.Info info = new DataLine.Info(Clip.class,ais.getFormat(), (int) ais.getFrameLength()); ol = (Clip) AudioSystem.getLine(info); if (!ol.isOpen()) { ol.open(ais); } ol.loop(0); } catch (LineUnavailableException ex) { Logger.getLogger(Tavolo.class.getName()).log(Level.SEVERE, null, ex); } catch (UnsupportedAudioFileException ex) { Logger.getLogger(Tavolo.class.getName()).log(Level.SEVERE, null, ex); } catch (IOException ex) { Logger.getLogger(Tavolo.class.getName()).log(Level.SEVERE, null,ex); } catch (URISyntaxException ex) { Logger.getLogger(Tavolo.class.getName()).log(Level.SEVERE, null, ex); } }
Questo metodo funziona ma mi sembra molto dispendioso , infatti quando avvengono molti urti simultanei (tipo quando si sboccia) il gioco viene un po' rallentato a causa della riproduzione di questi numerosi suoni...
Arrivo al dunque , come potrei implementare il metodo suona in modo più efficiente e soprattutto meno dispendioso???

Rispondi quotando