mirror of
https://github.com/libsdl-org/SDL.git
synced 2026-05-31 14:29:14 +08:00
audio: SDL_GetAudioDeviceName() now works with the default device IDs.
Fixes #14615.
This commit is contained in:
@@ -577,6 +577,15 @@ extern SDL_DECLSPEC SDL_AudioDeviceID * SDLCALL SDL_GetAudioRecordingDevices(int
|
|||||||
/**
|
/**
|
||||||
* Get the human-readable name of a specific audio device.
|
* Get the human-readable name of a specific audio device.
|
||||||
*
|
*
|
||||||
|
* **WARNING**: this function will work with SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK
|
||||||
|
* and SDL_AUDIO_DEVICE_DEFAULT_RECORDING, returning the current default
|
||||||
|
* physical devices' names. However, as the default device may change at any
|
||||||
|
* time, it is likely better to show a generic name to the user, like "System
|
||||||
|
* default audio device" or perhaps "default [currently %s]". Do not store
|
||||||
|
* this name to disk to reidentify the device in a later run of the program,
|
||||||
|
* as the default might change in general, and the string will be the name
|
||||||
|
* of a specific device and not the abstract system default.
|
||||||
|
*
|
||||||
* \param devid the instance ID of the device to query.
|
* \param devid the instance ID of the device to query.
|
||||||
* \returns the name of the audio device, or NULL on failure; call
|
* \returns the name of the audio device, or NULL on failure; call
|
||||||
* SDL_GetError() for more information.
|
* SDL_GetError() for more information.
|
||||||
|
|||||||
@@ -1579,6 +1579,14 @@ const char *SDL_GetAudioDeviceName(SDL_AudioDeviceID devid)
|
|||||||
// remains valid (in case the device is unplugged at the wrong moment), we hold the
|
// remains valid (in case the device is unplugged at the wrong moment), we hold the
|
||||||
// subsystem_rwlock while we copy the string.
|
// subsystem_rwlock while we copy the string.
|
||||||
SDL_LockRWLockForReading(current_audio.subsystem_rwlock);
|
SDL_LockRWLockForReading(current_audio.subsystem_rwlock);
|
||||||
|
|
||||||
|
// Allow default device IDs to be used, just return the current default physical device's name.
|
||||||
|
if (devid == SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK) {
|
||||||
|
devid = current_audio.default_playback_device_id;
|
||||||
|
} else if (devid == SDL_AUDIO_DEVICE_DEFAULT_RECORDING) {
|
||||||
|
devid = current_audio.default_recording_device_id;
|
||||||
|
}
|
||||||
|
|
||||||
SDL_FindInHashTable(islogical ? current_audio.device_hash_logical : current_audio.device_hash_physical, (const void *) (uintptr_t) devid, &vdev);
|
SDL_FindInHashTable(islogical ? current_audio.device_hash_logical : current_audio.device_hash_physical, (const void *) (uintptr_t) devid, &vdev);
|
||||||
if (!vdev) {
|
if (!vdev) {
|
||||||
SDL_SetError("Invalid audio device instance ID");
|
SDL_SetError("Invalid audio device instance ID");
|
||||||
|
|||||||
@@ -109,6 +109,7 @@ SDL_AppResult SDL_AppInit(void **appstate, int argc, char *argv[])
|
|||||||
}
|
}
|
||||||
|
|
||||||
SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver());
|
SDL_Log("Using audio driver: %s", SDL_GetCurrentAudioDriver());
|
||||||
|
SDL_Log("Current audio device name: %s", SDL_GetAudioDeviceName(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK));
|
||||||
|
|
||||||
stream = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &wave.spec, NULL, NULL);
|
stream = SDL_OpenAudioDeviceStream(SDL_AUDIO_DEVICE_DEFAULT_PLAYBACK, &wave.spec, NULL, NULL);
|
||||||
if (!stream) {
|
if (!stream) {
|
||||||
|
|||||||
Reference in New Issue
Block a user