WinFuture-Forum.de: Openal - WinFuture-Forum.de

Zum Inhalt wechseln

Nachrichten zum Thema: Entwicklung
Seite 1 von 1

Openal Verweis auf nicht aufgelöstes externes Symbol


#1 Mitglied ist offline   Sl3vin 

  • Gruppe: Mitglieder
  • Beiträge: 1
  • Beigetreten: 27. Juli 10
  • Reputation: 0

geschrieben 27. Juli 2010 - 18:53

Hallo Forengemeinde,

seit neurem beschäftige ich mich mit OpenAL in C++. Ich arbeite unter Windows 7 mit Visual Studio 2010 Express. Ich habe mir ein kleines Projekt angelegt, bei dem ich jedoch jetzt an einem Punkt angelangt bin, wo ich allein nicht mehr weiter weiß:

Ich habe mir eine Klasse alSound angelegt, wobei jede Instanz eine .wav-Datei hält und diese unter anderem überhaupt erstmal laden, dann abspielen oder pausieren kann.

Hier die alSound.h:

CODE

#include <al.h>
#include <alut.h>
#include <alc.h>

class alSound
{
public:
ALboolean LoadSound(char fname[40], ALboolean looping);
ALboolean SetProperties(float x, float y, float z, float vx, float vy, float vz);
void SetSourceRelative();
void PlaySound();
void PauseSound();
void StopSound();
void DestroySound();

private:
ALuint alSource;
ALuint alBuffer;
ALenum format;
ALvoid* data;
ALsizei size;
ALsizei frequency;
ALboolean loop;

};


... und die zugehörige alSound.cpp

CODE

#include <windows.h>
#include <math.h>
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
#include <iostream>

#include "alSound.h"


ALboolean
alSound::LoadSound(char fname[40], ALboolean looping)
{
alGenBuffers(1, &alBuffer);
if(alGetError() != AL_NO_ERROR)
return AL_FALSE;

alutLoadWAVFile(fname, &format, (void **) &data, &size, &frequency, &loop);
alBufferData(alBuffer, format, data, size, frequency);
alutUnloadWAV(format, data, size, frequency);

alGenSources(1, &alSource);
if(alGetError() != AL_NO_ERROR)
return AL_FALSE;

alSourcei(alSource, AL_BUFFER, alBuffer);
alSourcef(alSource, AL_PITCH, 1.0f);
alSourcef(alSource, AL_GAIN, 1.0f);
alSourcei(alSource, AL_LOOPING, looping);

if(alGetError() != AL_NO_ERROR)
return AL_FALSE;

return AL_TRUE;
}


ALboolean
alSound::SetProperties(float x, float y, float z, float vx, float vy, float vz)
{
alSource3f(alSource, AL_POSITION, x,y,z);
alSource3f(alSource, AL_VELOCITY, vx,vy,vz);

if(alGetError() != AL_NO_ERROR)
return AL_FALSE;

return AL_TRUE;
}


void
alSound::SetSourceRelative()
{
alSourcei(alSource,AL_SOURCE_RELATIVE,AL_TRUE);
}


void
alSound::PlaySound()
{
alSourcePlay(alSource);
}


void
alSound::PauseSound()
{
alSourcePause(alSource);
}


void
alSound::StopSound()
{
alSourceStop(alSource);
}


void
alSound::DestroySound()
{
alDeleteSources(1, &alSource);
alDeleteBuffers(1, &alBuffer);
}



In der main.cpp will ich nun ein solche Instanz erzeugen und eine underwater.wav laden.

CODE

#include <stdlib.h>
#include <conio.h>
#include <math.h>
#include <iostream>
#include "alSound.h"

ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };

void SetListenerValues()
{
alListenerfv(AL_POSITION, ListenerPos);
alListenerfv(AL_VELOCITY, ListenerVel);
alListenerfv(AL_ORIENTATION, ListenerOri);
}


int main(int argc, char *argv[]) {
alutInit(NULL, 0);
alGetError();
SetListenerValues();
alSound sounds[3];
sounds[0].LoadSound("wavdata/underwater.wav", 1);
sounds[0].SetProperties(8.5f, 0.0f, 15.0f, 0.0f, 0.0f, 0.0f);

sounds[0].PlaySound();

sounds[0].DestroySound();
alutExit();
}



Dabei gibt er mir folgenden Fehler aus:

CODE

1>------ Erstellen gestartet: Projekt: alSound, Konfiguration: Debug Win32 ------
1> main.cpp
1> alSound.cpp
1>f:\docs_photos\studium\4. fs\ion\openal\aquarium\alsound\alsound.cpp(19): warning C4996: 'alutLoadWAVFile': wurde als veraltet deklariert
1> f:\docs_photos\studium\4. fs\ion\openal\aquarium\alsound\includes\alut.h(113): Siehe Deklaration von 'alutLoadWAVFile'
1>f:\docs_photos\studium\4. fs\ion\openal\aquarium\alsound\alsound.cpp(21): warning C4996: 'alutUnloadWAV': wurde als veraltet deklariert
1> f:\docs_photos\studium\4. fs\ion\openal\aquarium\alsound\includes\alut.h(116): Siehe Deklaration von 'alutUnloadWAV'
1> Code wird generiert...
1>main.obj : error LNK2019: Verweis auf nicht aufgelöstes externes Symbol ""public: void __thiscall alSound::PlaySound(void)" (?PlaySound@alSound@@QAEXXZ)" in Funktion "_main".
1>F:\Docs_Photos\Studium\4. FS\ION\OpenAL\aquarium\alSound\Debug\alSound.exe : fatal error LNK1120: 1 nicht aufgelöste externe Verweise.
========== Erstellen: 0 erfolgreich, Fehler bei 1, 0 aktuell, 0 übersprungen ==========


Kommentiere ich allerdings die sounds[0].PlaySound() aus, läuft das Programm wunderbar durch, nur das ich natürlich nichts höre. Nur was soll dieser ungültige Verweis bedeuten?


Vielen Dank für alle, die sich die Mühe machen.

Gruß,
Sl3vin

Dieser Beitrag wurde von Sl3vin bearbeitet: 27. Juli 2010 - 20:51

0

Anzeige



Thema verteilen:


Seite 1 von 1

1 Besucher lesen dieses Thema
Mitglieder: 0, Gäste: 1, unsichtbare Mitglieder: 0