Hey,
Voor een schoolprojectje maken we een spel in Java. Het is de bedoeling dat er in het spelmenu andere muziek afspeelt dan in het spel zelf. Hiervoor maken we gebruik van 2 verschillende sequencers. De code ziet er (enorm vereenvoudigd voor dit topic) zo uit:
Gebruik maken van slechts 1 sequencer en bij de onderste methoden slechts de sequence instellen is geen optie, want het is de bedoeling dat de muziek onderbroken en hervat wordt, niet opnieuw gestart. Het zou logisch zijn dat MidiSystem.getSequencer() altijd hetzelfde object returned, maar aangezien dit stuk code lange tijd bleek te werken, heb ik me er nooit vragen bij gesteld.
Wanneer iets geselecteerd wordt, doe ik simpelweg dit:
Wanneer er dan terug naar het menu gegaan wordt, doe ik het omgekeerde (1 methode switchSequencer() is in dit voorbeeld waarschijnlijk beter, maar je snapt het punt wel). Dit heeft altijd perfect gewerkt. Tot ik op school JRE6 moest installeren omdat een bepaald project niet in JRE7 niet werkend te krijgen was.
Met JRE6 geeft dit dus wel problemen. Als er tweemaal veranderd wordt, hoor je de 2 stukken muziek door elkaar. Ik vermoed dat dit komt door verkeerd gebruik van de getSequencer()-methode, maar heb geen idee hoe ik dit kan aanpassen en er ook voor kan zorgen dat de muziek gewoon hervat wordt en niet opnieuw gestart.
Ik heb even in Eclipse een heel simpel projectje aangemaakt om het probleem te illustreren. Als je het programma start en tweemaal op de knop klikt, zal je merken dat er niet goed opnieuw wordt overschakeld naar muziek #1. Als je echter in het bestand .classpath "JavaSE-1.6" naar "JavaSE-1.7" veranderd (en deze uiteraard ook allebei kunt gebruiken), zal je merken dat het opeens wel werkt. Link:
https://rapidshare.com/files/4086285036/TestMusicProblem.rar
Iemand een idee hoe ik dit best kan oplossen? Het zou leuk zijn mocht dit ook gewoon met met JRE6 werken. De midi-files zijn trouwens van een gratis midi-website gehaald, voor het geval er iemand hier moeilijk om wilt doen.
Bedankt!
Voor een schoolprojectje maken we een spel in Java. Het is de bedoeling dat er in het spelmenu andere muziek afspeelt dan in het spel zelf. Hiervoor maken we gebruik van 2 verschillende sequencers. De code ziet er (enorm vereenvoudigd voor dit topic) zo uit:
Java:
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
| import java.io.File; import javax.sound.midi.MidiSystem; import javax.sound.midi.Sequence; import javax.sound.midi.Sequencer; public class Music { private Sequencer sequencer1; private Sequencer sequencer2; private Sequence sequence1; private Sequence sequence2; public Music() { try { this.sequence1 = MidiSystem.getSequence(new File("midi1.mid")); this.sequence2 = MidiSystem.getSequence(new File("midi2.mid")); this.sequencer1 = MidiSystem.getSequencer(); this.sequencer2 = MidiSystem.getSequencer(); this.sequencer1.open(); this.sequencer2.open(); this.sequencer1.setSequence(sequence1); this.sequencer2.setSequence(sequence2); } catch (Exception e) { /* Jammer dan */ } } public void playSequencer1() { this.sequencer1.start(); } public void stopSequencer1() { this.sequencer1.stop(); } public void playSequencer2() { this.sequencer2.start(); } public void stopSequencer2() { this.sequencer2.stop(); } } |
Gebruik maken van slechts 1 sequencer en bij de onderste methoden slechts de sequence instellen is geen optie, want het is de bedoeling dat de muziek onderbroken en hervat wordt, niet opnieuw gestart. Het zou logisch zijn dat MidiSystem.getSequencer() altijd hetzelfde object returned, maar aangezien dit stuk code lange tijd bleek te werken, heb ik me er nooit vragen bij gesteld.
Wanneer iets geselecteerd wordt, doe ik simpelweg dit:
Java:
1
2
3
| music.stopSequencer1(); music.playSequencer2(); |
Wanneer er dan terug naar het menu gegaan wordt, doe ik het omgekeerde (1 methode switchSequencer() is in dit voorbeeld waarschijnlijk beter, maar je snapt het punt wel). Dit heeft altijd perfect gewerkt. Tot ik op school JRE6 moest installeren omdat een bepaald project niet in JRE7 niet werkend te krijgen was.
Met JRE6 geeft dit dus wel problemen. Als er tweemaal veranderd wordt, hoor je de 2 stukken muziek door elkaar. Ik vermoed dat dit komt door verkeerd gebruik van de getSequencer()-methode, maar heb geen idee hoe ik dit kan aanpassen en er ook voor kan zorgen dat de muziek gewoon hervat wordt en niet opnieuw gestart.
Ik heb even in Eclipse een heel simpel projectje aangemaakt om het probleem te illustreren. Als je het programma start en tweemaal op de knop klikt, zal je merken dat er niet goed opnieuw wordt overschakeld naar muziek #1. Als je echter in het bestand .classpath "JavaSE-1.6" naar "JavaSE-1.7" veranderd (en deze uiteraard ook allebei kunt gebruiken), zal je merken dat het opeens wel werkt. Link:
https://rapidshare.com/files/4086285036/TestMusicProblem.rar
Iemand een idee hoe ik dit best kan oplossen? Het zou leuk zijn mocht dit ook gewoon met met JRE6 werken. De midi-files zijn trouwens van een gratis midi-website gehaald, voor het geval er iemand hier moeilijk om wilt doen.
Bedankt!