2012-11-21 4 views
0

나는 게임 엔진을위한 새로운 프레임 워크를 쓰고 있어요 고정,하지만 난 하나의 문제를 OpenAL에 붙어있어.를 OpenAL : freealut의 위치 또는이 코드

나는 보통이에 대한 freealut 사용하고 있습니다,하지만 난 그것을 어디를 호스팅하는 유일한 사이트가 오프라인 찾을 수 없습니다, 나는 그것의 사본이 없습니다. 심지어 openal32.lib를 찾기 위해 다른 사람들의 프로젝트를 해부해야했습니다. 내 Google Fu가 약 해졌거나 막대한 인터넷에는 실제로 그 사본이 없습니다.

freealut 프레임 워크 없이는 openAL을 사용하는 방법을 보여주는 몇 가지 예제 코딩을 찾았지만 여러 파일로로드 할 수 없으므로 작동하지 않는 이유를 찾거나 어떻게 든 freealut을 찾았습니다. 그것을 github에있는 소스지만,이 순간에 소스에서 프리 얼럿을 만드는 것은 의문의 여지가 없습니다.

은 내가 IDE로 C++ 2010 시각적 표현을 사용하고 있습니다.

기본적으로 세 개의 명령로드, 재생 및 사운드 파일을 삭제 :

나는이에 내가 찾은 코드를 수정했습니다. 하나의 사운드 파일에서는 정상적으로 작동하지만 더로드하려고하면 작동이 멈 춥니 다.

#include "AudioLib.h" 
#include <iostream> 
#include <cstdlib> 
#include <Windows.h> 
#include <map> 
#include <vector> 

#include <AL\al.h> 
#include <AL\alc.h> 


using namespace std; 
typedef map <const char *, ALuint > MapType; 
MapType soundsbuffer; 
MapType soundssource; 


int endWithError(char* msg, int error=0) 
{ 
//Display error message in console 
cout << msg << "\n"; 
//system("PAUSE"); 
return error; 
} 

vector<const char *> soundslist; 


ALCdevice *device;              
ALCcontext *context; 


int loadSound(const char * input) { 

FILE *fp; 

unsigned char* buf; 

    ALuint source;               
ALuint buffer; 

fp = NULL; 
fp = fopen(input,"rb"); 


char type[4]; 
DWORD size,chunkSize; 
short formatType,channels; 
DWORD sampleRate, avgBytesPerSec; 
short bytesPerSample, bitsPerSample; 
DWORD dataSize; 


//Check that the WAVE file is OK 
fread(type,sizeof(char),4,fp);            //Reads the first bytes in the file 
if(type[0]!='R' || type[1]!='I' || type[2]!='F' || type[3]!='F')   //Should be "RIFF" 
return endWithError ("No RIFF");           //Not RIFF 

fread(&size, sizeof(DWORD),1,fp);           //Continue to read the file 
fread(type, sizeof(char),4,fp);            //Continue to read the file 
if (type[0]!='W' || type[1]!='A' || type[2]!='V' || type[3]!='E')   //This part should be "WAVE" 
return endWithError("not WAVE");           //Not WAVE 

fread(type,sizeof(char),4,fp);            //Continue to read the file 
if (type[0]!='f' || type[1]!='m' || type[2]!='t' || type[3]!=' ')   //This part should be "fmt " 
return endWithError("not fmt ");           //Not fmt 

//Now we know that the file is a acceptable WAVE file 
//Info about the WAVE data is now read and stored 
fread(&chunkSize,sizeof(DWORD),1,fp); 
fread(&formatType,sizeof(short),1,fp); 
fread(&channels,sizeof(short),1,fp); 
fread(&sampleRate,sizeof(DWORD),1,fp); 
fread(&avgBytesPerSec,sizeof(DWORD),1,fp); 
fread(&bytesPerSample,sizeof(short),1,fp); 
fread(&bitsPerSample,sizeof(short),1,fp); 

fread(type,sizeof(char),4,fp); 
if (type[0]!='d' || type[1]!='a' || type[2]!='t' || type[3]!='a')   //This part should be "data" 
return endWithError("Missing DATA");          //not data 

fread(&dataSize,sizeof(DWORD),1,fp);          //The size of the sound data is read 

//Display the info about the WAVE file 
cout << "Chunk Size: " << chunkSize << "\n"; 
cout << "Format Type: " << formatType << "\n"; 
cout << "Channels: " << channels << "\n"; 
cout << "Sample Rate: " << sampleRate << "\n"; 
cout << "Average Bytes Per Second: " << avgBytesPerSec << "\n"; 
cout << "Bytes Per Sample: " << bytesPerSample << "\n"; 
cout << "Bits Per Sample: " << bitsPerSample << "\n"; 
cout << "Data Size: " << dataSize << "\n"; 

buf= new unsigned char[dataSize];       //Allocate memory for the sound data 
cout << fread(buf,sizeof(BYTE),dataSize,fp) << " bytes loaded\n";   //Read the sound data and display the 
                      //number of bytes loaded. 
                      //Should be the same as the Data Size if OK 


//Now OpenAL needs to be initialized 
               //And an OpenAL Context 
device = alcOpenDevice(NULL);            //Open the device 
if(!device) return endWithError("no sound device");       //Error during device oening 
context = alcCreateContext(device, NULL);         //Give the device a context 
alcMakeContextCurrent(context);            //Make the context the current 
if(!context) return endWithError("no sound context");      //Error during context handeling 

                //Stores the sound data 
ALuint frequency=sampleRate;;            //The Sample Rate of the WAVE file 
ALenum format=0;               //The audio format (bits per sample, number of channels) 

alGenBuffers(1, &buffer);             //Generate one OpenAL Buffer and link to "buffer" 
alGenSources(1, &source);             //Generate one OpenAL Source and link to "source" 
if(alGetError() != AL_NO_ERROR) return endWithError("Error GenSource");  //Error during buffer/source generation 

//Figure out the format of the WAVE file 
if(bitsPerSample == 8) 
{ 
    if(channels == 1) 
     format = AL_FORMAT_MONO8; 
    else if(channels == 2) 
     format = AL_FORMAT_STEREO8; 
} 
else if(bitsPerSample == 16) 
{ 
    if(channels == 1) 
     format = AL_FORMAT_MONO16; 
    else if(channels == 2) 
     format = AL_FORMAT_STEREO16; 
} 
if(!format) return endWithError("Wrong BitPerSample");      //Not valid format 

alBufferData(buffer, format, buf, dataSize, frequency);     //Store the sound data in the OpenAL Buffer 
soundsbuffer[input] = buffer; 
soundssource[input] = source; 
soundslist.push_back(input); 


if(alGetError() != AL_NO_ERROR) { 
return endWithError("Error loading ALBuffer");        //Error during buffer loading 
} 
       fclose(fp); 
     delete[] buf;  

} 

int playSound(const char * input) { 
    //Sound setting variables 
ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };         //Position of the source sound 
ALfloat SourceVel[] = { 0.0, 0.0, 0.0 };         //Velocity of the source sound 
ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };         //Position of the listener 
ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };         //Velocity of the listener 
ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };     //Orientation of the listener 
                      //First direction vector, then vector pointing up) 
//Listener                    
alListenerfv(AL_POSITION, ListenerPos);         //Set position of the listener 
alListenerfv(AL_VELOCITY, ListenerVel);         //Set velocity of the listener 
alListenerfv(AL_ORIENTATION, ListenerOri);         //Set orientation of the listener 

ALuint source = soundssource[input]; 
ALuint buffer = soundsbuffer[input]; 

//Source 
alSourcei (source, AL_BUFFER, buffer);         //Link the buffer to the source 
alSourcef (source, AL_PITCH, 1.0f );         //Set the pitch of the source 
alSourcef (source, AL_GAIN,  1.0f );         //Set the gain of the source 
alSourcefv(source, AL_POSITION, SourcePos);         //Set the position of the source 
alSourcefv(source, AL_VELOCITY, SourceVel);         //Set the velocity of the source 
alSourcei (source, AL_LOOPING, AL_FALSE);         //Set if source is looping sound 

//PLAY 
alSourcePlay(source);              //Play the sound buffer linked to the source 
if(alGetError() != AL_NO_ERROR) return endWithError("Error playing sound"); //Error when playing sound 
//system("PAUSE");               //Pause to let the sound play 



} 


void deleteSound() { 
    //Clean-up 
                  //Close the WAVE file 
                   //Delete the sound data buffer 

for(int i = 0; i < soundslist.size(); i++) { 
    const char * out = soundslist[i]; 

alDeleteSources(1, &soundssource[out]);            //Delete the OpenAL Source 
alDeleteBuffers(1, &soundsbuffer[out]); 
}   
//Delete the OpenAL Buffer 
soundslist.clear(); 

alcMakeContextCurrent(NULL);            //Make no context current 
alcDestroyContext(context);             //Destroy the OpenAL Context 
alcCloseDevice(device);  

} 

그래서 내가 요구하고있는 무슨 : 나는 freealut 파일 또는 코드 몇 가지 도움이 중 하나가 필요합니다. 모든 솔루션? 좋아

+0

현재 freealut의 32 비트 빌드를 찾을 수 있습니다 : 링크를 필요로 사람들을위한

http://downloads.factorcode.org/dlls/인가는'alut.dll' 파일입니다. 나는 freealut 창 dll의 64 비트 빌드가 어디에도 존재하지 않는다고 생각한다. 당신은 스스로 그것을 컴파일해야합니다. –

답변