Visualizzazione dei risultati da 1 a 10 su 10
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420

    [java] thread e suoni

    ciao a tutti,
    c'è qualcuno che sa se sia possibile gestire i suoni in un thread separato rispetto al programma principale?
    Io sto realizzando un progetto in cui non faccio uso dei thread ma vorrei usarne uno per la gestione dei suoni perchè il programma si rallenta in modo impressionante..

    Se qualcuno ha anche qualche link o del codice, posti pure
    the sALIEN

  2. #2
    Certo che si può, se vuoi puoi usare una mia classe, usa un thread e suona i wav e gli aiff, la puoi scaricare a questo link:

    www.code4fun.org/public/waveplayer.zip

    C'è la classe WAVE e un main per farti vedere come funziona, c'è anche il jar da cliccare per vedere subito un mini player che sfrutta la classe WAVE appunto...

    L'uso in generale è molto semplice:

    WAVE vawe = new WAVE();
    if (wave.init("path")) wave.play();
    else System.out.println(wave.error);

    poi ci sono altri metodi come stop() per fermare e setLoop(true/false) per settare la ripetizione continua del brano...

    Spero ti possa essere utile...

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    grazie mille!

    ma ascolta, io questo thread dove lo dovrei mettere?

    io ho una cosa di questo tipo:

    codice:
        import java.awt.*;
        import javax.swing.*;
        import java.io.*;
    
        public class Main
        {
    
        public static void main(String [] argrs)
        {
    
        JFrame frame = new mioFrame();
        frame.setVisible(true);
        }
        }

    codice:
    
    
        import java.awt.*;
        import java.awt.event.*;
        import java.io.*;
        import java.util.*;
        import javax.swing.*;
    
    
        public class MioFrame extends JFrame
        {
    
        public Pannello_intro pannello;
    
        Container contentPane = getContentPane();
    
        public MioFrame()
        {
        setTitle("ciao");
        setSize(1024, 76;
        setLocation(0,0);
        setDefaultCloseOperation(EXIT_ON_CLOSE);
    
        pannello = new introduzione();
    
        setContentPane(panelGioco);
        }
        }

    codice:
    
        public class Pannello_intro extends JPanel
        {
        private int x;
        public Pannello_intro()
        {
        paint()
        {
        if(condizione) metodo1();
        }
    
        private void metodo1(){
        drawString(ecc..);
        MUSICA1;
        }
    
        private voidmetodo2()
        {
        MUSICA2;
        }
    
        }

    Grazie di nuovo !
    the sALIEN

  4. #4
    Non lo devi METTERE da nessuna parte

    Dopo aver costruito un oggetto della classe WAVE

    WAVE suono = new WAVE();

    puoi inizializzarlo con la path del wav da suonare:

    suono.init(path-file);

    e quindi "suonarlo" con suono.play();

    L'invocazione del metodo play crea il thread e lo lancia in esecuzione, quando il file termina o chiami il metodo stop il thread termina e vengono rilasciate le risorse utilizzate.

    Per suonare un altro file:
    reinizializzi -> suono.init(path-file2);

    e risuoni -> suono.play();


    E' bene che testi il valore di ritorno del metodo init() perchè se c'è qualche problema (ad esempio è stato selezionato un file .txt o l'hardware non dispone di una scheda audio) potrai evitare di chiamare play() ed anzi mostrare l'errore che trovi in formato String in suono.error

  5. #5
    Con "non devi metterlo da nessuna parte" intendevo dire al contrario mettilo dove vuoi o meglio dove ti serve.
    Dove hai necessità di riprodurre un wav dovrai poter creare un oggetto della classe WAVE.
    E' un oggetto come gli altri che sai già usare...

  6. #6
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    uhm.. penso di aver capito.. ora provo e poi ti faccio sapere..
    ciao!
    the sALIEN

  7. #7
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    ho fatto come dicevi tu ma niente.. non fa lo stesso, è troppo lento il gioco.. serve un thread anche se non so come e dove lo debba mettere..
    the sALIEN

  8. #8
    guarda che se usi la mia classe il suono viene riprodotto da un thread separato (e mi pare di avertelo già detto, mica scherzavo!) quindi forse il tuo problema è un altro.


  9. #9
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    purtroppo si rallenta tutto.. forse sbaglio il posto dove inserire i suoni


    Ora sto provando a modificare questa classe per capire il motivo per cui si rallenta tutto ma non so come implementare stop e loop.. qualche idea??
    codice:
    import javax.sound.midi.*;
    
    import java.io.*;
    public class Midi {
    
    private int quale;
    File midiFile;
    
        public Midi( int x) 
        { 
            quale = x;
            
            try {
                
                switch(quale)
                {
                 case 1: 
                 {
                    midiFile = new File("tie28.mid");
                    break;
                 }
                 case 2: 
                 {
                     midiFile = new File("ctundsea.mid");
                     break;
                 }
                 case 3: 
                 {
                    midiFile = new File("ff3over.mid");
                    break;
                 }
                 case 4:
                 {
                     midiFile = new File("map09.mid");
                     break;
                 }
                 case 5:
                 {
                     midiFile = new File("map28.mid");
                     break;
                 }
                 case 6:
                 {
                     midiFile = new File("tie26.mid");
                     break;
                 }
                 default:
                 {
                     midiFile = new File("Xenon_2.mid"); 
                     break;
                 }
            }
                 
                Sequence sequence = MidiSystem.getSequence( midiFile );
                Sequencer sequencer = MidiSystem.getSequencer();
                
                sequencer.open();
                sequencer.setSequence( sequence );
                
                Synthesizer synth = MidiSystem.getSynthesizer();
                synth.open();
                
                Transmitter transmitter = sequencer.getTransmitter();
                transmitter.setReceiver( synth.getReceiver() );
                
                sequencer.start();
            } catch( Exception ex ) {
                ex.printStackTrace();
            }
        }
    }
    the sALIEN

  10. #10
    Utente di HTML.it
    Registrato dal
    Jan 2005
    Messaggi
    420
    qlc mi aiuti x favore!! è molto molto urgente!
    the sALIEN

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.