OpenAL 1.0 probléma
2002-11-20T22:26:41+01:00
2002-11-22T21:13:40+01:00
2022-07-19T05:52:37+02:00
  • ezt a wav-os dolgot jo, hogy megirtad, szinte biztos, hogy en is belefutottam volna :)

    így rengeteg minden nem teljesen világos számomra. Különösen a Velocity meg a doplerek működése, na meg az EAX. De ezek folyamatban vannak :). Ha ebben jutsz valamire és megosztanád velem nagyon örülnék neki.

    hetvegen valszeg lesz idom jaccani vele, ha eljutok ezekig, akkor megirom a tapasztalataimat. EAX sajna nincs a gepemen (notebook, integralt ESS Allegro-val), de doppler-be valszeg belemelyedek.

    Egyébként nagyon teccik és erőteljesen hansolít az OpenGL arhitektúrához. A másik nagy előnye az OpenAL-nek hogy létezik LINUX, WIN és MAC vátozata is, aminek elönyét aszthiszem nem kell ecsetelni.

    igen, nekem is az OpenGL-lel valo hasonlosaga fogott meg azonnal, a platformfuggetlenseggel annyira nem szoktam torodni, de talan igy megis van esely ra :)

    sztupi
    Mutasd a teljes hozzászólást!
  • Skacok rájöttem, hogy mi volt a probléma!!!
    Hét b...meg mindenre gondoltam, csak arra nem hogy a hangeffeltusoknak mono formátumuaknak kell lenni! Egyébként teljesen logikus a dolog így utólag belegondolva, csak egy hetet szívtam a bambaságom miatt. Állítgattam a dopler faktortól kezdve a hang irányítottságig mindent, csak pont ez nem jutott eszembe.
    Egyébkent nagyon szépen lejatsza a sztereo 16bites hangmintákat, sőt össze is tudja mixelni a csatornák hangjait, csak sztereóban nem pozjcionálja térben a hangot. Hanem a hangmintánam megfelelően a jobb oldali cstornát a jobb oldalon, a balt a bal oldaliban jatsza le (egyébkent logikus is), csak ezt a doksiban én sehol sem lattam leírva. Kezdett bagyon elmenni a kedvem az egész OpenAL-től, de ez visszahozta a bizalmam, remélem más nem fogja elkövetni ezt a triviális hibát, okulva az enyémből.
    A programomban én külön osztályt hoztam létre a hangok kezelésére, itt egy kicsit hosszú lenne de a lényeg:

    #include <alut.h> // gondolom 1értlmű miért kell
    //------------------------------------------------------------------------------
    void CAudio::Init(void)
    {
    // OpenAL inicializálása
    alutInit(NULL,0);

    alListenerf(AL_GAIN, 1.0f);

    // EAX detektálása
    EAXver = 0;
    if( alIsExtensionPresent( (ALubyte*)"EAX2.0") == AL_TRUE )
    {
    EAXver = 2;
    } else {
    if( alIsExtensionPresent( (ALubyte*)"EAX") == AL_TRUE )
    {
    EAXver = 1;
    }
    }
    // EAX extension f&#8319;gv&#920;nyek lek&#920;rdez&#920;se
    if(EAXver)
    {
    eaxSet = (EAXSet)alGetProcAddress( (ALubyte*)"EAXSet");
    eaxGet = (EAXGet)alGetProcAddress( (ALubyte*)"EAXGet");
    }
    }
    //------------------------------------------------------------------------------
    void CAudio::SetListenerPos(ALfloat *position)
    {
    alGetError();
    alListenerfv(AL_POSITION, position);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("Listener AL_POSITION hiba!",error); return; }
    }
    //------------------------------------------------------------------------------
    int CAudio::LoadWAVFile(char* filename, int _loop)
    {
    ALsizei size, freq;
    ALenum format;
    ALvoid *data;
    ALboolean looping;
    ALint error;

    alGetError(); // errork&#8804;d t÷rl&#920;se

    alGenBuffers(1, &buffer[nextBuffer]);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("Buffer l&#920;trehozßsi hiba!",error); return -1; }

    alGenSources(1, &source[nextSource]);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("Source l&#920;trehozßsi hiba!",error); return -1; }

    alutLoadWAVFile(filename, &format, &data, &size, &freq, &looping);
    if ( !size ){ DisplayError("File megnyitßsi hiba!",error); return 0; }
    alBufferData (buffer[nextBuffer], format, data, size, freq);
    alutUnloadWAV(format,data,size,freq);
    alSourcei(source[nextSource], AL_BUFFER, buffer[nextBuffer]);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("Source AL_BUFFER hiba!",error); return -1; }
    alSourcei(source[nextSource], AL_LOOPING, _loop);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("Source AL_LOOPING hiba!",error); return -1; }
    alSourcef(source[nextSource], AL_GAIN, 1.0f);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("Source AL_GAIN hiba!",error); return -1; }
    nextBuffer++;
    nextSource++;
    return (nextBuffer-1);
    }
    //------------------------------------------------------------------------------
    void CAudio::SourcePlay(int source_id)
    {
    alGetError();
    alSourcePlay( source[source_id] );
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("SourcePlay hiba!",error); return; }
    }
    //------------------------------------------------------------------------------
    void CAudio::SourceStop(int source_id)
    {
    alGetError();
    alSourceStop( source[source_id] );
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("SourceStop hiba!",error); return; }
    }
    //------------------------------------------------------------------------------
    void CAudio::SetSourcePos(int source_id, ALfloat *position)
    {
    alGetError();
    alSourcefv( source[source_id], AL_POSITION, position);
    if( (error = alGetError()) != AL_NO_ERROR){ DisplayError("SourcePosition hiba!",error); return; }
    }
    //------------------------------------------------------------------------------


    a f&#8993;programban meg:

    float ppos[3] = { 0.0f, 0.0f, 0.0f };
    float srcpos[3] = { 0.0f, -1.0f, -5.0f };
    int s_id;


    Audio = new CAudio;
    Audio->Init();
    s_id = Audio->LoadWAVFile("j:\\\\\\\\\\\\\\\\2_16_mono.wav",1);
    Audio->SetListenerPos(ppos);
    Audio->SetSourcePos(s_id, srcpos);
    Audio->SourcePlay(s_id);

    A sok hibaellenörzés nem fontos szerintem csak a WAV betöltése után. Azért van benne ilyen sok, mert már kínomban nem tudtam hol van a hiba. Ha valami nem világos szivesen segítek, de még én is most tudtam elkezdeni vele kísérletezni, így rengeteg minden nem teljesen világos számomra. Különösen a Velocity meg a doplerek működése, na meg az EAX. De ezek folyamatban vannak :). Ha ebben jutsz valamire és megosztanád velem nagyon örülnék neki.
    Egyébként nagyon teccik és erőteljesen hansolít az OpenGL arhitektúrához. A másik nagy előnye az OpenAL-nek hogy létezik LINUX, WIN és MAC vátozata is, aminek elönyét aszthiszem nem kell ecsetelni.
    Mutasd a teljes hozzászólást!
  • wowww... nem is tudtam, hogy ilyen is van, beleneztem, nagyon elso ranezesre asszem, hogy tecceni fog.

    a problemaval kapcsolatban: nem postolnad fel a kodot (legalabbis az idevago reszet, vagy valami reprodukciojat)? nezegessuk kozosen, hatha valaki eszrevesz valamit.

    sztupi
    Mutasd a teljes hozzászólást!
  • Használta már valaki OpenAL-t?
    Van egy kis gondom vele. A probléma az, hogy egyszerűen nem hajlando ay OpenAL térben megszólaltatni a hangokat. Hiába allítom be a alSource és az alListener pozíciókat egyszerűen nem hajlamdó a jobb és bal csatornákat külön kezelni. Mintha csak MONO-ban lenne hajlandó működni. Tehát hiába helyezem a Source-t alSource(AL_POSITION, poz) -al a Listener-hez képest jobb oldalra, mind a két hangszóróban ugyanolyan hangerővel szól. Egyszerűen nem tudok rájönni a hiba okára.
    ( A példaprogramok viszont frankón szólnak a külön csatornákban. Ja Win32 alatt próbálkozom, a Creative oldaláról letölthető OpenAL 1.0 SDK-val.)

    Nagyon megköszönném, ha tudna valaki segíteni, vagy ötleteket adni.
    Mutasd a teljes hozzászólást!
abcd