Biblioteka OpenAL C++

0

Witam załączyłem bibliotekę w taki sposób:
http://wrzutka.zset.pl/di/LWIB/1.png
http://wrzutka.zset.pl/di/N4QW/2.png

*Bibliotekę "alut.h" znalazłem w internecie i ją wrzuciłem razem z innymi plikami include bo nie miałem tego pliku..

A kod wygląda tak:

#include <iostream>
#include <al.h>
#include <alc.h>
#include <efx.h>
#include <alut.h>
#include <xram.h>
#include <EFX-Util.h>
#include <efx-creative.h>
#include <windows.h>
#include <conio.h>

using namespace std;


// gcc -o simplealut simplealut.c `pkg-config --libs freealut`
//
#define FILENAME "sample.wav"

int main(int argc, char **argv)
{

    ALuint buffer, source;
    ALuint state;

    // Initialize the environment
    alutInit(0, NULL);

    // Capture errors
    alGetError();

    // Load pcm data into buffer
    buffer = alutCreateBufferFromFile(FILENAME);

    // Create sound source (use buffer to fill source)
    alGenSources(1, &source);
    alSourcei(source, AL_BUFFER, buffer);

    // Play
    alSourcePlay(source);

    // Wait for the song to complete
    do {
        alGetSourcei(source, AL_SOURCE_STATE, &state);
    } while (state == AL_PLAYING);

    // Clean up sources and buffers
    alDeleteSources(1, &source);
    alDeleteBuffers(1, &buffer);

    // Exit everything
    alutExit();

    return 0;
}

I mam takie błędy:

||=== Build: Debug in xVasvg (compiler: GNU GCC Compiler) ===|
C:\Code blocks cpp\xVasvg\main.cpp||In function 'int main(int, char**)':|
C:\Code blocks cpp\xVasvg\main.cpp|43|error: invalid conversion from 'ALuint* {aka unsigned int*}' to 'ALint* {aka int*}' [-fpermissive]|
C:\Program Files (x86)\CodeBlocks\SDK\OpenAL 1.1 SDK\include\al.h|531|note: initializing argument 3 of 'void alGetSourcei(ALuint, ALenum, ALint*)'|
||=== Build failed: 1 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Co mam źle?

0

To, co Ci kompilator napisał w treści błędu. Trzeci argument alSourcei i alGetSourcei powinien być typu ALint.

0

Chodziło o zamienienie

    ALuint state;

na:

    ALint state;

?

Bo mam teraz takie błędy:

||=== Build: Debug in xVasvg (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Code blocks cpp\xVasvg\main.cpp|26|undefined reference to `_imp__alutInit'|
C:\Code blocks cpp\xVasvg\main.cpp|32|undefined reference to `_imp__alutCreateBufferFromFile'|
C:\Code blocks cpp\xVasvg\main.cpp|51|undefined reference to `_imp__alutExit'|
||error: ld returned 1 exit status|
||=== Build failed: 4 error(s), 0 warning(s) (0 minute(s), 2 second(s)) ===|


0

Dodaj w opcjach projektu plik biblioteki (alut?)

0

Dodać jako plik nagłówkowy do drzewka projektu?

0

W opcjach projektu, gdzie dodaje się biblioteki (Linker settings?).

0

additional dependencies w opcjach linera.

0

http://wrzutka.zset.pl/di/64L1/1.png
Tutaj miałem to wrzucić?

Bo wywala błąd:

fatal error: al.h: No such file or directory

A wszystkie pliki include są w tym samym folderze

0

Co Ty, plik nagłówkowy dajesz jako bibliotekę? :| Wpisz tam alut lub libalut (w razie potrzeby dodaj rozszerzenie .a).

0

Zrobiłem w linkerze wszystkie kombinacje związane z alut i libalut to wywalało za każdym razem przy kompilacji:

ld.exe||cannot find -lalut|
||error: ld returned 1 exit status|

0

który plik?
Jeżeli chodzi o plik lalut to nic o nim nie wiem.

0

To jak, bawisz się z tym od dwóch tygodni i nawet nie sprawdziłeś, czy plik, którego nazwę zasugerowałem, w ogóle jest gdzieś w katalogach OpenAL? Zajrzyj do <OpenAL SDK>\libs\win64 i sprawdź, czy jest tam wspomniany plik (lub libalut.a).

0

Wygląda na to że bawisz się OpenALem wykorzystując do tego funkcje z biblioteki alut, która nie jest do openal dołączona. Ściągnij se aluta.

0

0x666

W tym katalogu który podałeś nie mam takiego pliku są tylko pliki EFX-Util.lib EFX-Util.lib OpenAL32.lib

czaffik

plik alut.h mam pobrany i jest w folderze include.

0

Nie masz pliku alut.lib czy jak on tam się dokładnie nazywa, który powinien być w folderze lib. To że masz same deklaracje funkcji w pliku alut.h to cię nie urządza, musisz mieć jeszcze definicje, a te są zazwyczaj zawarte w plikach .lib

0

Mam w folderze include plik alut.h
Ja ten plik pobrałem dodatkowo bo na początku tego pliku nie miałem.

0

Wygląda na to, że plikiem biblioteki jest OpenAL32.lib, ale biblioteki z rozszerzeniem .lib to raczej do VC a nie MinGW. Ściągnij bibliotekę stąd -> http://www.openal-soft.org/openal-binaries/openal-soft-1.18.2-bin.zip Tam jest także wersja dla MinGW (libOpenAL32.dll.a).

0

Załadowałem ta bibliotekę którą podałeś.

Do Link libraries wpisałem alut
Do Search directories > Compiler podałem ścieżkę C:\Program Files (x86)\CodeBlocks\SDK\openal-soft-1.18.2-bin\include\AL
Do Search Directories > Linker podałem ścieżkę C:\Program Files (x86)\CodeBlocks\SDK\openal-soft-1.18.2-bin\libs\Win64

i kompilator takie mi błędy wyrzucił:

||=== Build: Debug in OpenAL (compiler: GNU GCC Compiler) ===|
ld.exe||cannot find -lalut|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

0

Dlaczego dałeś alut, jeśli w tym buildzie biblioteka nazywa się libOpenAL32.dll.a?

0

To co wpisuje się w linkerze ?

W jednej z twoich wcześniejszych odpowiedzi napisałeś żebym coś takiego napisał.

0

Podałem, żebyś dołączył alut, bo nie wiedziałem, co masz w katalogach, podałem Ci nazwę z internetowych przykładów. Dodaj OpenAL32.dll lub libOpenAL32.dll.a.

0

Wpisałem do linkera OpenAL32.dll kompilator wyrzucił:

||=== Build: Debug in OpenAL (compiler: GNU GCC Compiler) ===|
obj\Debug\main.o||In function `main':|
C:\Code blocks cpp\OpenAL\main.cpp|25|undefined reference to `_imp__alutInit'|
C:\Code blocks cpp\OpenAL\main.cpp|28|undefined reference to `_imp__alGetError'|
C:\Code blocks cpp\OpenAL\main.cpp|31|undefined reference to `_imp__alutCreateBufferFromFile'|
C:\Code blocks cpp\OpenAL\main.cpp|34|undefined reference to `_imp__alGenSources'|
C:\Code blocks cpp\OpenAL\main.cpp|35|undefined reference to `_imp__alSourcei'|
C:\Code blocks cpp\OpenAL\main.cpp|38|undefined reference to `_imp__alSourcePlay'|
C:\Code blocks cpp\OpenAL\main.cpp|42|undefined reference to `_imp__alGetSourcei'|
C:\Code blocks cpp\OpenAL\main.cpp|46|undefined reference to `_imp__alDeleteSources'|
C:\Code blocks cpp\OpenAL\main.cpp|47|undefined reference to `_imp__alDeleteBuffers'|
C:\Code blocks cpp\OpenAL\main.cpp|50|undefined reference to `_imp__alutExit'|
||error: ld returned 1 exit status|
||=== Build failed: 11 error(s), 0 warning(s) (0 minute(s), 1 second(s)) ===|

Zamieniłem na OpenAL32.dll.a kompilator wyrzucił mi:

||=== Build: Debug in OpenAL (compiler: GNU GCC Compiler) ===|
ld.exe||cannot find -lOpenAL32.dll.a|
||error: ld returned 1 exit status|
||=== Build failed: 2 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

0

Ta pierwsza opcja powinna być dobra, ale chyba coś nie tak jest z tą biblioteką. Sprawdziłem u siebie, i mam te same błędy. Dobre info jest takie, że zamiast łączyć libopenal32.dll.a możesz dołączyć dll-kę (soft_oal.dll). Zła informacja jest taka, że i tak nadal będziesz potrzebować biblioteki ALUT (The OpenAL Utility Toolkit).

https://wiki.haskell.org/ALUT <--- tutaj są źródła do ALUT i opis, trzeba je tylko skompilować ;)

--- dodane ---

Może Ci podrzucę tę bibliotekę później.

0

Zamiast alut możesz użyć alure, do pobrania stąd: http://kcat.strangesoft.net/alure.html#download, pod linkiem alure-1.2-win32-bin.zip masz już gotowe pliki do code::blocks (include i lib), wystarczy w linkierze ustawić:
-lopenal32
-lALURE32

0

czaffik

Podmieniłem poprzednią bibliotekę na tą co podałeś zrobiłem to co napisałeś i mam takie błędy:

||=== Build: Debug in OpenAL (compiler: GNU GCC Compiler) ===|
ld.exe||cannot find -l-lopenal32|
ld.exe||cannot find -l-lALURE32|
||error: ld returned 1 exit status|
||=== Build failed: 3 error(s), 0 warning(s) (0 minute(s), 0 second(s)) ===|

0

a ustawiłeś w opcjach kompilera (settings->compiler->Search directories) żeby szukało plików w podanych bibliotekach? Ja mam tam:
Compiler: E:\programy\OpenAL\include;
Linkier: E:\programy\OpenAL\libs\Win32;
Resource compiler: E:\programy\OpenAL\include

0

Własnie miałem zrobione tak jak napisałeś.

0

To doprawdy nie wiem, najzwyczajniej w świecie kompilator gada że nie może znaleźć plików lib od openal i alure.

0

W jakim folderze szukasz plików lib? w openal\libs? jak tak to błąd, powinieneś wybrać folder openal\libs\win32 (albo 64), dla alure to samo.

0

Ustaw ścieżki:
Compiler: <ALURE>\include
Linkier: <ALURE>\lib\Win32

1 użytkowników online, w tym zalogowanych: 0, gości: 1