what is the wrong in this code(openAl in vc++)
how are you all?
i need your help
i have this code
#include <conio.h>
#include <stdlib.h>
#include <stdio.h>
#include <al.h>
#include <alc.h>
#include <alut.h>
#pragma comment(lib, "openal32.lib")
#pragma comment(lib, "alut.lib")
/*
* These are OpenAL "names" (or "objects"). They store 开发者_C百科and id of a buffer
* or a source object. Generally you would expect to see the implementation
* use values that scale up from '1', but don't count on it. The spec does
* not make this mandatory (as it is OpenGL). The id's can easily be memory
* pointers as well. It will depend on the implementation.
*/
// Buffers to hold sound data.
ALuint Buffer;
// Sources are points of emitting sound.
ALuint Source;
/*
* These are 3D cartesian vector coordinates. A structure or class would be
* a more flexible of handling these, but for the sake of simplicity we will
* just leave it as is.
*/
// Position of the source sound.
ALfloat SourcePos[] = { 0.0, 0.0, 0.0 };
// Velocity of the source sound.
ALfloat SourceVel[] = { 0.0, 0.0, 0.0 };
// Position of the Listener.
ALfloat ListenerPos[] = { 0.0, 0.0, 0.0 };
// Velocity of the Listener.
ALfloat ListenerVel[] = { 0.0, 0.0, 0.0 };
// Orientation of the Listener. (first 3 elements are "at", second 3 are "up")
// Also note that these should be units of '1'.
ALfloat ListenerOri[] = { 0.0, 0.0, -1.0, 0.0, 1.0, 0.0 };
/*
* ALboolean LoadALData()
*
* This function will load our sample data from the disk using the Alut
* utility and send the data into OpenAL as a buffer. A source is then
* also created to play that buffer.
*/
ALboolean LoadALData()
{
// Variables to load into.
ALenum format;
ALsizei size;
ALvoid* data;
ALsizei freq;
ALboolean loop;
// Load wav data into a buffer.
alGenBuffers(1, &Buffer);
if(alGetError() != AL_NO_ERROR)
return AL_FALSE;
alutLoadWAVFile((ALbyte *)"C:\Users\Toshiba\Desktop\Graduation Project\OpenAL\open AL test\wavdata\FancyPants.wav", &format, &data, &size, &freq, &loop);
alBufferData(Buffer, format, data, size, freq);
alutUnloadWAV(format, data, size, freq);
// Bind the buffer with the source.
alGenSources(1, &Source);
if(alGetError() != AL_NO_ERROR)
return AL_FALSE;
alSourcei (Source, AL_BUFFER, Buffer );
alSourcef (Source, AL_PITCH, 1.0 );
alSourcef (Source, AL_GAIN, 1.0 );
alSourcefv(Source, AL_POSITION, SourcePos);
alSourcefv(Source, AL_VELOCITY, SourceVel);
alSourcei (Source, AL_LOOPING, loop );
// Do another error check and return.
if(alGetError() == AL_NO_ERROR)
return AL_TRUE;
return AL_FALSE;
}
/*
* void SetListenerValues()
*
* We already defined certain values for the Listener, but we need
* to tell OpenAL to use that data. This function does just that.
*/
void SetListenerValues()
{
alListenerfv(AL_POSITION, ListenerPos);
alListenerfv(AL_VELOCITY, ListenerVel);
alListenerfv(AL_ORIENTATION, ListenerOri);
}
/*
* void KillALData()
*
* We have allocated memory for our buffers and sources which needs
* to be returned to the system. This function frees that memory.
*/
void KillALData()
{
alDeleteBuffers(1, &Buffer);
alDeleteSources(1, &Source);
alutExit();
}
int main(int argc, char *argv[])
{
printf("MindCode's OpenAL Lesson 1: Single Static Source\n\n");
printf("Controls:\n");
printf("p) Play\n");
printf("s) Stop\n");
printf("h) Hold (pause)\n");
printf("q) Quit\n\n");
// Initialize OpenAL and clear the error bit.
alutInit(NULL, 0);
alGetError();
// Load the wav data.
if(LoadALData() == AL_FALSE)
{
printf("Error loading data.");
return 0;
}
SetListenerValues();
// Setup an exit procedure.
atexit(KillALData);
// Loop.
ALubyte c = ' ';
while(c != 'q')
{
c = getche();
switch(c)
{
// Pressing 'p' will begin playing the sample.
case 'p': alSourcePlay(Source); break;
// Pressing 's' will stop the sample from playing.
case 's': alSourceStop(Source); break;
// Pressing 'h' will pause the sample.
case 'h': alSourcePause(Source); break;
};
}
return 0;
}
and it is run will>>but i cant here any thing>>
also i am new in programong and wont to program a virtual reality sound in my graduation project >>>and start to learn opeal and vc++ but i dont how to start and from where i must begin
and i want to ask if i need to learn about API win ?? and if i need how i can learn that>>
thank you alote
and i am sorry coz of my english
I recently tried running this very same sample source code from devmaster.net as well. Make sure to change the #includes to reflect the appropriate paths to your OpenAL header files. If you are using C++ and not C, you will need to change #include <conio.h> to be #include <iostream> and use getchar() instead of getche().
Also, I've discovered that the version of alut.h that I have declares the alutLoadWAVFile function to only accept 5 parameters, not 6. The 6th parameter in this example (the loop variable) makes for too many arguments to the function (at least in my version of OpenAL).
{Edited note: Okay, I just discovered that apparently, the Windows version of OpenAL requires the 6th boolean loop parameter, while the Mac version of OpenAL does not.}
Hope this helps.
精彩评论