Visualizzazione dei risultati da 1 a 2 su 2
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2010
    Messaggi
    35

    Algoritmo riproduzioni anche simultanee file wav?

    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 :
    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); } }
    dove "hit.wav" è il file musicale da riprodurre , e ogni volta che devo far suonare richiamo il metodo "suona ()"

    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???

  2. #2
    Secondo me un modo che hai per ottimizzare è caricare il file in memoria una sola volta in un metodo di inizializzazione
    invece di caricarlo ogni volta che chiami suona().

    Sicuramente c'è il modo per risuonare il sample da capo senza ricreare tutti gli oggetti.

    Forse Clipo.setFramePosition() potrebbe fare al caso tuo

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.