Visualizzazione dei risultati da 1 a 6 su 6

Discussione: [Java] Midi Audio

  1. #1

    [Java] Midi Audio

    Ciao a tutti mi sono inchiodato su un problema che sicuramente è una cretinata:

    ho creato un riproduttore di file midi, riesco a far partire il brano, ma non riesco a stopparlo:

    bottone play

    codice:
    bPlay.addActionListener(new ActionListener() { 
                   public void actionPerformed(ActionEvent arg0) { 
                           Player player = new Player(); 
                           player.getSequence(selectedFile); 
                  } 
    });
    carico il sequence e richiamo Play();

    codice:
    public Sequence getSequence(File sound){ 
                try { 
                     sequence = MidiSystem.getSequence(sound); 
                     Play(sequence); 
                     return sequence; 
               } catch (InvalidMidiDataException e) { 
                     e.printStackTrace(); return null; 
               } catch (IOException e) { 
                     e.printStackTrace(); 
                     return null; 
               } 
    }

    codice:
    public void Play (Sequence sequence){ 
              if (sequencer != null && sequence != null && sequencer.isOpen()) { 
              try { 
                      sequencer.setSequence(sequence); 
                      sequencer.start(); 
              } catch (InvalidMidiDataException ex) { 
                      ex.printStackTrace(); } 
              } 
    }
    il bottone stop
    codice:
    bStop.addActionListener(new ActionListener() {  
                  public void actionPerformed(ActionEvent e) { 
                        Player player = new Player(); 
                        player.Stop(); 
                  } 
    });

    codice:
    public void Stop(){ 
                  if (!sequencer.isRunning() && sequencer.isOpen()){ 
                     sequencer.stop(); 
                     sequencer.setMicrosecondPosition(0); 
                     sequencer.close(); 
                  } 
    }
    Dove sbaglio?

  2. #2
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    Nel fatto che fai
    codice:
    Player player = new Player();
    nel codice del bottone Stop. In questo modo, infatti, costriusci un nuovo player totalmente slegato da quello in cui hai inserito la "sequenza". Il metodo Stop di Player deve essere richiamato sullo stesso oggetto su cui chiami il metodo Play.

    Ciao []

  3. #3
    Ciao, grazie di aver risposto.
    Pensavo anche io fosse li, ma anche se creo un solo Player(), per start() funziona, stop() no.

    Debuggando ho notato che l'evento sul bottone viene perfettamente recepito, ma non stoppa l'audio.

  4. #4
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    Metti qualche System.out.println per vedere come si muove il flusso: una volta premuto il tasto stop, richiama il metodo? Entra nell'if? Ovviamente ci deve essere un solo Player.

    Ciao

  5. #5
    Si, il metodo viene richiamato entra nell'If e viene "percorso" completamente, ma niente stop.
    Proprio non riesco a capire

    Ciao

  6. #6
    Utente di HTML.it L'avatar di progAnd
    Registrato dal
    Jan 2012
    Messaggi
    119
    Il sequencer dove e come è inizializzato? È accessibile lo stesso sequencer a tutto il programma?

    Ciao

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.