Nils Jagdfeld, Patrick Gunia

Slides:



Advertisements
Ähnliche Präsentationen
Blue J.
Advertisements

Imperative Programmierung
Präsentation PS: Klasse File von Janko Lange, Thomas Lung, Dennis Förster, Martin Hiller, Björn Schöbel.
1 Funktionstemplates Einbinden von Templates: –Eine *.o Datei, die durch Übersetzen einer Datei nur mit Templates erzeugt wurde, enthält keinen Programmcode.
1. 2 Heute entwickeln wir eine kleine DirectInput-Bibliothek,auf die wir bei unseren zukünftigen Projekten immer wieder zurückgreifen werden. Die Themen.
Referat zum Thema: Soundkarte Von Julian Weger IT-Klasse 2482.
Kollisionen erkennen Kollisions- und Schnittpunkttests auf Dreieckbasis Kollisions- und Schnittpunkttests auf Viereckbasis Einsatz von achsenausgerichteten.
VO2 Laden und Initialisieren der Sounds. Wir wollen Sounds in unsere Applikation laden Menü erweitern –um den Menüpunkt Sound –mit dem Identifier ID_ULTRIS_SOUND.
Sequentielle Liste - Array
Einführung Blue J.
Java: Objektorientierte Programmierung
Java: Dynamische Datentypen
Indirekte Adressierung
FH-Hof Indirekte Adressierung Richard Göbel. FH-Hof Einfache Speicherung von Daten Eine "einfache" Deklaration definiert direkt eine Speicherplatz für.
Java: Grundlagen der Objektorientierung
Strukturen. In einer Struktur kann eine beliebige Anzahl von Komponenten (Daten) mit unterschiedlichen Datentypen (im Gegensatz zu Feldern) zusammengefaßt.
Polymorphie (Vielgestaltigkeit)
Polymorphie (Vielgestaltigkeit)
Objekte und Arbeitsspeicher
Dynamischer Speicher. In einer Funktion wird z.B. mit der Deklaration int i; Speicher auf dem sogenannten Stack reserviert. Wenn die Funktion verlassen.
V09 Fallende Formen, Geschwindigkeitsregelung und Timing Daniel Ebner Spieleprogrammierung mit DirectX und C++
Tag 2 Look-up-Tabellen, Zufallszahlen, Listen, Speichermanagement und Dateiverwaltung Quelle: 3D-Spiele mit C++ und DirectX in 21 Tagen, Alexander.
Vers. 6: Der Konfigurationsdialog Quelle: Spieleprogrammierung mit DirectX und C++, U. Kaiser und P. Lensing, Galileo Computing (2007)
Praktikum Entwicklung und Einsatz von Geosoftware I - Sitzung 3 Klassen, Objekte, Arrays und Kontrollstrukturen Sommersemester 2003 Lars Bernard.
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Kapitel 7 Claudio Moraga, Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
EINI-I Einführung in die Informatik für Naturwissenschaftler und Ingenieure I Vorlesung 2 SWS WS 99/00 Gisbert Dittrich FBI Unido
Einführung in die Programmierung mit Java
PRJ 2007/1 Stefan Dissmann Motivation Problem: gleiche Datenstrukturen werden für verschiedene Objekte gebraucht: z.B. Listen von Studierenden, Kunden,
PKJ 2005/1 Stefan Dissmann Ausblick Es fehlen noch: Möglichkeiten zum Strukturieren größerer Programme Umgang mit variabler Zahl von Elementen Umgang mit.
PKJ 2005/1 Stefan Dissmann Rückblick auf 2005 Was zuletzt in 2005 vorgestellt wurde: Klassen mit Attributen, Methoden und Konstruktoren Referenzen auf.
Präsentationen: Multimedia Video Audio Objekte (OLE) Steuerelemente Startseite.
Das Java-Hamstermodell
Einführung in Visual C++
DVG Felder1 Felder. DVG Felder 2 Was sind Felder? Felder sind Reihungen aus endlich vielen Elementen gleichen Typs. Z.B.: Vektoren : (x.
DVG Klassen und Objekte
Wir müssen also überlegen: Implementierung der Knoten, Implementierung der Kanten, daraus: Implementierung des Graphen insgesamt. Annahme: die Knoteninhalte.
3D Programmierung Version 12 - Highscores. Die vom Spieler erzielte Punktzahl wird mit 5 vorgegebenen Punktzahlen verglichen und, falls nötig, in die.
PRJ 2007/1 Stefan Dissmann Verkettete datenstruktur: Liste Problem: Liste, die eine beliebige Zahl von Elementen verwaltet Operationen: Erzeugen, Anfügen,
Einführung in die Programmierung
Was ist Multimedia? Multimedia = Nutzungsmöglichkeit verschiedener Medien (Text, Bild, Ton) über ein Gerät (PC) Beispiele Abspielen von Film- oder Musik-CDs.
Javakurs FSS 2012 Lehrstuhl Stuckenschmidt
Universität zu Köln Historisch Kulturwissenschaftliche Informationsverarbeitung WS 12/13 Softwaretechnologie II (Teil 1): Simulation und 3D Programmierung.
Von der Planung bis zum Hauptmenü Seminar: Softwaretechnologie II Dozent: Prof. Manfred Thaller Referent: Jan Bigalke.
Einführung in die Programmierung Wintersemester 2008/09 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
Einführung in die Informatik für Naturwissenschaftler und Ingenieure (alias Einführung in die Programmierung) (Vorlesung) Prof. Dr. Günter Rudolph Fachbereich.
Einführung in die Programmierung Wintersemester 2011/12 Prof. Dr. Günter Rudolph Lehrstuhl für Algorithm Engineering Fakultät für Informatik TU Dortmund.
One plus One Evolutionary Optimizer
Variablenkonzept Klassisch, in Java Basistyp
EPROG Tutorium #3 Philipp Effenberger
LEGO NXT Roboter in Java programmieren
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Polymorphie (Vielgestaltigkeit). Wenn eine Methode, wie z.B. print für verschiedene Programmteile steht (und z.B. einmal Objekte verschiedener Klassen.
early binding (frühe Bindung) late binding (späte Bindung)
AUDIO im WEB HTML & AUDIO WEB_0302 WEBDESIGN MODUL 03 h.huetter 1 Sound-Dateien können, ebenso wie Video-Dateien, auf mehrere Arten in HTML-Dateien integriert.
Einführung Blue J. Inhaltsverzeichnis  Definition  Vokabeln.
OOP-Begriffe Abstraktion Modellieren Klasse Objekt Attribute Methoden
1. Charakteranimation 2. PlugIns schreiben und laden Universität zu Köln Institut für Historisch-Kulturwissenschaftliche Informationsverarbeitung WS 2010/2011.
A Workshop About this chapter General description Units Time Schedule
HG13_ Herzgen, Jung & Lorkowski1 Java Programmierung BlueJ Workshop.
Hintergrungmusik abspielen 3D-Soundeffekte einsetzen.
Paul, Morten, Yannick Blue J. Entwicklungsumgebung  versteht Java Programmcode  Für die Entwicklung eigener Software  Durch die Programmierung.
Wien Fotos, Audio und Video Multimedia in Android.
Mp3 und co. – Audiobearbeitung am PC. Vorteile Audio am PC Audiofiles lassen sich einfacher verwalten und weiter verarbeiten als Kassettenaufnahmen.
Java Programme nur ein bisschen objektorientiert.
Tutorium Software-Engineering SS14 Florian Manghofer.
C++ FÜR cOMPUTERSPIELENTWICKLER
Funktionen (Zweck und Eigenschaften) Funktionen sind Unterprogramme, die einen bestimmten Zweck erfüllen Sie zerlegen Probleme in kleine, abgeschlossene.
Arrays in Java Ein Array ist eine Variable, die aus einer An-zahl von Elementen des gleichen Datentyps besteht, die aufeinanderfolgend im Speicher liegen.
Implementieren von Klassen
 Präsentation transkript:

Nils Jagdfeld, Patrick Gunia Musik und 3D Sound Nils Jagdfeld, Patrick Gunia

DirectX Audio DirectX Audio Hintergrundmusik und 3D Sound Es stehen verschiedene Klassen zur Verfügung die den Einsatz von DirectX Audio extrem vereinfachen CMusicManager CMusicSegment CMusicScript C3DMusicSegment (ab DirectX 9) Deklarationen und Implementierungen befinden sich in dmutil.h/cpp Alle notwendigen Funktionalitäten sind in GoodSound.h Hintergrundmusik

GoodSound.h in Anwendergerüst Datei: Space3D.h Starten der Hintergrundmusik Beenden der Hintergrundmusik Interaktion zwischen Anwender und Programm Hintergrundmusik

GoodSound.h Hintergrundmusik Abspielen, Stoppen, Lautstärkeregelung Erledigt alle Verwaltungsaufgaben die im Zuge der Arbeit mit DirectX Audio anfallen CMusicManager* g_pMusicManager = NULL; CMusicSegment* g_pBackgroundMusic = NULL; void CreateSoundObjects(HWND handle); void DestroySoundObjects(void); inline void PlayMusic(CMusicSegment* pSound ) { if(pSound) pSound->Stop(DMUS_SEGF_DEFAULT ); if(pSound) pSound->SetRepeats(DMUS_SEG_REPEAT_INFINITE ); if(pSound) pSound->Play( DMUS_SEGF_DEFAULT ); } inline void StopMusic(CMusicSegment* pSound ) if( pSound ) pSound->Stop(DMUS_SEGF_DEFAULT ); inline void NewVolume( long Volume ) g_pBackgroundMusic->SetVol(Volume ); void CreateSoundObjects(HWND handle) g_pMusicManager = new CMusicManager(); g_pMusicManager->Initialize(handle); g_pMusicManager->CreateSegmentFromFile(&g_pBackgroundMusic, "1.wav"); void DestroySoundObjects(void) if(g_pMusicManager) g_pMusicManager->StopAll(); SAFE_DELETE(g_pBackgroundMusic) SAFE_DELETE( g_pMusicManager ) Vereinfacht den Umgang mit den einzelnen Soundobjekten (abspielen, stoppen, Lautstärke) Abspielen, Stoppen, Lautstärkeregelung der Hintergrundmusik Initialisierung eines CMusicManager Objekts sowie Upload der Hintergrundmusik - Wird aufgerufen zu Programmbeginn in der Funktion: GameInitialisierungsRoutine() Aufräumarbeiten am Ende des Spiels Hintergrundmusik

Implementierung in Space3D.h Funktionen werden nicht direkt verwendet, sondern in Space3D.cpp aufgerufen durch Funktionen: Wichtig: Damit die Funktionen beim Programmstart/-ende durch die Funktionen „GameInitialisierungsRoutine()“ und „GameCleanUpRoutine()“ aufgerufen werden können müssen die dazugehörigen Funktionsprototypen in GameRoutines() als Externals deklariert werden Hintergrundmusik

3D Sound Wozu: Spiele werden realistischer Damit es um uns richtig kracht und bumst gibt es DirectX Audio: Formate: - Verschiedene Audioformate können abgespielt werden - Die bekanntesten: Midi Wave Müssen vom Soundprozessor erzeugt werden Qualität ist abhängig von der Leistungsfähigkeit der Soundkarte Werden nur abgespielt Beanspruchen relativ viel Speicherplatz Klingen viel besser 3D Sound

Was wird benötigt?! Zum Abspielen von 3D Sound braucht man mindestens einen 3DSoundBuffer und einen Listener Wovon hängt Klang ab: von Position und Geschwindigkeit einer Schallquelle Position, Geschwindigkeit und Orientierung des Listeners 3D Sound

Der Listener: Seine Position wird durch zwei Vektoren bestimmt: vOrientFront: Blickrichtung des Zuhörers vOrientTop: Kopfhaltung des Listeners Beide Vektoren stehen senkrecht aufeinander 3D Sound

Parameterfestlegung vor Spielbeginn Parameter zur 3D-Sound-Wiedergabe müssen vor Spielbeginn festgelegt werden Siehe: Set3DParameters() aufgerufen in: GameInitialisierungsRoutine() Faktoren: Dopplerfaktor Beschreibt Frequenzverschiebung einer Schallwelle, wenn diese sich relativ zum Listener bewegt  bewegt sich Schallquelle auf den Listener zu = Frequenzerhöhung;  bewegt sich Schallquelle vom Listener weg = Frequenzverringerung Rolloff-Faktor Beschreibt die Abnahme der Schallintensität mit zunehmender Distanz der Schallquelle vom Listener Wert von 0 = gleich bleibende Intensität Wert von 1 = „natürliche“ Verhältnisse Minimale Distanz Gibt die Entfernung an, ab der sich die Schallintensität nicht mehr erhöht Maximale Distanz Gibt Entfernung an, ab der Schallquelle nicht mehr zu hören ist Parameter werden in zwei Variablen gespeichert G_dsListenerParams  von Typ DS3DLISTENER G_dsBufferParams  von Typ DS3DBUFFER 3D Sound

Set3DParameter() Doppler Rolloff Minimale Distanz Maximale Distanz 3D Sound

3D Audioobjekt erzeugen Funktion CreateSoundObjects()  umfangreicher als in der Hintergrundmusikfunktion, da Listener und Buffer initialisiert werden müss Also: Initialisierung von CMusicManager()-Objekt Enthält Hintergrundmusik Initialisierung von CMusicSegment()-Objekt Enthält ein Explosionssample 3D Sound

Hintergrundmusik-GoodSound.h Erledigt alle Verwaltungsaufgaben die im Zuge der Arbeit mit DirectX Audio anfallen CMusicManager* g_pMusicManager = NULL; CMusicSegment* g_pBackgroundMusic = NULL; void CreateSoundObjects(HWND handle); void DestroySoundObjects(void); inline void PlayMusic(CMusicSegment* pSound ) { if(pSound) pSound->Stop(DMUS_SEGF_DEFAULT ); if(pSound) pSound->SetRepeats(DMUS_SEG_REPEAT_INFINITE ); if(pSound) pSound->Play( DMUS_SEGF_DEFAULT ); } inline void StopMusic(CMusicSegment* pSound ) if( pSound ) pSound->Stop(DMUS_SEGF_DEFAULT ); inline void NewVolume( long Volume ) g_pBackgroundMusic->SetVol(Volume ); void CreateSoundObjects(HWND handle) g_pMusicManager = new CMusicManager(); g_pMusicManager->Initialize(handle); g_pMusicManager->CreateSegmentFromFile(&g_pBackgroundMusic, "1.wav"); void DestroySoundObjects(void) if(g_pMusicManager) g_pMusicManager->StopAll(); SAFE_DELETE(g_pBackgroundMusic) SAFE_DELETE( g_pMusicManager ) Vereinfacht den Umgang mit den einzelnen Soundobjekten (abspielen, stoppen, Lautstärke) Abspielen, Stoppen, Lautsträkeregelung der Hintergrundmusik Initialisierung eines CMusicManager Objekts sowie Upload der Hintergrundmusik - Wird aufgerufen zu Programmbeginn in der Funktion: GameInitialisierungsRoutine() Aufräumarbeiten am Ende des Spiels 3D Sound

CreateSoundObjects() CMusicManager (Hintergrundmusik) & CMusicSegment (Explosions-sample) Objekt werden initialisiert Audiopath-Objekte werden nacheinander erzeugt 3D Soundbuffer mit Audiopath-Objekten verbinden Vorläufige Audio-Path Eigenschaften werden festgelegt (Standardeinstellungen) Listener-Objekte mit einzelnen Audiopath verbinden Orientierung des Listeners wird festgelegt 3D Sound

Ausrichten des 3D Soundbuffers SetObjectProperties() Bekommt als Parameter: Adresse eines Positionsvektors Adresse eines Geschwindigkeitsvektors Um Position des SoundBuffers relativ zum Listener auszurichten benötigen wir die inverse Matrix (g_ObjectKorrekturMatrix) Berücksichtigt die Drehung des Spielers Damit lassen sich Position und Geschwindigkeit der Schallquelle in die Orientierung des Listeners transformieren Zuletzt: Parameter müssen ungenutztem SoundBuffer zugewiesen werden 3D Sound

SetObjectProperties() Inverse Matrix Transformation Parameter werden ungenutztem Buffer zugewiesen 3D Sound