I en VR applikation är man oftast intresserad av att simulera en miljö, vare sig det
är en naturlig, eller en "onaturlig".
Den visuella delen är ofta mycket viktig, men en annan faktor som kan spela minst lika
stor roll är ljudet.
I vardagen så använder vi hörseln för att lokalisera ljudkällor men även för att navigera.
Att i en Virtual Environment (VE) ha spatialt ljud är oehört kraftfullt i många avseenden och kan dra uppmärksamheten från bristfällig och långsam grafik.
Utrustning för att generera ljud har historiskt sett oftast varit mjukvarumässig
eller kostat stora pengar.
Ett exempel är ett system from Lake Huron [1] och som kostar stora pengar och innefattar
såväl mjukvara som dyra signalprocessorer
Figur 1: Huron 20 Digital Audio Convolution Workstation
Det finns även en hel del mjukvarulösningar. Exempel på det är Virtual Sound Server (VSS) från NCSA [2]
Problemet med att simulera spatialt ljud är att det går åt en hel del CPU-cykler om det skall göras i mjukvara. Med dedikerad signalprocessorer så kan datorns CPU avlastas och man kan hantera fler ljud samtidigt. Det är därför odiskutabelt att hårdvarustöd för spatialt ljud är direkt nödvändigt.
Ingen kan väl idag bestrida att utvecklingen går enormt fort inom dagens spelindustri. Det ställs högra och högre krav på hårdvaran. Dessutom så är det så stor marknad så att det finns stora pengar för både hård- och mjukvaru tillverkare att tjäna.
Detta har lett till att ett företag vid namn Aureal Inc [3]. har satsat stora pengar på att utveckla ett billigt chip för realtidshantering av spatialt ljud. Det första, Vortex1 blev en succe och har inneburit att många spel idag har sant spatialt ljud.
De har nu släppt ett nytt chip vid namn Vortex 2 som har betydligt högre prestanda men även en del nya finesser.
Bland annat så stödjer det Wavetracing, en algoritm för att simulera rumsakustik i realtid. Denna kan jämföras med Raytracing, en algoritm för att skapa naturtrogna bilder. Aureal har även en API (Application Programming Interface) för att underlätta utveckling av applikationer som nyttjar Vortex 2 processorn. Denna API laddar man gratis ned från Aureals hemsida. Problemet med detta är just att de satsar på en spelmarknad och inte på en VR marknad, åtminstånde inte primärt. För att få fullt hårdvarustöd så måste man idag använda sig av en Windows95/98 baserad plattform. Under WindowsNT fungerar det mesta, men inte allt. Detta beror på NT:s dåliga stöd för hårdvara inom multi-media. Med Windows2000 kommer detta att förändras. Det finns även planer på att stödja Vortex2 chipet under Linux. 4Front Tech. [4] är ett företag som utvecklar drivrutiner för diverse ljudkort under linux. För närvarande finns inget stöd för Vortex2. Men det är under utveckling.
Det mest basala vid ljudsimulering är 3D ljud. Att man kan placera ut en "virtuell" ljudkälla och en lyssnare. Rör sig ljudkällan eller lyssnaren i förhållande till varandra så skall detta återspeglas på ett naturligt sätt.
Nu är örats form ganska speciellt konstruerad. Genom att örat är "riktat" framåt, så kan vi mycket lätt avgöra om ljud kommer framifrån eller bakifrån. Detta kommer sig av att örat uppfattar frekvenser olika beroende på om det kommer bakifrån eller framifrån. Örats form är även mycket individuell. För att kunna simulera detta i ett program, så måste man ta hänsyn till dessa faktorer. Använder lyssnaren hörlurar, så måste mjukvaran/hårdvaran kunna simulera ljud, inte bara höger/vänster utan även bakom/framför. Detta är en av de uppgifter som Vortex chipen gör. Denna metod kallas Head Related Transfer Functions (HRTFs).
Med Vortex2 så har man även möjlighet att ha 4 utkanaler (vä/hö, fram/bak) vilket är lämpligare med en flerhövdad publik.
Reflection är ett begrepp som innebär att ljudet studsar och reflekteras mot väggar och föremål med olika dämpning och som leder till att ljudet når lyssnaren från olika håll och med olika egenskaper. Detta leder till en naturligare ljudbild.
Med Occlusion menas att ljud dämpas av föremål som finns i vägen för ljudvågorna. Exempelvis ett öppet fönster släpper igenom ljudet medans ett stängt fönster dämpar ljudet betydligt.
Med Doppler menas den effekt som uppstår när en ljudkälla rör sig mot eller ifrån en betraktare. En ljudkälla som närmar sig upplevs ha högre frekvens än en som avlägsnar sig.
Vortex2 chipet kan hantera ca 16 ljudkällor på samma gång. Detta innebär att relativt komplicerade ljud-miljöer kan byggas upp.
Företaget Aureal Inc. har även en Application Programming Interface (API) som heter
A3D. Med denna API kan man utnyttja den fulla kraften hos Vortex2 processorn. Det har en
objektorienterad uppbyggnad och är skriven i C++.
Genom att öppna ljudfiler, placera dem spatialt, placera lyssnare, starta ljud, flytta
ljud, ... så bygger man upp en ljudsimulering.
Syftet med detta projekt är att implementera en client-server lösning. Där servern exekveras på en PC utrustad med ett ljudkort med Vortex2 chip och där klienten kan exekveras på godtycklig platform. Clienten anropar en API liknande den som A3D, med skillnaden att själva ljudsimuleringen sker på servern.
Exempel:
Client: 1. Skapa och placera ljudkälla1 |
Server 1. Tar emot kommandon och utför dem i A3D
|
Användningen av Client API:t bör vara så transparent som möjligt för programmeraren. Tanken är att man inte egentligen skall märka någon större skillnad om man sitter och skriver A3D anrop på en PC med ett ljudkort installerat lokalt, eller om man sitter på en SGI maskin och utnyttjar kortet via en server.
Figure 2: A3D Interface Hiearchy
IA3D4: Globala parametrar, exempel: GetCoordinateSystem, Shutdown, ...
IA3DSource: Ljudkällor, exempel: LoadWaveData, Play, ...
IA3DListener: Lyssnare, exempel: SetOrientation, SetVelocity, ...
IA3DGeom: Hantering av geometriska objekt för occlusion och liknande.
Exempelkod på A3D:
/* Init A3D*/
hr = A3dCreate(NULL, (void **) &a3droot, NULL, NULL);
/* Create a listnener */
hr = a3droot->QueryInterface(IID_IA3dListener, (void **)&a3dlis);
/* make a new source. at this stage the source
is empty - no wave data */
hr = a3droot->NewSource( A3DSOURCE_INITIAL_RENDERMODE_A3D , &a3dsrc);
/* Load a sound file */
hr = a3dsrc->LoadWaveFile("heli.wav");
/* Start playing sound */
hr = a3dsrc->Play(A3D_LOOPED);
/* Main loop */
while (1) {
/* clear the audio frame */
hr = a3droot->Clear();
/* locate the source */
hr = a3dsrc->SetPosition3f(xpos, 0.0f, -5.0f);
/* bounce the source between -10 and +10m in x */
xpos += incr;
if (xpos > 10.0f || xpos < -10.0f)
incr = -incr;
/* send this frame to be rendered */
hr = a3droot->Flush();
}
I detta exempel skapas en ljudkälla och en lyssnare.
I huvudloopen så flyttas ljudkällan fram och tillbaka mellan höger och vänster kanal.
Målet kan delas upp i två steg. Där steg 1 är en första implementation med endast
delar av A3D:s api implementerat.
Steg 2 medger användning av A3D:s hela API.
Servern kommer aldrig att ha mer än en klient uppkopplad.
Målet är en Server som exekveras på en PC utrustad med WindowsNT/Windows98 och ett
ljudkort med Vortex2 chip.
Samt en klient API som medgör användningen av Aureals API, A3D via en
nätverksuppkoppling.
Man skall kunna
Case 1 - Client/Server lösning
Case 2 - Hårdvara lokalt installerad
Distribuerade system, spatial sound, Wavetracing.
1 (alt 2) *20 poäng.
Tidsplaneringen för projektet bör fortskrida enligt följande tidsplan:
Jan 00 | Projektet inleds. Tid för inläsning och fördjupning |
Juni 00 | Projektet klart. Rapportens slutförande. |
Juni 00 | Examination |
Intresserad ? Ta kontakt med andersb@hpc2n.umu.se
[2] http://cage.ncsa.uiuc.edu/adg/VSS/
Senast ändrad: 1999-12-14