Audio!
This commit is contained in:
parent
7ace73c587
commit
24b957fc53
|
@ -0,0 +1,37 @@
|
||||||
|
#include <audio.h>
|
||||||
|
#include <stdio.h>
|
||||||
|
|
||||||
|
int audioInit(AudioContext *aud) {
|
||||||
|
SDL_AudioSpec spec;
|
||||||
|
spec.freq = 41700;
|
||||||
|
spec.format = AUDIO_S16;
|
||||||
|
spec.channels = 2;
|
||||||
|
spec.samples = 1024;
|
||||||
|
spec.callback = NULL;
|
||||||
|
spec.userdata = NULL;
|
||||||
|
|
||||||
|
aud->id = SDL_OpenAudioDevice(NULL, 0, &spec, NULL, 0);
|
||||||
|
aud->paused = true;
|
||||||
|
if (!aud->id) {
|
||||||
|
fprintf(stderr, "could not open audio device: %s\n", SDL_GetError());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
aud->output = fopen("output.bin", "w");
|
||||||
|
return 0;
|
||||||
|
}
|
||||||
|
|
||||||
|
int audioUpdate(AudioContext *aud, void *data, uint32_t bytes) {
|
||||||
|
if (!aud->id) return -1;
|
||||||
|
|
||||||
|
if (SDL_QueueAudio(aud->id, data, bytes)) {
|
||||||
|
fprintf(stderr, "could not write audio: %s\n", SDL_GetError());
|
||||||
|
return -1;
|
||||||
|
}
|
||||||
|
|
||||||
|
if (aud->paused) {
|
||||||
|
SDL_PauseAudioDevice(aud->id, false);
|
||||||
|
aud->paused = false;
|
||||||
|
}
|
||||||
|
|
||||||
|
return 0;
|
||||||
|
}
|
|
@ -0,0 +1,16 @@
|
||||||
|
#ifndef SHROOMS_VB_NATIVE_AUDIO_
|
||||||
|
#define SHROOMS_VB_NATIVE_AUDIO_
|
||||||
|
|
||||||
|
#include <SDL2/SDL.h>
|
||||||
|
#include <stdbool.h>
|
||||||
|
|
||||||
|
typedef struct {
|
||||||
|
SDL_AudioDeviceID id;
|
||||||
|
bool paused;
|
||||||
|
FILE *output;
|
||||||
|
} AudioContext;
|
||||||
|
|
||||||
|
int audioInit(AudioContext *aud);
|
||||||
|
int audioUpdate(AudioContext *aud, void *data, uint32_t bytes);
|
||||||
|
|
||||||
|
#endif
|
19
game.c
19
game.c
|
@ -1,3 +1,4 @@
|
||||||
|
#include <audio.h>
|
||||||
#include <assets.h>
|
#include <assets.h>
|
||||||
#include <controller.h>
|
#include <controller.h>
|
||||||
#include <game.h>
|
#include <game.h>
|
||||||
|
@ -20,21 +21,27 @@ long int tickNs() {
|
||||||
|
|
||||||
typedef struct {
|
typedef struct {
|
||||||
GraphicsContext *gfx;
|
GraphicsContext *gfx;
|
||||||
|
AudioContext aud;
|
||||||
|
int16_t audioBuffer[834 * 2];
|
||||||
} GameState;
|
} GameState;
|
||||||
|
|
||||||
int onFrame(VB *sim) {
|
int onFrame(VB *sim) {
|
||||||
static uint8_t leftEye[384*224];
|
static uint8_t leftEye[384*224];
|
||||||
static uint8_t rightEye[384*224];
|
static uint8_t rightEye[384*224];
|
||||||
GameState *state;
|
GameState *state;
|
||||||
GraphicsContext *gfx;
|
void *samples;
|
||||||
|
uint32_t samplePairs;
|
||||||
|
|
||||||
state = vbGetUserData(sim);
|
state = vbGetUserData(sim);
|
||||||
gfx = state->gfx;
|
|
||||||
|
|
||||||
vbGetPixels(sim, leftEye, 1, 384, rightEye, 1, 384);
|
vbGetPixels(sim, leftEye, 1, 384, rightEye, 1, 384);
|
||||||
gfxUpdateLeftEye(gfx, leftEye);
|
gfxUpdateLeftEye(state->gfx, leftEye);
|
||||||
gfxUpdateRightEye(gfx, rightEye);
|
gfxUpdateRightEye(state->gfx, rightEye);
|
||||||
gfxRender(gfx);
|
|
||||||
|
samples = vbGetSamples(sim, NULL, &samplePairs);
|
||||||
|
audioUpdate(&state->aud, samples, samplePairs * 4);
|
||||||
|
vbSetSamples(sim, samples, 834);
|
||||||
|
gfxRender(state->gfx);
|
||||||
return 1;
|
return 1;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -48,6 +55,8 @@ int runGame(VB *sim, GraphicsContext *gfx) {
|
||||||
uint64_t ticks, prevTicks;
|
uint64_t ticks, prevTicks;
|
||||||
|
|
||||||
state.gfx = gfx;
|
state.gfx = gfx;
|
||||||
|
audioInit(&state.aud);
|
||||||
|
vbSetSamples(sim, &state.audioBuffer, 834);
|
||||||
vbSetUserData(sim, &state);
|
vbSetUserData(sim, &state);
|
||||||
vbSetFrameCallback(sim, &onFrame);
|
vbSetFrameCallback(sim, &onFrame);
|
||||||
|
|
||||||
|
|
2
makefile
2
makefile
|
@ -11,7 +11,7 @@ else
|
||||||
endif
|
endif
|
||||||
|
|
||||||
build:
|
build:
|
||||||
@$(CC) cli.c controller.c game.c graphics.c main.c assets/assets.s -I . \
|
@$(CC) audio.c cli.c controller.c game.c graphics.c main.c assets/assets.s -I . \
|
||||||
$(SHROOMSFLAGS) $(SDL2FLAGS) \
|
$(SHROOMSFLAGS) $(SDL2FLAGS) \
|
||||||
-D POSIX_C_SOURCE=199309L \
|
-D POSIX_C_SOURCE=199309L \
|
||||||
-o shrooms-vb \
|
-o shrooms-vb \
|
||||||
|
|
|
@ -1 +1 @@
|
||||||
Subproject commit 50903c7513b00cc62cb20a1578e7f6484914a9da
|
Subproject commit c06da323218071719c1500379e84008c369169d7
|
Loading…
Reference in New Issue