Ik ben al een hele tijd bezig met een applicatie schrijven die een stukje audio via javax.sound.sampled.
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!
code:
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).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);
}
} |
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!