Olen tässä jo jonkin aikaa yrittänyt saada OpenAL:ää toimimaan. Ilmeisesti Xcoden (compilerini) uusin versio ei enää tue aluttia (alut.h) enkä ole tähän mennessä löytänyt kuin yhden kunnollisen OpenAL tutorialin ilman aluttia, ja sekin oli sitten vain Windowsille. Eli onko mitään mahdollisuutta saada OpenAL:ää toimimaan macillä? Jos ei niin mistä saisi jonkun muun hyvän audio kirjaston?
Oletko löytänyt tuota vai eikö se ole kunnollinen?
http://www.edenwaith.com/products/pige/
Tuo käyttää aluttia.
Tämä(kin) tutoriaali on Windowsille, mutta onko siinä jotain niin Windows-spesifistä, ettei sitä voisi soveltaa Macille?
Macci ei sisällä windows.h:ta jota tuo tutoriaali käyttää.
Ja ilmeisesti ihan vaan jättämällä windows.h pois ei myöskään toimi?
Miten jos vaan otat jonkin uusinta OpenAL:ia käyttävän esimerkin ja lähdet siitä rakentamaan. Ei pitäisi tarvita ALUTia ainakaan tämän mukaan http://developer.apple.com/library/mac/#qa/
Grez kirjoitti:
Miten jos vaan otat jonkin uusinta OpenAL:ia käyttävän esimerkin ja lähdet siitä rakentamaan.
Mistä saan sellaisen?
Luulis että joku esimerkki tulisi OpenAL-kirjaston mukana tai olisi saatavilla sivuilta. Mutta näköjään edes OpenAL -projektin sivut ei toimi kunnolla ja muutenkaan ei oikein laadulla vakuuta. Toisaalta ei mitenkään yllätä kun Creative Labs on mukana kuviossa.
Ei oo tullu minkään mukana esimerkkejä... Ei taida oikeen toi OpenAL onnistua. Tiedätkö mitään muuta hyvää audio kirjastoa jonka saisi varmasti toimimaan macille?
Ei minulla mielestäni ollut mitään suurempia ongelmia kun OpenAL:ää kokeilin jonkun aikaa sitten sitten ilman aluttia. Tuon lisäkikkareen tarkoituksenahan on käsittääkseni vain hoitaa alustus omalla tavallaan sekä avustaa buffereiden luonnissa. Ei luulisi olevan niin vaikeaa käydä tutoriaalin rivejä läpi ja selvittää mitä käytetyt alutin funktiot tekevät ja korvata nämä omilla vastineilla.
Itse muistaakseni tein tämän pohjalta omat testailuni, ja en käyttänyt aluttia: http://www.gamedev.net/page/resources/_/
Ensimmäinen hakutulos googlessa, "openal wav": http://enigma-dev.org/forums/index.php?topic=730.0
Tuon tutorialin koodi jonka laitoit linkkiin antaa mutamia erroreita joistain määrittelemättömistä muuttujista. (?!)
Jos määrittelet ne sitten? Kääntäjät antavat aika yksityiskohtaisia virheilmoituksia, joiden perusteella on aika helppo korjata ongelmia.
Ongelma on etten tiedä mitä noiden muuttujien kuuluisi tehdä koska niitä käytetään joissain file_read funktioissa joita kääntäjäni ei myöskään tunnista.
"Kopioin nämä koodit täältä välistä mutta ei tämä käänny"
Käytä aikaa sen koodin ymmärtämiseen, ei pelkällä copypastella opi kovinkaan paljoa. Ja siellä kerrotaan aika selkeästi mitä ne file_read-alkuiset funktiot tekevät, jollei sitä osaa itse jostain syystä päätellä.
Kyllä voi jättää macilla pois tuon windows.h tiedoston jos poistat samalla wintoosajutut.
<A.K> kirjoitti:
Tuon tutorialin koodi jonka laitoit linkkiin antaa mutamia erroreita joistain määrittelemättömistä muuttujista. (?!)
Voisit postata koodin niin joku voisi ehkä selvittää vähän mikä on vialla. Osaisitko sinäkään selvittää mikä on ongelmana viestissä jossa lukee vaan esimerkiksi "Apua, mun koodi ei toimi. Kertokaa miten korjaan sen!!" ei hyödytä kovinkaan paljon. Postaa vaikka mikä wirhe tuosta alut.h:sta tulee.
PS. Ja itse suosittelen kääntäjäksi GCC:tä.
No tässä on sen tutoriaalin koodi jonka Spongli laittoi linkkiin (pistin sen kokonaan int mainin sisään. En tiedä onko tarkoitus(?)).
#include <openal/al.h> #include <openal/alc.h> #include <cstdio> int main(int argc, const char * argv[]) { ALCdevice* device = alcOpenDevice(NULL); ALCcontext* context = alcCreateContext(device, NULL); alcMakeContextCurrent(context); alListener3f(AL_POSITION, 0, 0, 0); alListener3f(AL_VELOCITY, 0, 0, 0); alListener3f(AL_ORIENTATION, 0, 0, -1); ALuint source; alGenSources(1, &source); alSourcef(source, AL_PITCH, 1); alSourcef(source, AL_GAIN, 1); alSource3f(source, AL_POSITION, 0, 0, 0); alSource3f(source, AL_VELOCITY, 0, 0, 0); alSourcei(source, AL_LOOPING, AL_FALSE); alGenBuffers(1, &buffer); //TODO Load data to buffer alSourcei(source, AL_BUFFER, buffer); FILE* f = fopen("audio.wav", "fb"); char xbuffer[5]; xbuffer[4] = '\0'; if (fread(xbuffer, sizeof(char), 4, file) != 4 || strcmp(xbuffer, "RIFF") != 0) throw "Not a WAV file"; file_read_int32_le(xbuffer, file); if (fread(xbuffer, sizeof(char), 4, file) != 4 || strcmp(xbuffer, "WAVE") != 0) throw "Not a WAV file"; if (fread(xbuffer, sizeof(char), 4, file) != 4 || strcmp(xbuffer, "fmt ") != 0) throw "Invalid WAV file"; file_read_int32_le(xbuffer, file); short audioFormat = file_read_int16_le(xbuffer, file); short channels = file_read_int16_le(xbuffer, file); int sampleRate = file_read_int32_le(xbuffer, file); int byteRate = file_read_int32_le(xbuffer, file); file_read_int16_le(xbuffer, file); short bitsPerSample = file_read_int16_le(xbuffer, file); if (audioFormat != 16) { short extraParams = file_read_int16_le(xbuffer, file); file_ignore_bytes(file, extraParams); } if (fread(xbuffer, sizeof(char), 4, file) != 4 || strcmp(xbuffer, "data") != 0) throw "Invalid WAV file"; int dataChunkSize = file_read_int32_le(xbuffer, file); unsigned char* bufferData = file_allocate_and_read_bytes(file, (size_t) dataChunkSize); float duration = float(dataChunkSize) / byteRate; alBufferData(buffer, GetFormatFromInfo(channels, bitsPerSample), bufferData, dataChunkSize, sampleRate); free(bufferData); fclose(f); static inline ALenum GetFormatFromInfo(short channels, short bitsPerSample) { if (channels == 1) return AL_FORMAT_MONO16; return AL_FORMAT_STEREO16; } alSourcePlay(source); fgetc(stdin); alDeleteSources(1, &source); alDeleteBuffers(1, &buffer); alcDestroyContext(context); alcCloseDevice(device); return 0; }
Eli XCode antaa tälläisiä erroreita:
- Use of uncleared identififer 'buffer'
- Use of uncleared identififer 'file'
- use of uncleared identififer 'strcmp'
Miten nuo tulisi määritellä?
Use of uncleared identififer 'buffer' => Et ole missään määritellyt bufferia
Use of uncleared identififer 'file' => Vinkki ?FILE* f = fopen("audio.wav", "fb");?
use of uncleared identififer 'strcmp' => #include <cstring>
Miten bufferi kuuluisi määritellä? Ja en ymmärrä tuota vinkkiäsi. Strcmp:n sain toimimaan #include <cstring>:llä
Bufferin voit määritellä esim ALuint buffers[NUM_BUFFERS]; Mutta muista antaa NUM_BUFFERS:lle jokin arvo. Ja tuon tiedoston aukaisu rivin pitäisi olla FILE* file = fopen("audio.wav","fb");.
Olen nyt määritellyt bufferin ALuint buffers[1]; ja muutin &buffer -> buffers koska XCode antoi errorin ja ehdotti tekemään niin. Ja muutin f -> file. Mutta nyt errorit näyttää tältä:
- No matching function called 'alSourcei'
- Use of unclear identififer 'file_read_int32_le'
- Use of unclear identififer 'file_read_int16_le'
<A.K> kirjoitti:
nyt errorit näyttää tältä:
- Use of unclear identififer 'file_read_int32_le'
- Use of unclear identififer 'file_read_int16_le'
Eikös nopealla vilkaisulla katsottuna tutoriaalissa kerrota mitä nuo ovat ja, että ne pitää toteuttaa itse (jätetty C-kielen harjoitteeksi)?
Aihe on jo aika vanha, joten et voi enää vastata siihen.