Du bist nicht angemeldet.

Stilllegung des Forums
Das Forum wurde am 05.06.2023 nach über 20 Jahren stillgelegt (weitere Informationen und ein kleiner Rückblick).
Registrierungen, Anmeldungen und Postings sind nicht mehr möglich. Öffentliche Inhalte sind weiterhin zugänglich.
Das Team von spieleprogrammierer.de bedankt sich bei der Community für die vielen schönen Jahre.
Wenn du eine deutschsprachige Spieleentwickler-Community suchst, schau doch mal im Discord und auf ZFX vorbei!

Werbeanzeige

1

01.02.2013, 12:26

Warnehmbaren Musik Hörbereich in Pixel umrechnen?

Halli Hallo,

ich benutze die SFML und habe gerade ein bisschen mit 3D Sounds gespielt.

Eine kurze Frage dazu:

Wie kann man die MinDistance und die Dämpfung die man setzt in
Pixel "umrechnen". Ich möchte nämlich Visualisieren, wann der Listener anfängt
den Ton wahrzunehmen.

Ein bisschen Code:

C-/C++-Quelltext

1
2
3
4
5
6
7
8
9
10
sf::Music music;
music.openFromFile("xyz.ogg"); // Channelcount: 1

sf::Listener::setPosition(sf::Vector3f(10.f, 10.f, 5.f));
sf::Listener::setDirection(1.f, 0.f, 5.f);
sf::Listener::setGlobalVolume(100.0f);

music.setMinDistance(5.f);
music.setAttenuation(10.f);
music.setPosition(100, 100, 0);


Genauer:

Ich möchte halt an der Position der Musik ein Viereck zeichnen, welches wie
gesagt visualisieren soll, wann der Listener anfängt den Sound wahrzunehmen,
aber das ganze wird ja in Open GL / SFML nicht mit Pixeln berechnet.

Deshalb die Frage:
-> Wie mache ich das?

Viel Dank im Voraus!

2

01.02.2013, 12:47

Du nimmst ein Bild, wie dieses hier
http://www.icn.ucl.ac.uk/courses/MATLAB-…3_gabors_02.png
und zeichnest es mit der richtige Größe, an der richtigen Position.

Drück dich mal klarer aus, dann kann man evtl. mehr sagen.
Lieber dumm fragen, als dumm bleiben!

3

01.02.2013, 14:46

Ich dachte ich hätte es verständlich genug erklärt... Entschuldigung.
Mhh... Da Bilder mehr als 1000 Wörter sagen (hoffe ich):


(Link)


Was ich wissen möchte ist, wie man diesen Hörbereich (im Programm) visuell darstellen kann.

Auf Klartext, ich hab keine Ahnung wie man die Größe / den Radius des Hörbereichs in Pixel ermittelt.
Und ich möchte wissen wie ich das machen kann, also die Größe (in Pixel) ermitteln.

Zitat

Sound:: SetMinDistance() defines from which distance to the listener a sound must be to be heard to the fullest (100% volume). Farther from that distance, the attenuation factor affects the volume, lowering it as farther as you go. The attenuation factor can be set with Sound:: SetAttenuation().

(Link)


Quelle: http://blog.tbam.com.ar/2009/05/sound-sp…d-games-in.html

Und wie gesagt, ich möchte genau diesen Bereich visuell darstellen, sichtbar machen.
Aber die einzigen Werte die ich habe, sind einmal die Distanz und die Dämpfung.

Wie ich daraus die Größe des Bereichs (in Pixel) in dem der Ton zu hören ist ermitteln soll, ist mir
ein Rätsel und ich erhoffe mir gerade, das eventuell jemand der sich mit Open GL auskennt,
weiß wie man diese Größe ermittelt.

Das habe ich noch im SFML Tutorial gefunden:

Zitat

Volume factor is the calculated factor, in range [0 .. 1], that will be applied to the sound's volume

Volume factor = MinDistance / (MinDistance + Attenuation * (max(Distance, MinDistance) - MinDistance))

Quelle: http://www.sfml-dev.org/tutorials/2.0/au…tialization.php

So wird die Lautstärke des Sounds gesetzt, je nach Entfernung des Listeners.
Vielleicht kann ein Mathe Profi so freundlich sein und daraus irgendwie eine Formel machen,
die mir die Größe des Hörbaren Bereichs (in Pixel) zurück gibt... :D

So, hoffe mein Anliegen ist jetzt etwas verständlicher geworden.

4

01.02.2013, 16:46

Naja, du brauchst das zunächst in Weltkoordinaten, und diese kannst du dann problemlos in Pixelkoordinaten umrechnen.

Ich meine, irgendwie setzt du ja die Position der Geräuschquellen. Das ist das Koordinatensystem, in dem SFML arbeitet. Wie groß das ganze hinterher am Bildschirm aussieht, ist ja eine andere Frage und von der simulation des Spiels und der Geräusche ganz und gar unabhängig.
Die Frage ist, was genau Attenuation macht. Gibt es da irgendwo eine Formel, die eine gewisse Lautstärke in einer gewissen Entfernung berechnet, in Abhängigkeit dieser Abschwächung? Sinnvoll wäre wohl die Lautstärke durch das Quadrad der Entfernung, aber wer weiß, mit was für Modellen die da rechnen.
Auf jeden Fall kannst du nicht sagen, wie weit man etwas hört, da man es ja prinzipiell unendlich weit hört, es ist dann eben nur noch sehr sehr leise. Du musst dir also überlegen, welche Lautstärke für die gleich 0 sein soll und da irgendwann abschneiden und das als maximale Entfernung nehmen.
Lieber dumm fragen, als dumm bleiben!

Werbeanzeige