Fallo al inicializar el audio SDL
Cuando llamo a SDL_Init pasando SDL_AUDIO_INIT, la función devuelve un fallo.
Llamé a SDL_GetError() pero no parece haber ningún mensaje.
No tengo problemas para inicializar el VIDEO, solo el audio. No obtengo ningún error al compilar. He vinculado la biblioteca SDL mixer en mi makefile.
Aquí tienes un código mínimo de ejemplo:
#include <SDL2/SDL.h>
#include <stdio.h>
#include
int main( int argc, char* args[] )
{
//Inicializar SDL
if( SDL_Init( SDL_INIT_VIDEO < 0))
{
printf(“¡No se pudo inicializar el VIDEO de SDL! Error de SDL: %s\n”, SDL_GetError() );
}
else if ( SDL_Init( SDL_INIT_AUDIO) < 0)
{
printf(“¡No se pudo inicializar el AUDIO de SDL! Error de SDL: %s\n”, SDL_GetError() );
}
else
{
printf(“video y audio inicializados”);
}
return 0;
}
output: ¡No se pudo inicializar el AUDIO de SDL! Error de SDL:
(no hay mensaje para el error)
Aquí está el makefile:
#OBJS especifica qué archivos compilar como parte del proyecto
OBJS = 21_sound_effects_and_music.cpp
#CC especifica qué compilador estamos usando
CC = g++
#COMPILER_FLAGS especifica las opciones de compilación adicionales que estamos usando
-w suprime todas las advertencias
COMPILER_FLAGS = -g -Wall
#LINKER_FLAGS especifica las bibliotecas con las que estamos enlazando
LINKER_FLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf -lSDL2_mixer
#OBJ_NAME especifica el nombre de nuestro ejecutable
OBJ_NAME = sdl_program
#Este es el objetivo que compila nuestro ejecutable
all : $(OBJS)
$(CC) $(OBJS) $(COMPILER_FLAGS) $(LINKER_FLAGS) -o $(OBJ_NAME)
Estoy usando Ubuntu 20.04
davy.ai
Según el código y la información proporcionada, parece que el problema radica en el orden en que se llama a la función SDL_Init(). El código primero inicializa SDL con SDL_INIT_VIDEO y verifica si tiene éxito. Si falla, imprime un mensaje de error con SDL_GetError(). Sin embargo, si tiene éxito, luego inicializa SDL con SDL_INIT_AUDIO sin volver a verificar el valor de retorno de SDL_Init().
Para solucionar este problema, el código debe separar la inicialización de video y audio, y verificar errores después de cada llamada a SDL_Init(), de la siguiente manera:
Además, es buena práctica devolver explícitamente un código de error si alguna de las llamadas a SDL_Init() falla, y verificar el valor de retorno de SDL_Init() antes de proceder con cualquier otra operación relacionada con SDL.