1 / 15

Musik und 3D Sound

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)

carlo
Download Presentation

Musik und 3D Sound

An Image/Link below is provided (as is) to download presentation Download Policy: Content on the Website is provided to you AS IS for your information and personal use and may not be sold / licensed / shared on other websites without getting consent from its author. Content is provided to you AS IS for your information and personal use only. Download presentation by click this link. While downloading, if for some reason you are not able to download a presentation, the publisher may have deleted the file from their server. During download, if you can't get a presentation, the file might be deleted by the publisher.

E N D

Presentation Transcript


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

  2. 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

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

  4. Erledigt alle Verwaltungsaufgaben die im Zuge der Arbeit mit DirectX Audio anfallen GoodSound.h Vereinfacht den Umgang mit den einzelnen Soundobjekten (abspielen, stoppen, Lautstärke) • 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 ) • } 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

  5. 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

  6. 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 • Werden nur abgespielt • Beanspruchen relativ viel Speicherplatz • Klingen viel besser • Müssen vom Soundprozessor erzeugt werden • Qualität ist abhängig von der Leistungsfähigkeit der Soundkarte 3D Sound

  7. 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

  8. 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

  9. 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

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

  11. 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

  12. Erledigt alle Verwaltungsaufgaben die im Zuge der Arbeit mit DirectX Audio anfallen Hintergrundmusik-GoodSound.h Vereinfacht den Umgang mit den einzelnen Soundobjekten (abspielen, stoppen, Lautstärke) • 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 ) • } 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

  13. 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

  14. 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

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

More Related