mirror of
https://github.com/libsdl-org/SDL.git
synced 2025-10-14 13:56:00 +00:00
alsa: Use more hints for opening default devices.
This commit is contained in:
@@ -216,16 +216,58 @@ extern "C" {
|
|||||||
* Specify the default ALSA audio device name.
|
* Specify the default ALSA audio device name.
|
||||||
*
|
*
|
||||||
* This variable is a specific audio device to open when the "default" audio
|
* This variable is a specific audio device to open when the "default" audio
|
||||||
* device is used. By default if 4 channel audio is requested, the
|
* device is used.
|
||||||
* "plug:surround40" device will be opened and if 6 channel audio is requested
|
*
|
||||||
* the "plug:surround51" device will be opened.
|
* This hint will be ignored when opening the default playback device if
|
||||||
|
* SDL_HINT_AUDIO_ALSA_DEFAULT_PLAYBACK_DEVICE is set, or when opening the
|
||||||
|
* default recording device if SDL_HINT_AUDIO_ALSA_DEFAULT_RECORDING_DEVICE
|
||||||
|
* is set.
|
||||||
*
|
*
|
||||||
* This hint should be set before an audio device is opened.
|
* This hint should be set before an audio device is opened.
|
||||||
*
|
*
|
||||||
* \since This hint is available since SDL 3.1.3.
|
* \since This hint is available since SDL 3.1.3.
|
||||||
|
*
|
||||||
|
* \sa SDL_HINT_AUDIO_ALSA_DEFAULT_PLAYBACK_DEVICE
|
||||||
|
* \sa SDL_HINT_AUDIO_ALSA_DEFAULT_RECORDING_DEVICE
|
||||||
*/
|
*/
|
||||||
#define SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE "SDL_AUDIO_ALSA_DEFAULT_DEVICE"
|
#define SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE "SDL_AUDIO_ALSA_DEFAULT_DEVICE"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the default ALSA audio playback device name.
|
||||||
|
*
|
||||||
|
* This variable is a specific audio device to open for playback, when the
|
||||||
|
* "default" audio device is used.
|
||||||
|
*
|
||||||
|
* If this hint isn't set, SDL will check SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE
|
||||||
|
* before choosing a reasonable default.
|
||||||
|
*
|
||||||
|
* This hint should be set before an audio device is opened.
|
||||||
|
*
|
||||||
|
* \since This hint is available since SDL 3.1.7.
|
||||||
|
*
|
||||||
|
* \sa SDL_HINT_AUDIO_ALSA_DEFAULT_RECORDING_DEVICE
|
||||||
|
* \sa SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_AUDIO_ALSA_DEFAULT_PLAYBACK_DEVICE "SDL_AUDIO_ALSA_DEFAULT_PLAYBACK_DEVICE"
|
||||||
|
|
||||||
|
/**
|
||||||
|
* Specify the default ALSA audio recording device name.
|
||||||
|
*
|
||||||
|
* This variable is a specific audio device to open for recording, when the
|
||||||
|
* "default" audio device is used.
|
||||||
|
*
|
||||||
|
* If this hint isn't set, SDL will check SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE
|
||||||
|
* before choosing a reasonable default.
|
||||||
|
*
|
||||||
|
* This hint should be set before an audio device is opened.
|
||||||
|
*
|
||||||
|
* \since This hint is available since SDL 3.1.7.
|
||||||
|
*
|
||||||
|
* \sa SDL_HINT_AUDIO_ALSA_DEFAULT_PLAYBACK_DEVICE
|
||||||
|
* \sa SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE
|
||||||
|
*/
|
||||||
|
#define SDL_HINT_AUDIO_ALSA_DEFAULT_RECORDING_DEVICE "SDL_AUDIO_ALSA_DEFAULT_RECORDING_DEVICE"
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* A variable controlling the audio category on iOS and macOS.
|
* A variable controlling the audio category on iOS and macOS.
|
||||||
*
|
*
|
||||||
|
@@ -325,19 +325,20 @@ static char *get_pcm_str(void *handle)
|
|||||||
{
|
{
|
||||||
SDL_assert(handle != NULL); // SDL2 used NULL to mean "default" but that's not true in SDL3.
|
SDL_assert(handle != NULL); // SDL2 used NULL to mean "default" but that's not true in SDL3.
|
||||||
ALSA_Device *dev = (ALSA_Device *)handle;
|
ALSA_Device *dev = (ALSA_Device *)handle;
|
||||||
|
|
||||||
// If the user does not want to go thru the default PCM or the canonical default, the
|
|
||||||
// the configuration space being _massive_, give the user the ability to specify
|
|
||||||
// its own PCMs using environment variables. It will have to fit SDL constraints though.
|
|
||||||
// !!! FIXME: make these into SDL_Hints?
|
|
||||||
const char *env = SDL_getenv(dev->recording ? "SDL_AUDIO_ALSA_PCM_RECORDING" : "SDL_AUDIO_ALSA_PCM_PLAYBACK");
|
|
||||||
if (env) {
|
|
||||||
return SDL_strdup(env);
|
|
||||||
}
|
|
||||||
|
|
||||||
char *pcm_str = NULL;
|
char *pcm_str = NULL;
|
||||||
|
|
||||||
if (SDL_strlen(dev->id) == 0) {
|
if (SDL_strlen(dev->id) == 0) {
|
||||||
pcm_str = SDL_strdup("default");
|
// If the user does not want to go thru the default PCM or the canonical default, the
|
||||||
|
// the configuration space being _massive_, give the user the ability to specify
|
||||||
|
// its own PCMs using environment variables. It will have to fit SDL constraints though.
|
||||||
|
const char *devname = SDL_GetHint(dev->recording ? SDL_HINT_AUDIO_ALSA_DEFAULT_RECORDING_DEVICE : SDL_HINT_AUDIO_ALSA_DEFAULT_PLAYBACK_DEVICE);
|
||||||
|
if (!devname) {
|
||||||
|
devname = SDL_GetHint(SDL_HINT_AUDIO_ALSA_DEFAULT_DEVICE);
|
||||||
|
if (!devname) {
|
||||||
|
devname = "default";
|
||||||
|
}
|
||||||
|
}
|
||||||
|
pcm_str = SDL_strdup(devname);
|
||||||
} else {
|
} else {
|
||||||
SDL_asprintf(&pcm_str, "%sCARD=%s", ALSA_device_prefix, dev->id);
|
SDL_asprintf(&pcm_str, "%sCARD=%s", ALSA_device_prefix, dev->id);
|
||||||
}
|
}
|
||||||
|
Reference in New Issue
Block a user