Basic audio with stb_vorbis decoding and openal
This commit is contained in:
parent
002d6524f1
commit
6b2e759257
5
.gitignore
vendored
5
.gitignore
vendored
@ -4,7 +4,10 @@
|
||||
# Custom
|
||||
*.swp
|
||||
*.opendb
|
||||
data/textures/SrcAssets/
|
||||
data/textures/
|
||||
data/audio/
|
||||
dengine_assets.7z
|
||||
todo.txt
|
||||
|
||||
# User-specific files
|
||||
*.suo
|
||||
|
5397
extern/stb-master/include/STB/stb_vorbis.c
vendored
Normal file
5397
extern/stb-master/include/STB/stb_vorbis.c
vendored
Normal file
File diff suppressed because it is too large
Load Diff
@ -2,11 +2,15 @@
|
||||
#include <OpenAL/al.h>
|
||||
#include <OpenAL/alc.h>
|
||||
|
||||
#define _CRT_SECURE_NO_WARNINGS
|
||||
#include <STB/stb_vorbis.c>
|
||||
|
||||
#include "Dengine/AssetManager.h"
|
||||
#include "Dengine/Common.h"
|
||||
#include "Dengine/Debug.h"
|
||||
#include "Dengine/Math.h"
|
||||
#include "Dengine/OpenGL.h"
|
||||
#include "Dengine/Platform.h"
|
||||
|
||||
#include "WorldTraveller/WorldTraveller.h"
|
||||
|
||||
@ -124,6 +128,21 @@ int main()
|
||||
glBlendFunc(GL_SRC_ALPHA, GL_ONE_MINUS_SRC_ALPHA);
|
||||
glCullFace(GL_BACK);
|
||||
|
||||
/*
|
||||
*******************
|
||||
* INITIALISE GAME
|
||||
*******************
|
||||
*/
|
||||
GameState worldTraveller = {0};
|
||||
worldTraveller_gameInit(&worldTraveller,
|
||||
V2i(frameBufferWidth, frameBufferHeight));
|
||||
#ifdef DENGINE_DEBUG
|
||||
debug_init(&worldTraveller.arena, V2i(windowWidth, windowHeight),
|
||||
worldTraveller.assetManager.font);
|
||||
#endif
|
||||
|
||||
glfwSetWindowUserPointer(window, CAST(void *)(&worldTraveller));
|
||||
|
||||
/*
|
||||
*******************
|
||||
* INITIALISE AUDIO
|
||||
@ -132,7 +151,6 @@ int main()
|
||||
alGetError();
|
||||
// TODO(doyle): Read this http://www.gamedev.net/page/resources/_/technical/game-programming/basic-openal-sound-manager-for-your-project-r3791
|
||||
ALCdevice *deviceAL = alcOpenDevice(NULL);
|
||||
|
||||
if (!deviceAL)
|
||||
{
|
||||
printf("alcOpenDevice() failed: Failed to init OpenAL device.\n");
|
||||
@ -148,32 +166,47 @@ int main()
|
||||
}
|
||||
AL_CHECK_ERROR();
|
||||
|
||||
#define NUM_BUFFERS 3
|
||||
#define BUFFER_SIZE 4096
|
||||
ALuint audioBufferIds[NUM_BUFFERS];
|
||||
alGenBuffers(NUM_BUFFERS, audioBufferIds);
|
||||
/* Open audio file */
|
||||
PlatformFileRead fileRead = {0};
|
||||
platform_readFileToBuffer(&worldTraveller.arena,
|
||||
"data/audio/Yuki Kajiura - Swordland.ogg",
|
||||
&fileRead);
|
||||
|
||||
i32 channels, sampleRate, numSamples;
|
||||
ALshort *vorbisData = NULL;
|
||||
numSamples = stb_vorbis_decode_memory(fileRead.buffer, fileRead.size,
|
||||
&channels, &sampleRate, &vorbisData);
|
||||
|
||||
platform_closeFileRead(&worldTraveller.arena, &fileRead);
|
||||
|
||||
/* Number of concurrent audio files */
|
||||
ALuint audioSourceId;
|
||||
alGenSources(1, &audioSourceId);
|
||||
AL_CHECK_ERROR();
|
||||
|
||||
ALuint audioSourcesIds[NUM_BUFFERS];
|
||||
alGenBuffers(NUM_BUFFERS, audioSourcesIds);
|
||||
/* Audio data buffers */
|
||||
ALuint audioBufferId;
|
||||
alGenBuffers(1, &audioBufferId);
|
||||
AL_CHECK_ERROR();
|
||||
|
||||
alBufferData(audioBufferId, AL_FORMAT_STEREO16, vorbisData,
|
||||
numSamples * channels * sizeof(i16), sampleRate);
|
||||
|
||||
alSourceQueueBuffers(audioSourceId, 1, &audioBufferId);
|
||||
alSourcePlay(audioSourceId);
|
||||
|
||||
#if 0
|
||||
ALuint audioFormat = AL_FORMAT_MONO16;
|
||||
if (vorbisInfo.channels == 2) audioFormat = AL_FORMAT_STEREO16;
|
||||
i32 audioState;
|
||||
alGetSourcei(audioSourceIds[0], AL_SOURCE_STATE, &audioState);
|
||||
#endif
|
||||
|
||||
/*
|
||||
*******************
|
||||
* INITIALISE GAME
|
||||
* GAME LOOP
|
||||
*******************
|
||||
*/
|
||||
GameState worldTraveller = {0};
|
||||
worldTraveller_gameInit(&worldTraveller,
|
||||
V2i(frameBufferWidth, frameBufferHeight));
|
||||
|
||||
#ifdef DENGINE_DEBUG
|
||||
debug_init(&worldTraveller.arena, V2i(windowWidth, windowHeight),
|
||||
worldTraveller.assetManager.font);
|
||||
#endif
|
||||
|
||||
glfwSetWindowUserPointer(window, CAST(void *)(&worldTraveller));
|
||||
|
||||
f32 startTime = CAST(f32)(glfwGetTime());
|
||||
f32 secondsElapsed = 0.0f; // Time between current frame and last frame
|
||||
|
||||
@ -188,11 +221,6 @@ int main()
|
||||
glfwSwapInterval(1);
|
||||
#endif
|
||||
|
||||
/*
|
||||
*******************
|
||||
* GAME LOOP
|
||||
*******************
|
||||
*/
|
||||
while (!glfwWindowShouldClose(window))
|
||||
{
|
||||
/* Check and call events */
|
||||
|
@ -7,6 +7,7 @@ typedef uint8_t u8;
|
||||
typedef uint32_t u32;
|
||||
typedef uint64_t u64;
|
||||
|
||||
typedef int16_t i16;
|
||||
typedef int32_t i32;
|
||||
typedef i32 b32;
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user