# soundlösung für spiele (mit lautstärke)



## ollilebowski (20. Okt 2005)

hallo! 

ich will jetzt endlich mal ein spiel mit coolem sound programmieren.  8) 
sound abspielen kann ich schon, dazu benutze ich den 
JLayer (http://www.javazoom.net/jlgui/sources.html), 
der kann auch mp3s. 

zu einem richtigen spiel gehört aber auch, 
dass die sounds verschieden laut abgespielt werden, 
je nachdem, 
wie weit das objekt, das ein geräusch macht 
vom spieler oder von der "kamera" einem entfernt ist. 

leider weiss ich nicht, wie man das im JLayer macht.  :bahnhof: 
weiss jemand, wie man im JLayer oder algemein 
die lautstärke von sounds regeln kann? 
geht das mit den normalen JavaKlassen überhaupt?? 
oder kennt einer was besseres für java als den JLayer? 

 :### ich habe noch gar keine ahnung von sounds in java, 
das ist mein erstes programm mit sounds, 
darum bin ich dankbar für jede antwort. 

mfg, olli


----------



## 0xdeadbeef (20. Okt 2005)

Hm, soweit ich sehe, ist JLayer eine Bibliothek, um MP3s abzuspielen. Nicht mehr und nicht weniger.
Für Soundeffekte in einem Spiel wäre das zumindest ungewöhnlich. Da würde ich eher zu kleinen WAV-Files neigen.
Wie man das macht usw. wurde ja gerade hier diskutiert:
http://www.java-forum.org/de/viewtopic.php?t=22336
bzw. http://www.java-forum.org/de/viewtopic.php?t=17095


In der normalen Java-Sound-API würde man die Lautstärke eines Ausgabekanals (Line) so anpassen:


```
AudioFormat af = new AudioFormat( SAMPLE_RATE, 16, 2, true, false );
			DataLine.Info lineInfo = new DataLine.Info( SourceDataLine.class, af );
			SourceDataLine line = (SourceDataLine)AudioSystem.getLine(lineInfo);
			line.open();
			line.start();
			try {
				FloatControl control = (FloatControl)line.getControl(FloatControl.Type.MASTER_GAIN);
				control.setValue(control.getMaximum());
			} catch (IllegalArgumentException ex) {}
```

Ist jetzt ein Beispiel aus einem Mod-Player und nicht 1:1 verwendbar, aber es zeigt zumindest, wie man an das Control zur Lautstärkeregelung kommt und einen neuen Wert (hier: Maximalwert) reinschreibt.


----------



## ollilebowski (20. Okt 2005)

wie ich oben schon erwähnt habe, 
möchte ich nicht wissen, wie man sounds abspielt, 
denn das kann ich ja schon (s.o.). 

mein problem ist vielmehr 
das regeln der lautstärke eines sounds unabhängig von der systemlautstärke. 

ich wäre den admins also dankbar, 
wenn sie meine anfrage nicht mit verweis auf diese anderen themen schliessen. 
danke -.-

gez: olli


----------



## 0xdeadbeef (20. Okt 2005)

ollilebowski hat gesagt.:
			
		

> wie ich oben schon erwähnt habe,
> möchte ich nicht wissen, wie man sounds abspielt,
> denn das kann ich ja schon (s.o.).


Na ja, die Erwähnung einer MP3-Library, mit der Du Dich offensichtlich auch nicht wirklich auskennst, zeugt noch nicht davon, daß Du weißt, wie man in Java im allgemeinen Sounds abspielt. Ich hatte eher einen gegenteiligen Eindruck und habe ihn immer noch. 
Siehe auch:



> ich habe noch gar keine ahnung von sounds in java,
> das ist mein erstes programm mit sounds,
> darum bin ich dankbar für jede antwort.



Du hast also keine Ahnung von "Sounds in Java", möchtest aber auch nicht wissen, wie man Sounds abspielst, weil du das ja schon kannst ... mit dem Verweis auf eine MP3-Library. Yeah well :roll: 



> mein problem ist vielmehr
> das regeln der lautstärke eines sounds unabhängig von der systemlautstärke.


Und habe ich etwa nicht genau darauf geantwortet  :?

IMHO kann man nur die Lautstärke einer "Line" regeln, das ist aber keinesfalls die Systemlautstärke ( die man IMHO per Java gar nicht beeinflussen kann).
Pro Mixer hat man recht viele Lines zur Verfügung. Der Java-Standardmixer hat 32 Lines, der meiner Soundkarte (angeblich) unendlich viele.
Also kannst Du jeder dieser Lines mit dem oben beschriebenen (und entsprechend angepaßten) Code eine andere Laustärke verpassen. Bzw. müßte man auch nach dem Abspielen eines Sounds auf einer Line die Lautstärke wieder modifizieren können.
Bzw. wenn man mit Clips arbeitet, muß man halt nach der Erzeugung des Clips jeweils die gewünschte Lautstärke wie oben angedeutet setzen.
Es könnte eventuell Probleme geben, wenn man das Gain-Control für eine Line anfordert, die nicht gestartet ist. Ich habe dazu keine Experimente betrieben und die API ist dazu etwas vage. Für einen Clip müßte man das aber können, ansonsten wäre die Gain-Control ziemlich witzlos.



> ich wäre den admins also dankbar,
> wenn sie meine anfrage nicht mit verweis auf diese anderen themen schliessen.
> danke -.-


Du würdest Dir und uns das Leben erleichtern, wenn Du Antworten auf Deine Fragen gründlich durchliest bevor Du sie (fälschlich) als unpassend deklarierst und nach Admins schreist.


----------



## ollilebowski (20. Okt 2005)

mit "sounds" meinte ich nicht instanzen der klasse 'Sound' 
sondern algemein musikdateien. da hab ich mich schlecht ausgedrückt. 

ich wollte dich nicht anpöbeln, 
entschuldigung, wenn sich das so liest. 
mit dem letzten absatz wollte ich keinen admin rufen, 
sondern darum bitten, das keiner dieses thema schliesst. 

es passiert nämlich häufig, dass jemand eine frage stellt 
und dann kommt ein admin,  
schreibt zwei links zu themen die ein bischen ähnlich sind und schliesst das thema. 
die ganze 'neue antwort' habe ich nur geschrieben um das zu verhindern. 

aber das wolltest du gar nicht, 
also hätte ich das auch nicht schreiben brauchen 

aber dass ich keine ahnung von sounds habe 
& ich weiss, wie man sounds mit JLayer abspielt 
ist für mich kein widerspruch. 
ich muss ja z.b. auch nicht wissen, wie eine festplatte funktioniert, 
um darauf etwas zu speichern. 

und du hast recht, ich habe vorher das nur sehr oberflächlich gelesen. 
aber jetzt hab ich es besser gelesen und gesehen das das eine lösung ist. 

so long...


----------

