From f79beffc34f2d89a4091f5164697a6adc29047d3 Mon Sep 17 00:00:00 2001 From: raysan5 Date: Sun, 1 Dec 2013 12:34:31 +0100 Subject: [PATCH] Audio issues solved... Audio Works! --- examples/ex08_audio.c | 4 +- examples/ex08_audio.exe | Bin 324672 -> 327243 bytes examples/resources/weird.wav | Bin 0 -> 6246 bytes release/win32-mingw/include/raylib.h | 6 -- release/win32-mingw/lib/libraylib.a | Bin 135180 -> 134824 bytes src/audio.c | 144 ++++++++++++++++----------- src/raylib.h | 6 -- 7 files changed, 88 insertions(+), 72 deletions(-) create mode 100644 examples/resources/weird.wav diff --git a/examples/ex08_audio.c b/examples/ex08_audio.c index f9a582c3..5d1d365d 100644 --- a/examples/ex08_audio.c +++ b/examples/ex08_audio.c @@ -2,6 +2,8 @@ * * raylib example 08 - Audio loading and playing * +* NOTE: This example requires OpenAL32 dll installed (or in the same folder) +* * This example has been created using raylib 1.0 (www.raylib.com) * raylib is licensed under an unmodified zlib/libpng license (View raylib.h for details) * @@ -22,7 +24,7 @@ int main() InitAudioDevice(); // Initialize audio device - Sound fx = LoadSound("resources/coin.wav"); // Load WAV audio file + Sound fx = LoadSound("resources/weird.wav"); // Load WAV audio file //-------------------------------------------------------------------------------------- // Main game loop diff --git a/examples/ex08_audio.exe b/examples/ex08_audio.exe index 5a214a755309ea2d515bec933d3ebd22a58fab78..d06d897de7425c28cc28f3eb74feb7272a99f6dd 100644 GIT binary patch delta 48463 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 TRlMiWY0M2bG+(#dxGMes7Q%DK delta 46713 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 lv}O+30;kZCvk&Ov-!5Gtp z`jXqbPL>AmjL}JgaVGnq8Co=aV1R91YUq??sEd-NAG)~cjLuA$)aTsW9?IOJH@P{# z^M78>^PF>Td-`4NvG=v3_hi*no6VL_${x>=$sCv&E;{>a&QDdUn)>>)u7*KXhW^K+ zq;!4iZR-lQb>Z(aB7;x#;!lmGmTJ^J(Bm5D8SHI!4)s)-AGXw>Zr9;KAai}N*pJ&V zPZySIdhuOB-*IepaCN3&FFHVf;x~CJ&qftugh?uRQe_^RL8+^Mk_g1@h90~6+YH6b|@*3zGnn|r96|CVR z4~YqLB3Ts9iS1F5%nMz{e4*Kx3w>+F_IRrObX{Pd6`^7<(tNrN`Gm{A0*T;gN9Qb+Q5|9e>0hc-8q@k%&k;>21J)gzE7(TDmH=$`_f0*Bu7OAatUgb z0!jR=&P(<1YBD+I82wOuDwB`ItgUXnk6f@ex$}JF8>`)|@sV$>_92@5V+6N4@!87Q zhupm$n!-<_>Cpd|yi-YTQ<8Tm$%&kN9`Yp`S2k9D=d99E%oS^tB4(5cTwkc@eC8yQ z={B8dnaZ4m-S>hqWlSPr_{! zpNgk1VfrM}J|fWyv;Mt{Q+%NAxpF)zwQ`(8ZSNmA=p2&Ha9qP9ef`dThE7|D!F8ao zrz#sY9XjIdJFw5t+GMxis(~9xX;Qt4`@FJ<_G!!0zQ*m|lx2TI^*Zm(Qt7xkTgVo+ zeVNPCzDnR-q@%Qh=XT&0=`lL=OWkw`Ngg`7+ztHE6lM( zoleup$iZlY(FCIqqXeUD_|sF0sbJKSqT)g{1Zb9PJ;}^p0a=2-YB)VUv<-U3$bjGw z;c0^R$qh;yC@*YKoS@8ZP!57}ktyBH@a4c4aW$pD$-y%W@3cl*7V!401z5jBI-%qC d<9Oggjy{-|&0WWVP3{6oE8;D|x?Jus_YdZ!8bAO5 diff --git a/src/audio.c b/src/audio.c index a696950e..1e68c4a3 100644 --- a/src/audio.c +++ b/src/audio.c @@ -51,6 +51,7 @@ typedef struct Wave { unsigned char *data; // Buffer data pointer unsigned int sampleRate; unsigned int dataSize; + short bitsPerSample; short channels; short format; } Wave; @@ -133,15 +134,16 @@ Sound LoadSound(char *fileName) // The OpenAL format is worked out by looking at the number of channels and the bits per sample if (wave.channels == 1) { - if (wave.sampleRate == 8 ) format = AL_FORMAT_MONO8; - else if (wave.sampleRate == 16) format = AL_FORMAT_MONO16; + if (wave.bitsPerSample == 8 ) format = AL_FORMAT_MONO8; + else if (wave.bitsPerSample == 16) format = AL_FORMAT_MONO16; } else if (wave.channels == 2) { - if (wave.sampleRate == 8 ) format = AL_FORMAT_STEREO8; - else if (wave.sampleRate == 16) format = AL_FORMAT_STEREO16; + if (wave.bitsPerSample == 8 ) format = AL_FORMAT_STEREO8; + else if (wave.bitsPerSample == 16) format = AL_FORMAT_STEREO16; } + // Create an audio source ALuint source; alGenSources(1, &source); // Generate pointer to audio source @@ -158,7 +160,7 @@ Sound LoadSound(char *fileName) alGenBuffers(1, &buffer); // Generate pointer to buffer // Upload sound data to buffer - alBufferData(buffer, format, wave.data, wave.dataSize, wave.sampleRate); + alBufferData(buffer, format, (void*)wave.data, wave.dataSize, wave.sampleRate); // Attach sound buffer to source alSourcei(source, AL_BUFFER, buffer); @@ -168,7 +170,6 @@ Sound LoadSound(char *fileName) printf("Sample rate: %i\n", wave.sampleRate); printf("Channels: %i\n", wave.channels); - printf("Format: %i\n", wave.format); printf("Audio file loaded...!\n"); @@ -229,71 +230,96 @@ void StopSound(Sound sound) // Load WAV file into Wave structure static Wave LoadWAV(char *fileName) { - Wave wave; - FILE *wavFile; + // Basic WAV headers structs + typedef struct { + char chunkID[4]; + long chunkSize; + char format[4]; + } RiffHeader; + typedef struct { + char subChunkID[4]; + long subChunkSize; + short audioFormat; + short numChannels; + long sampleRate; + long byteRate; + short blockAlign; + short bitsPerSample; + } WaveFormat; + + typedef struct { + char subChunkID[4]; + long subChunkSize; + } WaveData; + + RiffHeader riffHeader; + WaveFormat waveFormat; + WaveData waveData; + + Wave wave; + FILE *wavFile; + wavFile = fopen(fileName, "rb"); if (!wavFile) { - printf("Could not load WAV file.\n"); + printf("Could not open WAV file.\n"); exit(1); } + + // Read in the first chunk into the struct + fread(&riffHeader, sizeof(RiffHeader), 1, wavFile); + + // Check for RIFF and WAVE tags + if ((riffHeader.chunkID[0] != 'R' || + riffHeader.chunkID[1] != 'I' || + riffHeader.chunkID[2] != 'F' || + riffHeader.chunkID[3] != 'F') || + (riffHeader.format[0] != 'W' || + riffHeader.format[1] != 'A' || + riffHeader.format[2] != 'V' || + riffHeader.format[3] != 'E')) + printf("Invalid RIFF or WAVE Header"); + + // Read in the 2nd chunk for the wave info + fread(&waveFormat, sizeof(WaveFormat), 1, wavFile); - unsigned char id[4]; // Four bytes to hold 'RIFF' and 'WAVE' (and other ids) + // Check for fmt tag + if (waveFormat.subChunkID[0] != 'f' || + waveFormat.subChunkID[1] != 'm' || + waveFormat.subChunkID[2] != 't' || + waveFormat.subChunkID[3] != ' ') + printf("Invalid Wave Format"); + + // Check for extra parameters; + if (waveFormat.subChunkSize > 16) + fseek(wavFile, sizeof(short), SEEK_CUR); + + // Read in the the last byte of data before the sound file + fread(&waveData, sizeof(WaveData), 1, wavFile); - unsigned int size = 0; // File size (useless) + // Check for data tag + if (waveData.subChunkID[0] != 'd' || + waveData.subChunkID[1] != 'a' || + waveData.subChunkID[2] != 't' || + waveData.subChunkID[3] != 'a') + printf("Invalid data header"); + + // Allocate memory for data + wave.data = (unsigned char *)malloc(sizeof(unsigned char) * waveData.subChunkSize); + + // Read in the sound data into the soundData variable + fread(wave.data, waveData.subChunkSize, 1, wavFile); - short format; - short channels; - short blockAlign; - short bitsPerSample; - - unsigned int formatLength; - unsigned int sampleRate; - unsigned int avgBytesSec; - unsigned int dataSize; + // Now we set the variables that we need later + wave.dataSize = waveData.subChunkSize; + wave.sampleRate = waveFormat.sampleRate; + wave.channels = waveFormat.numChannels; + wave.bitsPerSample = waveFormat.bitsPerSample; - fread(id, sizeof(unsigned char), 4, wavFile); // Read the first four bytes - - if ((id[0] != 'R') || (id[1] != 'I') || (id[2] != 'F') || (id[3] != 'F')) - { - printf("Invalid RIFF file.\n"); // If not "RIFF" id, exit - exit(1); - } - - fread(&size, sizeof(unsigned int), 1, wavFile); // Read file size - fread(id, sizeof(unsigned char), 4, wavFile); // Read the next id - - if ((id[0] != 'W') || (id[1] != 'A') || (id[2] != 'V') || (id[3] != 'E')) - { - printf("Invalid WAVE file.\n"); // If not "WAVE" id, exit - exit(1); - } - - fread(id, sizeof(unsigned char), 4, wavFile); // Read 4 bytes id "fmt " - fread(&formatLength, sizeof(unsigned int),1,wavFile); // Read format lenght - fread(&format, sizeof(short), 1, wavFile); // Read format tag - fread(&channels, sizeof(short), 1, wavFile); // Read num channels (1 mono, 2 stereo) - fread(&sampleRate, sizeof(unsigned int), 1, wavFile); // Read sample rate (44100, 22050, etc...) - fread(&avgBytesSec, sizeof(short), 1, wavFile); // Read average bytes per second (probably won't need this) - fread(&blockAlign, sizeof(short), 1, wavFile); // Read block alignment (probably won't need this) - fread(&bitsPerSample, sizeof(short), 1, wavFile); // Read bits per sample (8 bit or 16 bit) - - fread(id, sizeof(unsigned char), 4, wavFile); // Read 4 bytes id "data" - fread(&dataSize, sizeof(unsigned int), 1, wavFile); // Read data size (in bytes) - - wave.sampleRate = sampleRate; - wave.dataSize = dataSize; - wave.channels = channels; - wave.format = format; - - wave.data = (unsigned char *)malloc(sizeof(unsigned char) * dataSize); // Allocate the required bytes to store data - - fread(wave.data, sizeof(unsigned char), dataSize, wavFile); // Read the whole sound data chunk - return wave; -} +} // Unload WAV file data static void UnloadWAV(Wave wave) diff --git a/src/raylib.h b/src/raylib.h index 7f14113f..30838d72 100644 --- a/src/raylib.h +++ b/src/raylib.h @@ -50,8 +50,6 @@ #ifndef RAYLIB_H #define RAYLIB_H -#define NO_AUDIO // Audio is still being tested, deactivated by default - //---------------------------------------------------------------------------------- // Some basic Defines //---------------------------------------------------------------------------------- @@ -367,8 +365,6 @@ void DrawBillboardRec(Camera camera, Texture2D texture, Rectangle sourceRec, Vec void DrawHeightmap(Image heightmap, Vector3 centerPos, Vector3 scale, Color color); // REVIEW: Draw heightmap using image map (raylib 1.x) void DrawHeightmapEx(Image heightmap, Texture2D texture, Vector3 centerPos, Vector3 scale, Color tint); // REVIEW: Draw textured heightmap (raylib 1.x) -#ifndef NO_AUDIO - //------------------------------------------------------------------------------------ // Audio Loading and Playing Functions (Module: audio) //------------------------------------------------------------------------------------ @@ -381,8 +377,6 @@ void PlaySoundEx(Sound sound, float timePosition, bool loop); // Play a sound void PauseSound(Sound sound); // Pause a sound void StopSound(Sound sound); // Stop playing a sound -#endif // NO_AUDIO - #ifdef __cplusplus } #endif