Audio!
This commit is contained in:
		
							parent
							
								
									7ace73c587
								
							
						
					
					
						commit
						8b31e76655
					
				|  | @ -0,0 +1,36 @@ | |||
| #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; | ||||
|     } | ||||
|     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,15 @@ | |||
| #ifndef SHROOMS_VB_NATIVE_AUDIO_ | ||||
| #define SHROOMS_VB_NATIVE_AUDIO_ | ||||
| 
 | ||||
| #include <SDL2/SDL.h> | ||||
| #include <stdbool.h> | ||||
| 
 | ||||
| typedef struct { | ||||
|     SDL_AudioDeviceID id; | ||||
|     bool paused; | ||||
| } 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 <controller.h> | ||||
| #include <game.h> | ||||
|  | @ -20,21 +21,27 @@ long int tickNs() { | |||
| 
 | ||||
| typedef struct { | ||||
|     GraphicsContext *gfx; | ||||
|     AudioContext aud; | ||||
|     int16_t audioBuffer[834 * 2]; | ||||
| } GameState; | ||||
| 
 | ||||
| int onFrame(VB *sim) { | ||||
|     static uint8_t leftEye[384*224]; | ||||
|     static uint8_t rightEye[384*224]; | ||||
|     GameState *state; | ||||
|     GraphicsContext *gfx; | ||||
|     void *samples; | ||||
|     uint32_t samplePairs; | ||||
| 
 | ||||
|     state = vbGetUserData(sim); | ||||
|     gfx = state->gfx; | ||||
|      | ||||
|     vbGetPixels(sim, leftEye, 1, 384, rightEye, 1, 384); | ||||
|     gfxUpdateLeftEye(gfx, leftEye); | ||||
|     gfxUpdateRightEye(gfx, rightEye); | ||||
|     gfxRender(gfx); | ||||
|     gfxUpdateLeftEye(state->gfx, leftEye); | ||||
|     gfxUpdateRightEye(state->gfx, rightEye); | ||||
| 
 | ||||
|     samples = vbGetSamples(sim, NULL, &samplePairs); | ||||
|     audioUpdate(&state->aud, samples, samplePairs * 4); | ||||
|     vbSetSamples(sim, samples, 834); | ||||
|     gfxRender(state->gfx); | ||||
|     return 1; | ||||
| } | ||||
| 
 | ||||
|  | @ -48,6 +55,8 @@ int runGame(VB *sim, GraphicsContext *gfx) { | |||
|     uint64_t ticks, prevTicks; | ||||
| 
 | ||||
|     state.gfx = gfx; | ||||
|     audioInit(&state.aud); | ||||
|     vbSetSamples(sim, &state.audioBuffer, 834); | ||||
|     vbSetUserData(sim, &state); | ||||
|     vbSetFrameCallback(sim, &onFrame); | ||||
| 
 | ||||
|  |  | |||
							
								
								
									
										2
									
								
								makefile
								
								
								
								
							
							
						
						
									
										2
									
								
								makefile
								
								
								
								
							|  | @ -11,7 +11,7 @@ else | |||
| endif | ||||
| 
 | ||||
| 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) \
 | ||||
| 		-D POSIX_C_SOURCE=199309L \
 | ||||
| 		-o shrooms-vb \
 | ||||
|  |  | |||
|  | @ -1 +1 @@ | |||
| Subproject commit 50903c7513b00cc62cb20a1578e7f6484914a9da | ||||
| Subproject commit c06da323218071719c1500379e84008c369169d7 | ||||
		Loading…
	
		Reference in New Issue