CSSSS - A Client Server Spatial Sound System


Bakgrund

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

picture of the Huron PCI

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.

 

PC:ns utveckling

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.

Simulering

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.

Mjukvara

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.

 

Detta projekt

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
2. Skapa och placera lyssnare
3. Ladda ljudfil för ljudkälla1
4. Starta ljudkälla1, loopa oändligt
5. Flytta  lyssnare

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.

 

A3D

 

wpe1.jpg (22472 bytes)

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ål

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.

Steg 1

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

 

Steg 2

Tekniska detaljer

  1. Client API:t bör vara konstruerat så, att om clienten exekveras på en maskin med ett Vortex2 chip lokalt installerat, så sker ingen serveruppkoppling, utan direktkommunikation med A3D.
  2. När en klient laddar en ljudfil, så skall den ligga lokalt hos klienten, ljudfilen skall vid initiering skickas via nätverket till servern, som lagrar den lokalt.
  3. Vid varje anslutning till servern så skall en identifikationsprocess ske, om clienten så önskar så kan den göra en request på att använda tidigare skickade ljudfiler. Detta förutsätter att klienten skickar med ett godkänt, tidigare erhållet identifikations nummer.
  4. Klient API:t bör vara transparent för användaren. Mao. man skall kunna programmera i så stor utsträckning som möjligt på samma sätt som i A3D.
  5. Kommunikationen bör ske med Remote Procedure Calls (RPC).
  6. Alla hårdvaruspecifika detaljer SKALL vara modulariserade så att portabilitet uppnås.
  7. Servern skall kunna hantera uppdateringsfrekvenser på > 200 Hz.

Case 1 - Client/Server lösning

Case 2 - Hårdvara lokalt installerad

 

Teoretisk fördjupning

Distribuerade system, spatial sound, Wavetracing.

Omfattning

1 (alt 2) *20 poäng.

Tidsplanering

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

 

Kontakt

Intresserad ? Ta kontakt med andersb@hpc2n.umu.se

 

Referenser

[1] http://www.lakedsp.com/

[2] http://cage.ncsa.uiuc.edu/adg/VSS/

[3] http://www.aureal.com

[4] http://www.opensound.com


Senast ändrad: 1999-12-14