SoundManager oe, ab, rpn awp.sound.* Klassen-Konzept SoundXXXRoom SoundFxProcessor SoundCommonRoom Seite 1 SoundDistributor SoundA3D a3dtools SoundVirtualSource 1 0,.., 9 0,* 1 SoundEffect SoundEffect_Gain SoundEffect_Load SoundEffect_ListenerPos etc. Als Parameter einer Methode Als Parameter einer Methode und in der internen Liste
SoundManager Der SoundManager ist die Schnittstelle nach aussen. Intern verteilt er die Aktionen und die neuen Koordinaten an alle, die sie haben wollen, d.h die aktuellen/aktiven Söhne von SoundCommonRoom setListenerPos( Point3d ); doAction( int actionId ); ; // A3D initialisieren etc. exit(); // A3D abmelden awp.sound.* SoundManager Seite 2
SoundEffectProcessor ist die Warteschlange, in die die gewünschten Geräuscheffekte eingetragen werden können. Kapselt außerdem den Sound-Teilsystem-Thread, der aufwachen muss, wenn ein Effekt hörbar werden soll (gemäß Zeitmarke) oder wenn neue Effekte in die Warteschlange eingestellt werden List m_effectQueue; // die Warteschlange int registerVirtualSource(); // eine neue virtuelle Sound-Source anlegen. Rückgabe ist eine neue ID. insertEffect( SoundEffect ); // eine neue Effekt-Anforderung einstellen. awp.sound.* SoundEffectProcessor und SoundDistributor SoundDistributor verwaltet alle virtuellen Soundquellen und verteilt sie auf die tatsächlich zur Verfügung stehenden A3D-Kanäle SoundA3D[] m_physicalSources; Vector m_virtualSources; int m_lastIdGiven; // zuletzt vergebene (virtual) ID int registerVirtualSource(); // eine neue virtuelle Sound-Source anlegen. Rückgabe ist eine neue ID. processEffect( SoundEffect ); // einen Effekt hörbar machen/realisieren. Im Ggs. zu SoundFxProcessor wird die Zeitmarke ignoriert. Seite 3
SoundEffect ist ein Effekt, der Geräusch macht oder verändert. Die speziellen Parameter zu den Kommandos finden in passenden Söhnen Platz int m_commandId; // die ID des Kommandos long m_time; // der Zeitpunkt (in Millisek.), wann das zu tun ist: 1. Als Eingabeparameter an SoundFxProcessor ist das realtiv zu jetzt zu verstehen, 0 bedeutet daher sofort 2. In der Warteschlange in m_effectQueue ist der Zeitpunkt die reele Zeit. 3. Als Eingabeparameter an SoundDistributor wird dieser Eintrag ignoriert. int m_virtualSourceId; // die ID der Source awp.sound.* SoundEffect Seite 4 IDSohnAttributeFunktion CMD_LOADSoundEffect_LoadString m_filename;neue Tonquelle laden CMD_UNLOADSoundEffect_Unload-Source wieder freigeben CMD_PLAYSoundEffect_Playboolean m_loop;(einmal) spielen! CMD_MUTESoundEffect_Mute-nicht spielen! CMD_GAINSoundEffect_Gainfloat m_gain;die Lautstärke von 0 bis 1setzen CMD_POSITIONSoundEffect_PositionPoint3f m_position;die Position der Tonquelle setzen CMD_SIZESoundEffect_SizePoint3f m_size;die Ausmaße setzen CMD_MAX_DISTANCESoundEffect_MaxDistancefloat m_maxDistance;die maximale Distanz setzen CMD_LISTENER_POSSoundEffect_ListenerPosPoint3f m_position;Den Listener positionieren
awp.sound.* SoundA3D SoundA3D ist die einzige Klasse, die Aufrufe von A3D via a3dtools macht. Die a3dtools-Aufrufe für Soundquellen sind Instanzmethoden, die übrigen (A3D-Gesamt, Listener, etc.) sind statische Methoden boolean m_isA3DLoaded; // ist die Datei A3D-geladen? long m_firstId; // eine der A3D-IDs int m_secondId; // eine der A3D-Ids SoundVirtualSource m_virtualSource; // diese Tonquelle im virtuellen // Datei in A3D laden // Datei entladen // allgemeine Effektete: setMute(); // nicht spielen setPlay(boolean); // spielen (oder einmal spielen) setGain(); // Lautstärke setzen setPosition(); // Position setzen setSize(); // Ausdehnung er Soundquelle setzen setMaxDistance; // die maximale Distanz setzen // statische Methoden zum Initialisieren von A3D (werden vom SoundManager aufgerufen) // A3D-Flush (statisch) // statische Methoden um den Listener zu setzen Seite 5
awp.sound.* SoundVirtualSource Seite 6 SoundVirtualSource SoundVirtualSource dient zum Speichern des Status einer Tonquelle. Dient der Repräsentation aller Soundquellen, egal ob tatsächlich in A3D oder nicht int m_virtualId; // die virtuelle Source-ID; int m_playing; // Status: Ist dieser Ton gerade an oder aus? float m_gain; // Status: Lautstärke dieses Tons float m_maxDistance; // Status: Maximale Distanz, wo noch zu hoeren Point3f m_position; // Status: Position Point3f m_size; // Status: Ausdehnung der Soundquelle (Volumetric Bounds) SoundA3D m_physicalSource; // Die tatsächliche A3D-Tonquelle. Null, falls nicht A3D-geladen