fix audio overrun
This commit is contained in:
		@@ -256,6 +256,7 @@ void audio_play(const char *path,
 | 
				
			|||||||
        request.freq = AUDIO_FREQUENCY;
 | 
					        request.freq = AUDIO_FREQUENCY;
 | 
				
			||||||
        request.format = AUDIO_F32;
 | 
					        request.format = AUDIO_F32;
 | 
				
			||||||
        request.channels = 2;
 | 
					        request.channels = 2;
 | 
				
			||||||
 | 
					        request.samples = 4096;
 | 
				
			||||||
        #ifndef TWN_FEATURE_PUSH_AUDIO
 | 
					        #ifndef TWN_FEATURE_PUSH_AUDIO
 | 
				
			||||||
        request.callback = audio_callback;
 | 
					        request.callback = audio_callback;
 | 
				
			||||||
        #endif
 | 
					        #endif
 | 
				
			||||||
 
 | 
				
			|||||||
@@ -226,6 +226,9 @@ static void main_loop(void) {
 | 
				
			|||||||
 | 
					
 | 
				
			||||||
        /* TODO: make it works when ctx.ticks_per_second != 60 */
 | 
					        /* TODO: make it works when ctx.ticks_per_second != 60 */
 | 
				
			||||||
        #ifdef TWN_FEATURE_PUSH_AUDIO
 | 
					        #ifdef TWN_FEATURE_PUSH_AUDIO
 | 
				
			||||||
 | 
					        uint64_t const queued_frames = SDL_GetQueuedAudioSize(ctx.audio_device) / sizeof (float) / 2;
 | 
				
			||||||
 | 
					        if (queued_frames >= 4096 * 2)
 | 
				
			||||||
 | 
					            SDL_ClearQueuedAudio(ctx.audio_device);
 | 
				
			||||||
        static uint8_t audio_buffer[(AUDIO_FREQUENCY / 60) * sizeof (float) * 2];
 | 
					        static uint8_t audio_buffer[(AUDIO_FREQUENCY / 60) * sizeof (float) * 2];
 | 
				
			||||||
        if (ctx.audio_initialized) {
 | 
					        if (ctx.audio_initialized) {
 | 
				
			||||||
            audio_callback(NULL, audio_buffer, sizeof audio_buffer);
 | 
					            audio_callback(NULL, audio_buffer, sizeof audio_buffer);
 | 
				
			||||||
 
 | 
				
			|||||||
		Reference in New Issue
	
	Block a user