[JAVA]Sampled audio stoppen

Pagina: 1
Acties:

  • conceicao
  • Registratie: December 2000
  • Laatst online: 11-04-2024
Ik ben al een hele tijd bezig met een applicatie schrijven die een stukje audio via javax.sound.sampled.

code:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
import java.io.File;
import java.io.IOException;
import java.awt.Panel;
import javax.sound.sampled.*; 

class AudioClipPlayer extends Panel {
    
    private Clip geluid;
    private AudioInputStream audioInputStream;
    private File soundFile;
    private AudioFormat audioFormat;
    private SourceDataLine line;
    private DataLine.Info info;
        
    private App myApplic;
    
    private boolean mute;
    
    private float gain = 100;
    

    public AudioClipPlayer() {
    }
         

        
    public void setMute(boolean TempMute) {
        mute = TempMute;
        System.out.println("mute setMute " + mute);
        }
        
    public boolean getMuteNow() {
        System.out.println("mute getMute " + mute);
        return mute;
        } 
        
    public void setGain (int gainValue) {
        gain = gainValue;
        }
    
    public float getGainNow() {
        return gain;
        }    
         
    public void playMusic(String filename, int mode){
        myApplic = new App();
        
        File fileIn = new File(filename);
                
        BooleanControl muteCtrl = null;
        FloatControl gainCtrl = null;       
                
        if (fileIn.exists()){
            System.out.println("ok");
        }
        
        else {
            System.out.println("File bestaat niet!");
        }
        
        AudioInputStream audioInputStream = null;
        try { 
            try { 
                audioInputStream = AudioSystem.getAudioInputStream(fileIn);
                }           
            catch(UnsupportedAudioFileException e){}
            }       
            catch(IOException e){}
        
        AudioFormat format = audioInputStream.getFormat();
        
        DataLine.Info info = new DataLine.Info(Clip.class,format);
        try{
            geluid = (Clip)AudioSystem.getLine(info);
            try{
                geluid.open(audioInputStream);
            }    
                catch(IOException e){}
        }   
        catch (LineUnavailableException ex){}
        
        
        muteCtrl = (BooleanControl)geluid.getControl(BooleanControl.Type.MUTE);
        muteCtrl.setValue(getMuteNow());
        System.out.println (muteCtrl);
        
        gainCtrl = (FloatControl)geluid.getControl(FloatControl.Type.MASTER_GAIN);
        gainCtrl.setValue(getGainNow());
        System.out.println (" VOLUME: " + gain);
                        
    switch (mode) {
            case 1:
                geluid.start();
                
            break;
            
            case 2:
                geluid.loop(geluid.LOOP_CONTINUOUSLY); 
                //Javax.sound wil een waarde voor het aantal loops
            break;
            
            case 3:
                geluid.stop();
                //werkt blijkbaar niet voor streamed geluid. Hoe het wel werkt weet ik niet.
                //Volgens mij kan het niet (System.exit(0); enige manier, maar beetje rigoreuze
                //manier om je muziekje te stoppen.
            break;
        }
        
    
        System.out.println(mode);
    }
}
Dit is dus de lap code van EEN class. Het probleem is dus dat als ik het geluid laat spelen (case 1) dat ik dit niet voortijdig kan laten stoppen (case 3).
Ik heb van alles geprobeerd bijv. ipv. geluid.stop(); -> line.close();, maar dit geeft een null-pointer exception.
Lijkt mij dat streamed audio toch te stoppen zou moeten zijn? Hopelijk is het probleem duidelijk en kan iemand me een tip geven!

  • wasigh
  • Registratie: Januari 2001
  • Niet online

wasigh

wasigh.blogspot.com

Heb je naar de JMF gekeken?
(Java Medie Framework)

  • ari3
  • Registratie: Augustus 2002
  • Niet online
wanneer je playMusic("bestand", 1) aanroept en daarna playMusic("bestand", 3) dan heb je twee verschillende instanties van Clip.

geluid.stop() zal daarom wel de tweede instantie stoppen, maar niet de eerste.

[ Voor 7% gewijzigd door ari3 op 21-03-2003 10:33 ]

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • conceicao
  • Registratie: December 2000
  • Laatst online: 11-04-2024
Kan ik dit oplossen door geen case te gebruiken maar voor iedere functie (stop, play, loop) een nieuwe public void te maken of maakt dat niets uit? Of is er nog een makkelijkere manier?

  • juanp
  • Registratie: Januari 2001
  • Laatst online: 18-08 20:35
voor elke knop moet je een apparte methode maken, dus een public void (play, loop, stop, enz.)

en die dan aanroepen vanaf je button naar deze class toe, maar of het dan opgelost is weet ik niet.

  • ari3
  • Registratie: Augustus 2002
  • Niet online
conceicao schreef op 21 maart 2003 @ 15:55:
Kan ik dit oplossen door geen case te gebruiken maar voor iedere functie (stop, play, loop) een nieuwe public void te maken of maakt dat niets uit? Of is er nog een makkelijkere manier?
Je moet zorgen dat je slechts één instantie van de Clip hebt. Daarna kun je inderdaad methoden maken voor stop, play, loop.

Uit je code blijkt n00b-heid. Geeft niets, maar een boekje over Java als taal lezen kan geen kwaad. Je vragen hebben niets te maken met het topic, maar over hoe je programma's schrijft in Java.

"Kill one man, and you are a murderer. Kill millions of men, and you are a conqueror. Kill them all, and you are a god." -- Jean Rostand


  • conceicao
  • Registratie: December 2000
  • Laatst online: 11-04-2024
ari3 schreef op 22 March 2003 @ 10:48:
[...]
Je moet zorgen dat je slechts één instantie van de Clip hebt. Daarna kun je inderdaad methoden maken voor stop, play, loop.

Uit je code blijkt n00b-heid. Geeft niets, maar een boekje over Java als taal lezen kan geen kwaad. Je vragen hebben niets te maken met het topic, maar over hoe je programma's schrijft in Java.
Neem me niet kwalijk voor mijn "n00bheid". (wat een denigrerend k#$ woord eigenlijk) Maar ik moet toch ergens beginnen. Ik heb diverse boeken geraadpleegd, maar werd er niet veel wijzer van, sorry. Vandaar nu mijn vraag en dankzij jullie denk ik dat ik het begrijp.

[ Voor 6% gewijzigd door conceicao op 22-03-2003 14:44 ]

Pagina: 1