ПрограммированиеФорумЗвук

OpenAL. Нет alut'а

#0
15:31, 30 мар 2017

Доброго времени суток, Господа. Захотел подключить к своему проекту звук, натолкнулся на OpenAL впервые. Прочел немного документации о нем, установил.
Как сказано, alut небольшая оберточка над OpenAL, которая поставляется вместе с OpenAL. Почему-то после установки OpenAL alut я так и не нашел.
Решил порыскать в инете, качнул...статические библиотеки у этого alut'а с расширением .a
Честно, первый раз вижу такие.
Подскажите пожалуйста, как мне подключить эти либы к VS 2015? Или как установить OpenAL вместе с alut одновременно - они вроде как вместе идут.

#1
17:14, 30 мар 2017

Скомпилируй alut из исходников, че как ни пацан

#2
23:00, 30 мар 2017

>расширением .a
это линь

#3
9:39, 31 мар 2017

mr.DIMAS, хотел уже готовенькое:)
Короче начал компилировать в lib, все удачно. Подключаю теперь эту статическую библиотеку к своему проекту, пишет, как-будто не может найти определений некоторых функций... реализация их имеется, сам проверял, но почему-то, значит, она не скомпилировалась в эту библиотеку. Вот ошибки:

1>hello_world.obj : error LNK2019: unresolved external symbol __imp__alutInit referenced in function _main
1>hello_world.obj : error LNK2019: unresolved external symbol __imp__alutExit referenced in function _main
1>hello_world.obj : error LNK2019: unresolved external symbol __imp__alutCreateBufferHelloWorld referenced in function _main
1>hello_world.obj : error LNK2019: unresolved external symbol __imp__alutSleep referenced in function _main

Кстати, в dll компирируется, и проект нормально работает с ней. Только с lib не получается.

#4
13:17, 31 мар 2017

bretbas
Пути до статических библиотек нормально прописал?

#5
13:26, 31 мар 2017

AMM1AK, да, все нормально

#6
14:37, 31 мар 2017

Короче остановился на динамической библиотеки. Подключаю к проекту. Ничерта не работает.
В инете нашел легкий пример для реализации одного статического слушателя, вокруг которого вращается один источник звука. Код компилируется, но выдает ошибки при загрузки wav файла, причем любого. Вот код:

#include  <iostream>
#include  <string>
#include  <time.h>

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

#include  "Vector3D.h"

#include  <conio.h>


ALuint buffer;                    // buffer for sound data
ALuint source;                    // source of sound

Vector3D  sourcePos ( 0, 0, 2 );          // source position
Vector3D  sourceVel ( 0, 0, 0 );          // source velocity (used for doppler effect)

Vector3D  listenerPos ( 0, 0, 0 );        // listeners position
Vector3D  listenerVel ( 0, 0, 0 );        // listern's velocity
                
float     listenerOri [] = { 0, 0, -1,  0, 1, 0 }; // listeners orientation (forward, up)

bool  setupSource ( const char* fileName )
{
  ALenum    format;
  ALsizei    size;
  ALvoid    * data;
  ALsizei   freq;
  ALboolean  loop;

  alGenBuffers ( 1, &buffer );          // create buffer

  if ( alGetError () != AL_NO_ERROR )
    return false;
                          // load .wav data using alut
  alutLoadWAVFile ( (ALbyte *)fileName, &format, &data, &size, &freq, &loop );
  alBufferData    ( buffer, format, data, size, freq );
  alutUnloadWAV   ( format, data, size, freq );

  alGenSources ( 1, &source );          // create source

  if ( alGetError () != AL_NO_ERROR )
    return false;
                          // setup source params
  alSourcei  ( source, AL_BUFFER,   buffer    );
  alSourcef  ( source, AL_PITCH,    1.0f      );
  alSourcef  ( source, AL_GAIN,     1.0f      );
  alSourcefv ( source, AL_POSITION, sourcePos );
  alSourcefv ( source, AL_VELOCITY, sourceVel );
  alSourcei  ( source, AL_LOOPING,  AL_TRUE    );

  return true;
}

int main ()
{
  alutInit     ( NULL, 0 );          // initialize OpenAL and clear the error bit.
  alGetError   ();

  const char* fileName = "qq.wav";
  
  if ( !setupSource ( fileName ) )      // load the wav data.
  {
    std :: cout << "Error loading data: " << fileName;
    return 0;
  }

  alListenerfv ( AL_POSITION,    listenerPos );
  alListenerfv ( AL_VELOCITY,    listenerVel );
  alListenerfv ( AL_ORIENTATION, listenerOri );

  std :: cout << "Press q to quit\n";
  
  alSourcePlay ( source );

  while ( !kbhit () )
  {
    float  secs = clock () / CLOCKS_PER_SEC;

    sourcePos.x = 5*sin(secs*0.3);
    sourcePos.z = 5*sin(secs*0.3);

    alSourcefv ( source, AL_POSITION, sourcePos );
  }

  getche ();

  alDeleteBuffers ( 1, &buffer );
  alDeleteSources ( 1, &source );
  alutExit        ();
  
  return 0;
}

Что здесь может быть не так, не подскажете?

#7
15:41, 31 мар 2017

Проблему решил, этот код оказывается только mono wav читает.
Вопрос все-таки, как же lib'ку подключить, а не dll?:)

ПрограммированиеФорумЗвук

Тема в архиве.