160 likes | 274 Views
Sound und Musik. Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Dozent: Prof. Dr. Manfred Thaller Referent: Tobias Kemper. Inhalt. Direct Sound Soundpuffer Kontrolle eines Sounds
E N D
Sound und Musik Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung Dozent: Prof. Dr. Manfred Thaller Referent: Tobias Kemper
Inhalt Direct Sound Soundpuffer Kontrolle eines Sounds WAV-Dateien laden 3D-Sound Echtzeiteffekte Musik Direct Sound in TriBase
Direct Sound Komponente von DirectX Mischen einer unbegrenzten Anzahl an Sounds Nutzung von Echtzeiteffekten 3D-Sound (!) Alle Sounds werden in Soundpuffern organisiert Mixer mischt alle spielenden Soundpuffer zu einem zusammen und schreibt das Ergebnis zum Abspielen in den primären Soundpuffer
Direct Sound Schnittstellen: IDirectSound8 und IDirectSoundBuffer8 Abzählen der Geräte mit DirectSoundEnumerate Die DirectSound-Schnittstelle IDirectSound8 wird durch DirectSoundCreate8 erzeugt Mit IDirectSound8::SetCooperativeLevel setzt man die Kooperationsebene von Direct-Sound
Soundpuffer Soundpuffer mit IDirectSound8::CreateSoundBuffererzeugen Ein Primärer und mehrere Sekundäre für die einzelnen Sounds Drei Parameter : -Zeiger auf eine DSBUFFERDESC-Struktur -Adresse eines Zeigers auf die Schnittstelle -nicht verwendeter Parameter (NULL) Struktur DSBUFFERDESC beinhaltet verschiedene Informationen über den Soundbuffer, die Größe (Länge) des Soundpuffers und sein Format Flags zu „Sonderwünschen“ auf Seite 424 Das Format (Audioformat) bestimmt die Soundqualität: Sampling-Frequenz, Anzahl der Bits pro Sample und die Anzahl der Kanäle Um IDirectSoundBuffer8zu erhalten wird die COM-Methode QueryInterfaceaufgerufen -> Mehr Fähigkeiten als die „Normale“
Soundpuffer g_pSound->Lock(0, //Sperren abPosition 0, //Anz zu sperr Bytes (void**)(&pSamples), //Zeiger 1 &dwNumBytes, //Zeiger 2 NULL, NULL, DSBLOCK_ENTIREBUFFER)//Flag Gesamt/Teil Soundpuffer sperren Ringförmiger Soundpuffer (Looping) Stückweises Füllen mit Streaming Abspiel- und Schreibcursor
Beispielprogramm Beispiel 05-02 Soundpuffer
Kontrolle eines Sounds IDirectSoundBuffer8::Play spielt einen Soundpuffer ab Mit Stopwird er angehalten SetVolume setzt die Abspiellautstärke eines Soundpuffers –10000 (totale Stille) bis 0 (Originallautstärke) Soundpuffer FlagDSBCAPS_CTRLVOLUMEsetzen! Balance mit der SetPan-Methode –10000 bedeutet 100% links und 0% rechts, +10000 bedeutet 0% links und 100% rechts Die Frequenz eines Sounds lässt sich mit SetFrequency anpassen
WAV-Dateien laden unkomprimierte PCM-Rohdaten bestehen aus einem Header und mehreren Chunks LoadWAVFile WAV-Dateien können direkt geladen und in den Soundpuffer geschrieben werden
3D Sound Sound und Hörer besitzen eine Position und eine Geschwindigkeit Effekte und Geräuschspositionen können simuliert werden IDirectSound3DBuffer8 steht für einen 3D-Soundpuffer QueryInterface auf einem Soundpuffer aufrufen, der mit dem FlagDSBCAPS_CTRL3D erstellt wurde und nur einen Kanal hat 3D-Algorithmus: DS3DALG_NO_VIRTUALIZATION (einfach und schnell) DS3DALG_HRTF_FULL (realistischstes Ergebnis, viel Rechenzeit) DS3DALG_HRTF_LIGHT (fast so gut wie „FULL“ , weniger Rechenzeit) Hörerschnittstelle IDirectSound3DListener8 repräsentiert den virtuellen Hörer
3D Sound SetPositionund SetVelocity weisen dem 3D-Soundpuffer bzw. dem Hörer eine Position und einen Geschwindigkeitsvektor im Raum zu SetOrientation -> Orientierung für den Hörer BEISPIELPROGRAMM 3D Sound Bsp. 05-04
Echtzeiteffekte Sounds in Echtzeit verändern: Echo, Verzerrung, Widerhall muss mit dem FlagDSBCAPS_CTRLFX erstellt worden sein Effekte dem Soundpuffer zuweisen, bevor er abgespielt wird und während er nicht gesperrt ist -> SetFX
Echtzeiteffekte Jeder Effekttyp besitzt eine eigene Schnittstelle, über die man die Effektparameter einstellen kann Über die Methode GetObjectInPath des Soundpuffers Mit IDirectSound3DListener8::SetDopplerFactor und SetRolloffFactor die Intensität des Dopplereffekts beziehungsweise der Schallabschwächung über- oder untertreiben
Musik DirectShow für alle Multimediaformate alle Audio und Videodaten durchlaufen ein Filtersystem Schnittstelle IMediaControlerlaubt Kontrolle über Play, Pause und Stop Über IMediaSeeking lässt sich der Abspielcursor verschieben und die Geschwindigkeit verändern
Direct Sound in TriBase tbDirectSound tbSound tbMusic automatische Berechnung der Geschwindigkeit des Hörers Laden von Sounds und Musik weitere Methoden zum Generieren der Schnittstellen BEISPIELPROGRAMM 05-06
Vielen Dank für Ihre Aufmerksamkeit! Verwendete Literatur:David Scherfgen: 3D-Spiele-Programmierung. München, 2006, S. 418-480.