mirror of
https://github.com/raysan5/raylib.git
synced 2026-02-21 21:23:35 -05:00
Audio: Improvements to device configuration (#5577)
* Audio: Stop setting capture config options. Since the device is being configured as a playback device, all capture config options are unused and therefore need to not be set. * Audio: Stop pre-silencing the miniaudio output buffer. raylib already manually silences the output buffer prior to mixing so there is no reason to have miniaudio also do it. It can therefore be disabled via the device config to make data processing slightly more efficient. * Audio: Stop forcing fixed sized processing callbacks. There is no requirement for raylib to have guaranteed fixed sized audio processing. By disabling it, audio processing can be made more efficient by not having to run the data through an internal intermediary buffer. * Audio: Make the period size (latency) configurable. The default period size is 10ms, but this is inappropriate for certain platforms so it is useful to be able to allow those platforms to configure the period size as required. * Audio: Fix documentation for pan. The pan if -1..1, not 0..1.
This commit is contained in:
@ -303,6 +303,7 @@
|
||||
#define AUDIO_DEVICE_FORMAT ma_format_f32 // Device output format (miniaudio: float-32bit)
|
||||
#define AUDIO_DEVICE_CHANNELS 2 // Device output channels: stereo
|
||||
#define AUDIO_DEVICE_SAMPLE_RATE 0 // Device sample rate (device default)
|
||||
#define AUDIO_DEVICE_PERIOD_SIZE_IN_FRAMES 0 // Device period size (controls latency, 0 defaults to 10ms)
|
||||
|
||||
#define MAX_AUDIO_BUFFER_POOL_CHANNELS 16 // Maximum number of audio pool channels
|
||||
|
||||
|
||||
11
src/raudio.c
11
src/raudio.c
@ -290,6 +290,9 @@ typedef struct tagBITMAPINFOHEADER {
|
||||
#ifndef AUDIO_DEVICE_SAMPLE_RATE
|
||||
#define AUDIO_DEVICE_SAMPLE_RATE 0 // Device output sample rate
|
||||
#endif
|
||||
#ifndef AUDIO_DEVICE_PERIOD_SIZE_IN_FRAMES
|
||||
#define AUDIO_DEVICE_PERIOD_SIZE_IN_FRAMES 0 // Device latency. 0 defaults to 10ms
|
||||
#endif
|
||||
|
||||
#ifndef MAX_AUDIO_BUFFER_POOL_CHANNELS
|
||||
#define MAX_AUDIO_BUFFER_POOL_CHANNELS 16 // Audio pool channels
|
||||
@ -349,7 +352,7 @@ struct rAudioBuffer {
|
||||
|
||||
float volume; // Audio buffer volume
|
||||
float pitch; // Audio buffer pitch
|
||||
float pan; // Audio buffer pan (0.0f to 1.0f)
|
||||
float pan; // Audio buffer pan (-1.0f to 1.0f)
|
||||
|
||||
bool playing; // Audio buffer state: AUDIO_PLAYING
|
||||
bool paused; // Audio buffer state: AUDIO_PAUSED
|
||||
@ -477,12 +480,12 @@ void InitAudioDevice(void)
|
||||
config.playback.pDeviceID = NULL; // NULL for the default playback AUDIO.System.device
|
||||
config.playback.format = AUDIO_DEVICE_FORMAT;
|
||||
config.playback.channels = AUDIO_DEVICE_CHANNELS;
|
||||
config.capture.pDeviceID = NULL; // NULL for the default capture AUDIO.System.device
|
||||
config.capture.format = ma_format_s16;
|
||||
config.capture.channels = 1;
|
||||
config.sampleRate = AUDIO_DEVICE_SAMPLE_RATE;
|
||||
config.periodSizeInFrames = AUDIO_DEVICE_PERIOD_SIZE_IN_FRAMES;
|
||||
config.dataCallback = OnSendAudioDataToDevice;
|
||||
config.pUserData = NULL;
|
||||
config.noPreSilencedOutputBuffer = true; // raylib pre-silences the output buffer manually
|
||||
config.noFixedSizedCallback = true; // raylib does not require fixed sized callback guarantees. This bypasses an internal intermediary buffer
|
||||
|
||||
result = ma_device_init(&AUDIO.System.context, &config, &AUDIO.System.device);
|
||||
if (result != MA_SUCCESS)
|
||||
|
||||
Reference in New Issue
Block a user