static boolean I_SDL_InitSound(void) { int i; // No sounds yet for (i = 0; i < NUMSFX; ++i) sound_chunks[i].abuf = NULL; for (i = 0; i < NUM_CHANNELS; ++i) channels_playing[i] = sfx_None; if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) return false; #if defined(SDL20) { const SDL_version *linked = Mix_Linked_Version(); if (linked->major != MIX_MAJOR_VERSION || linked->minor != MIX_MINOR_VERSION) I_Error("The wrong version of SDL2_MIXER.DLL was found. "PACKAGE_NAME" requires " "v%d.%d.%d, not v%d.%d.%d.", linked->major, linked->minor, linked->patch, MIX_MAJOR_VERSION, MIX_MINOR_VERSION, MIX_PATCHLEVEL); if (linked->patch != MIX_PATCHLEVEL) C_Warning("The wrong version of SDL2_MIXER.DLL was found. "PACKAGE_NAME" requires " "v%d.%d.%d, not v%d.%d.%d.", linked->major, linked->minor, linked->patch, MIX_MAJOR_VERSION, MIX_MINOR_VERSION, MIX_PATCHLEVEL); } #endif if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) return false; Mix_QuerySpec(&mixer_freq, &mixer_format, &mixer_channels); // precache sounds to avoid slowdown inside game for (i = 0; i < NUMSFX; i++) CacheSFX_SDL(i); Mix_AllocateChannels(NUM_CHANNELS); SDL_PauseAudio(0); sound_initialized = true; return true; }
dboolean I_SDL_InitSound(void) { int i; // No sounds yet for (i = 0; i < NUM_CHANNELS; ++i) channels_playing[i] = NULL; if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) return false; { const SDL_version *linked = Mix_Linked_Version(); if (linked->major != MIX_MAJOR_VERSION || linked->minor != MIX_MINOR_VERSION) I_Error("The wrong version of SDL2_MIXER.DLL was found. "PACKAGE_NAME" requires " "v%d.%d.%d, not v%d.%d.%d.", linked->major, linked->minor, linked->patch, MIX_MAJOR_VERSION, MIX_MINOR_VERSION, MIX_PATCHLEVEL); if (linked->patch != MIX_PATCHLEVEL) C_Warning("The wrong version of SDL2_MIXER.DLL was found. "PACKAGE_NAME" requires " "v%d.%d.%d, not v%d.%d.%d.", linked->major, linked->minor, linked->patch, MIX_MAJOR_VERSION, MIX_MINOR_VERSION, MIX_PATCHLEVEL); } if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) return false; Mix_QuerySpec(&mixer_freq, &mixer_format, &mixer_channels); Mix_AllocateChannels(NUM_CHANNELS); SDL_PauseAudio(0); sound_initialized = true; return true; }
static boolean I_SDL_InitSound(void) { int i; // No sounds yet for (i = 0; i < NUMSFX; ++i) sound_chunks[i].abuf = NULL; for (i = 0; i < NUM_CHANNELS; ++i) channels_playing[i] = sfx_None; if (SDL_InitSubSystem(SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Unable to set up sound.\n"); return false; } if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) { fprintf(stderr, "Error initializing SDL_mixer: %s\n", Mix_GetError()); return false; } Mix_QuerySpec(&mixer_freq, &mixer_format, &mixer_channels); // precache sounds to avoid slowdown inside game for (i = 0; i < NUMSFX; i++) CacheSFX_SDL(i); Mix_AllocateChannels(NUM_CHANNELS); SDL_PauseAudio(0); sound_initialized = true; return true; }
static int OPL_SDL_Init(unsigned int port_base) { // Check if SDL_mixer has been opened already // If not, we must initialize it now if (!SDLIsInitialized()) { if (SDL_Init(SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Unable to set up sound.\n"); return 0; } if (Mix_OpenAudio(opl_sample_rate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) { fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError()); SDL_QuitSubSystem(SDL_INIT_AUDIO); return 0; } SDL_PauseAudio(0); // When this module shuts down, it has the responsibility to // shut down SDL. sdl_was_initialized = 1; } else { sdl_was_initialized = 0; } opl_sdl_paused = 0; pause_offset = 0; // Queue structure of callbacks to invoke. callback_queue = OPL_Queue_Create(); current_time = 0; // Get the mixer frequency, format and number of channels. Mix_QuerySpec(&mixing_freq, &mixing_format, &mixing_channels); // Only supports AUDIO_S16SYS if (mixing_format != AUDIO_S16SYS || mixing_channels != 2) { fprintf(stderr, "OPL_SDL only supports native signed 16-bit LSB, " "stereo format!\n"); OPL_SDL_Shutdown(); return 0; } // Mix buffer: mix_buffer = malloc(mixing_freq * sizeof(uint32_t)); // Create the emulator structure: DBOPL_InitTables(); Chip__Chip(&opl_chip); Chip__Setup(&opl_chip, mixing_freq); callback_mutex = SDL_CreateMutex(); callback_queue_mutex = SDL_CreateMutex(); // TODO: This should be music callback? or-? Mix_HookMusic(OPL_Mix_Callback, NULL); return 1; }
static boolean I_SDL_InitSound(boolean _use_sfx_prefix) { int i; use_sfx_prefix = _use_sfx_prefix; // No sounds yet for (i=0; i<NUM_CHANNELS; ++i) { channels_playing[i] = NULL; } if (SDL_Init(SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Unable to set up sound.\n"); return false; } if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) { fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError()); return false; } ExpandSoundData = ExpandSoundData_SDL; Mix_QuerySpec(&mixer_freq, &mixer_format, &mixer_channels); #ifdef HAVE_LIBSAMPLERATE if (use_libsamplerate != 0) { if (SRC_ConversionMode() < 0) { I_Error("I_SDL_InitSound: Invalid value for use_libsamplerate: %i", use_libsamplerate); } ExpandSoundData = ExpandSoundData_SRC; } #else if (use_libsamplerate != 0) { fprintf(stderr, "I_SDL_InitSound: use_libsamplerate=%i, but " "libsamplerate support not compiled in.\n", use_libsamplerate); } #endif // SDL_mixer version 1.2.8 and earlier has a bug in the Mix_SetPanning // function that can cause the game to lock up. If we're using an old // version, we need to apply a workaround. But the workaround has its // own drawbacks ... { const SDL_version *mixer_version; int v; mixer_version = Mix_Linked_Version(); v = SDL_VERSIONNUM(mixer_version->major, mixer_version->minor, mixer_version->patch); if (v <= SDL_VERSIONNUM(1, 2, 8)) { setpanning_workaround = true; fprintf(stderr, "\n" "ATTENTION: You are using an old version of SDL_mixer!\n" " This version has a bug that may cause " "your sound to stutter.\n" " Please upgrade to a newer version!\n" "\n"); } } Mix_AllocateChannels(NUM_CHANNELS); SDL_PauseAudio(0); sound_initialized = true; return true; }
static boolean I_SDL_InitSound(boolean _use_sfx_prefix) { int i; // SDL 2.0.6 has a bug that makes it unusable. if (SDL_COMPILEDVERSION == SDL_VERSIONNUM(2, 0, 6)) { I_Error( "I_SDL_InitSound: " "You are trying to launch with SDL 2.0.6 which has a known bug " "that makes the game crash. Please either downgrade to " "SDL 2.0.5 or upgrade to 2.0.7. See the following bug for some " "additional context:\n" "<https://github.com/chocolate-doom/chocolate-doom/issues/945>"); } use_sfx_prefix = _use_sfx_prefix; // No sounds yet for (i=0; i<NUM_CHANNELS; ++i) { channels_playing[i] = NULL; } if (SDL_Init(SDL_INIT_AUDIO) < 0) { fprintf(stderr, "Unable to set up sound.\n"); return false; } if (Mix_OpenAudio(snd_samplerate, AUDIO_S16SYS, 2, GetSliceSize()) < 0) { fprintf(stderr, "Error initialising SDL_mixer: %s\n", Mix_GetError()); return false; } ExpandSoundData = ExpandSoundData_SDL; Mix_QuerySpec(&mixer_freq, &mixer_format, &mixer_channels); #ifdef HAVE_LIBSAMPLERATE if (use_libsamplerate != 0) { if (SRC_ConversionMode() < 0) { I_Error("I_SDL_InitSound: Invalid value for use_libsamplerate: %i", use_libsamplerate); } ExpandSoundData = ExpandSoundData_SRC; } #else if (use_libsamplerate != 0) { fprintf(stderr, "I_SDL_InitSound: use_libsamplerate=%i, but " "libsamplerate support not compiled in.\n", use_libsamplerate); } #endif Mix_AllocateChannels(NUM_CHANNELS); SDL_PauseAudio(0); sound_initialized = true; return true; }