[problem] dźwięk, gdy wcisnę przycisk

0

Witam,
chciałbym zrobić, aby, gdy wcisnę przycisk pojawiał się dźwięk.
Mój problem tkwi w tym, że dźwięk się pojawia, ale tylko za pierwszym wciśnięciem guzika. Kolejne wciśnięcia są "głuche".
Zrobiłem tak:

// Klasa
public class Klasa
{
	...
	public InputStream in;
        public AudioStream as;
        public File audio = new File("button.wav");
	...
	
	public Klasa() // konstruktor klasy
       {
           initComponents();

           try
          {
             in = new FileInputStream(audio);
          }
          catch(FileNotFoundException ex)
          {
             System.out.println("Blad1");
          }

          try
          {
             as = new AudioStream(in);
          }
          catch(IOException ex)
          {
             System.out.println("Blad2");
          }
     }
	
	// wciśniecie przycisku a
	private void aButtonActionPerformed(java.awt.event.ActionEvent evt) 
	{                                            
           if (evt.getSource() == aButton)
          {
               AudioPlayer.player.start(as);
	       ...
          }
	}
	...
}

Gdzie tkwi błąd?
Proszę o niedawanie linków do google itp.
Pozdrawiam

0

Gdzie tkwi błąd?
Zapewne w kodzie metody initComponenets(). W jaki sposób organizowane jest wywołanie metody aButtonActionPerformed?

0

Nie rozumiem Twojego pytania, mógłbyś jaśniej?
GUI robione jest w NetBeans. Do obsługi aButton użyte jest Events > Action > Action Performed

public boolean klik = true;
...
private void startButtonActionPerformed(java.awt.event.ActionEvent evt) 
{                                            

        if (evt.getSource() == startButton)
        {
            AudioPlayer.player.start(as);
            if(klik)
            { 
		...
	    }
            else
            {
			klik = true;
	    }
	}
}

aButton to klawisz start/stop

0

Standardowo po kliknięciu przycisku wywoływana jest metoda

public void actionPerformed(ActionEvent evt)

jakiegoś ActionListenera.
Jaki jest związek wspomnianej metody z Twoją metodą

private void aButtonActionPerformed(java.awt.event.ActionEvent evt) 
0

No chyba nie ma żadnego związku.
Coś być mi poradził w tej sprawie?

0

A nie możesz po prostu sobie dać w netbeans Events-mouse-mouseClicked?
Jaki jest powód uzycia "actionperfomed"?

Sam piszesz że chcesz by dzwięk był puszczany przy kliknięciu przycisku...to po co actionperfomed, który nigdy do końca nie wiedziałem jak się zachowuje - to jest taki event co łatwo "zapycha" albo wywoła się dwa razy, a takie strumieniowe rzeczy są wrażliwe na to.

0

A ja myślę, że błąd tkwi gdzie indziej, dźwięk działa przy pierwszym kliknięciu, nie ma mowy o błędach z wywoływaniem actionPerformed. Na moje błąd jest tutaj:

try
          {
             in = new FileInputStream(audio);
          }
          catch(FileNotFoundException ex)
          {
             System.out.println("Blad1");
          }

          try
          {
             as = new AudioStream(in);
          }
          catch(IOException ex)
          {
             System.out.println("Blad2");
          }

tworzysz AudioStream w konstruktorze głównej klasy, później go odtwarzasz (wszystko działa), ale jak drugi raz chcesz go odtworzyć, to ten AudioStream może jest 'wykorzystany'? W sensie 'przewinięty' (nie działałem na AudioStreamach, inaczej generowałem dźwięki do tej pory, ale taki problem umiał wystąpić). Wywal tworzenie obiektów AudioStream i FileInputStream z konstruktora, a wrzuć do metody actionPerformed bezpośrednio przed próbę wygenerowania dźwięku, albo (jeżeli ten Player ma takie metody wbudowane) zresetuj ścieżkę (żeby wróciła do początku).

0

Wywaliłem tworzenie obiektów AudioStream i FileInputStream z konstruktora wrzuciłem do metody actionPerformed bezpośrednio przed próbę wygenerowania dźwięku i pomogło.

Dziękuję, problem rozwiązany.

1 użytkowników online, w tym zalogowanych: 0, gości: 1