Clip ende abwarten

Hallo Leute.
Nun ja ich steh mal wieder vor nem anfänger problem. Ich hab nun folgenden code um ne liste aus sounsd abzuspielen, (aus ner hashmap),
das ganze sollte natürlich nacheinaner geschehen. Nun, sie werden alle gleichzeitig abgespielt. was tun?

Vielen Dank!

Code:

		public void mousePressed(MouseEvent e){
			for(String s : soundsToPlay){
				Clip c = sounds.get(s);
				c.setFramePosition(0);
				c.loop(0);
			}
		}
	}```

*** Edit ***

Also... man merkt ja immer wieder das ich noch ein anfänger bin... (:blue:) 
aber ist das so ok?

```while(c.getFramePosition() < c.getFrameLength()){}```

das einfach nach clip.loop(0)...

wichtig wäre, sich grundlegend zu informieren, gibt es keine seitenlangen Tutorials dazu?
alles hier im Forum zu fragen ist eine Taktik…, aber die Welt ist noch größer!

falls auch andere Möglichkeiten deinen Ansprüche genügen,
dann hier z.B. „java clip wait for end“ in eine Suchmaschine fand für mich in Sekunden

kommt mir bekannt vor auch von anderen Themen dazu, aber habe ich selber letztlich nie benutzt, kann ich alles nicht beurteilen


wieso muss eigentlich ein absoluter Anfänger innerhalb von Tagen und Wochen so viele Themen wie GridLayout, Bruteforce, graphics rotate, JSpinner, Flugbahn eines Basketballs, Java Decompiler, standart browser öffnen, jetzt Clip und wer weiß noch alles abgrasen?
naja, eher rhetorische Frage bzw. für mich ein Seufzer, musst dich nicht dazu äußern :wink: , aber komisch schon

naja also um das klar zu stellen:

[ul]
[li]Ich sehe mich selbst noch als einen Anfänger. Zwar nicht “absolut”, aber ich denke von erfahrung und programmzuverlässigkeit bin ich noch einer…
[/li][li]wenigen tagen und wochen, weil ich immer wieder verschiedene sachen ausprobiere. Ich lerne das zeug in dem ich immer wieder neue sachen ausprobiere, und schulhausaufgaben “übertrieben” erledige.
[/li][li]Jetzt detailliert:
[/li][LIST]
[li]GridLayout: was ist daran so “nicht anfängerhaft” ?
[/li][li]Bruteforce: War nur aus interesse, so genau würde ich es noch nie hinbekommen
[/li][li]Graphics rotate: So schwer ist das nun nicht, das war ein “sonder auftrag” von meinem lehrer
[/li][li]JSpinner: hatte gar nichts mit jspinner zu tun, aber egal
[/li][li]flugbahn eines basktetballs: War nichts mit java, wollte das in ti basic realisieren. (Taschenrechner basic assembler oder wie mans nennt)
[/li][li]Java decompiler: Bin durch zufall drauf gestossen, war aus reiner neugier
[/li][li]browser öffnen: wollte in meinen hausaufgaben eine möglichkeit zum “Code anzeigen” implementieren
[/li][li]Clip: Mache das schon seit langem, aber das mit dem aufeinander warten… Naja, ich bin nicht drauf gekommen
[/li][li]Was sonst noch alles: siehe punkt 2
[/li][/ul]
[/LIST]

Zurück zum thema:

Ist das nun ok mit der whileschleife oder nicht?

eine leere Schleife ist wahrscheinlich grundsätzlich zu vermeiden, läßt einen CPU-Kern auf 100% laufen,
kleines Thread.sleep(), schon 1 oder 10 ms würde um 99.99% Arbeit entlasten

was mit den Themen im einzelnen ist, ist egal, du bringst sie ins Forum und machst sie damit zu Themen,
grundsätzlich steht das alles frei, dafür ist das Forum da,
nur vielleicht zu überlegen, ob du genau genug abwiegst, wann du fremde teure Ressourcen (Zeit) kostenlos bemühst,
wann vielleicht doch anderes möglich wäre, Eigenarbeit oder Verzicht auf manche ‚Interessen‘

natürlich immer auch anders zu sehen, aus gewisser Sicht sucht das Forum ja auch neue Themen, Leere wäre der Tod :wink:

ja, aber meistens finde ich erst etwas über googel und wenn ich dann nicht verstehe frage ich hier. aber naja :slight_smile:
hmm also solange warten wie der clip ist… wär ne idee. was macht Thread.sleep() eigentlich?

du meinst abgesehen von dem, was der Name andeutet, in der API als direkte Methodenbeschreibung oder im Internet zu einer der wichtigen Java-Grundfunktionen zu lesen ist? :wink:

http://docs.oracle.com/javase/6/docs/api/java/lang/Thread.html

nun ja, nehmen wir mich als ‚missgestimmt‘ an, ich werde auch nicht mehr stören und hoffentlich für dich antworten noch andere

ich glaube du hast nicht ganz verstanden was ich meinte ^^
ich wollte wissen wie genau thread.sleep() arbeitet :stuck_out_tongue:

Das ist der Code der Methode(laut Netbeans strg+umschalt+b):

    public static void sleep(long millis, int nanos)
    throws InterruptedException {
        if (millis < 0) {
            throw new IllegalArgumentException("timeout value is negative");
        }

        if (nanos < 0 || nanos > 999999) {
            throw new IllegalArgumentException(
                                "nanosecond timeout value out of range");
        }

        if (nanos >= 500000 || (nanos != 0 && millis == 0)) {
            millis++;
        }

        sleep(millis);
    }

ja toll XD
und was macht nun sleep() ? ^^
Ich guck mal selber moment

*** Edit ***

Tja ist native…
hat einer eine idee?

Ahhh, sorry…
Naja als ich strg+umschalt+b auf das sleep am ende gemacht habe hat Netbeans mich wieder auf die gleiche Methode verwiesen! :wink:
Naja, im Computer steckt ja irgendwo eine kleine von einer eigenen Batterie betriebene Uhr, wahrscheinlich fragt java das Betriebsystem nach deren „Zählerstand“?!

wenn man sich an die tiefsten Befehle und Hardware-Umsetzung machen will, dann kann auch aus einer Addition ein längerer Aufsatz werden,
bringt das was? ein Thread wird unterbrochen, fertig

gerade wenn man Java nutzt, stellen sich diese Frage am wenigsten, weil man sich bequem auf der Hochsprache bettet,
die Implementierung native anderen, ‘richtigen Programmiersprachen’, überläßt

und… das darf mich jetzt nicht interresieren oder wie? ^^

Doch, ich würde sogar sagen, dass es löblich ist, sich möglichst umfassend zu informieren.
Dies ändert allerdings nichts daran, dass eine umfassende Beantwortung dieser Frage sehr…umfassend werden würde. Und von jemandem kommen müsste, der mit den entsprechenden Details bzw. ihren Implementierungen in den verschiedenen Betriebssystemen vertraut ist, wenn es um die Frage der konkreten Implementierung geht.
Prinzipiell wird der Thread halt für eine Zeit Schlafen gelegt und es ist Aufgabe des Betriebssystems, ihn zum passenden Zeitpunkt wieder aufzuwecken. Solange er schläft, wird er vom Scheduler des Betriebssystems (oder der JVM, sollte die diese Aufgabe übernehmen) nicht mehr zur Ausführung auf der CPU zugelassen. So in etwa. Wenn dich das Thema weiter interessiert, solltest du durchaus gute Quellen im Netz finden. Und sollte das scheitern, gibt es immer noch die käufliche Fachliteratur. Die Bücher von Tanenbaum über Betriebssysteme sollten Informationen dazu enthalten, allerdings habe ich meine Ausgabe Modern Operating Systems noch nicht so weit gelesen.

okay, vielen dank.
so wars ja auch nicht gemeint; ich wollte damit keineswegs irgendwem irgendetwas unterstellen :slight_smile:

OMG… Wieso willst du denn auf das Ende eines Clips warten? Wenn du schon Clips verwendest, kannst du diesen einen LineListener hinzufügen, und diese informieren dich dann mit einem LineEvent des Typs STOP, dass dieser beendet wurde. Ich hatte es schon mal wo anders erwähnt (war glaub’ ich in einem Thread von Zombiepriester), „Thread.sleep()“ ist bei Sounds niemals 'ne gute Idee. Ich denke mal, für meinen Blockeintrag eines One-Thread-Players lasse ich die geplante LineCompression (das ist ein Kapitel für sich) noch mal aussen vor, damit ich ihn endlich veröffentlichen kann. :wink:

vielen dank, auch ein guter einwand :slight_smile:

Hab hier schon mal son nerviges Dialpad zusammen gepfuscht, damit du mal den Aufwand erkennst, wo man bei Java mit Sound (in der Std-Sound-API) durch muss. Zunächst erstmal spielt die Anwendung die ganze Laufzeit über einen Warnton in einer Endlosschleife. Über diesen Sound werden die einzelnen Dialtones gemischt. Dabei können zwar zwei verschiedene Töne gleichzeitig (wenn man schnell genug ist) gespielt werden, gleiche Töne aber nur hintereinander. Mit Mehraufwand bekommt man es aber auch hin, dass man gleiche Töne überlagern kann. Darüber hinaus habe ich mich auch noch nicht um das „Knacken“, was ebenfalls bei Clips auftritt und die LineCompression beim Überlagern mehrerer Töne gekümmert. Letzteres ist Notwendig, damit leisere Amplituden eines Tones weniger ins Gewicht fallen als laute. Im Moment filtere ich blos pausierte Töne, addiere die Kanäle der restlichen und teile sie durch deren Gesammtzahl. Das hätte für z.B. zwei Töne schon mal eine Lautstärkereduzierung um die Hälfte zur Folge, bei drei um 2/3tel usw. Leider alles nicht so einfach. Ich hoffe ja, dass es mit JavaFX besser wird. :wink:

was ist das bitte für ein audio format - .au?

[QUOTE=mymaksimus]was ist das bitte für ein audio format - .au?[/QUOTE]Das ist ein uraltes Format von Sun Microsystems.


Eines von den dreien die standardmässig von Java unterstützt werden.

Ich höre da eine starke Verzögerung zwischen Button Klick und entsprechenden Ton, ist die Absicht??