mirror of
https://github.com/ZDoom/fluidsynth.git
synced 2025-02-23 20:31:43 +00:00
Merged support for new_fluid_audio_driver2 to DirectSound driver from Z-Maestro.
This commit is contained in:
parent
c7a865ff24
commit
9ea9f60494
2 changed files with 14 additions and 11 deletions
|
@ -77,6 +77,8 @@ void fluid_core_audio_driver_settings(fluid_settings_t* settings);
|
||||||
#if DSOUND_SUPPORT
|
#if DSOUND_SUPPORT
|
||||||
fluid_audio_driver_t* new_fluid_dsound_audio_driver(fluid_settings_t* settings,
|
fluid_audio_driver_t* new_fluid_dsound_audio_driver(fluid_settings_t* settings,
|
||||||
fluid_synth_t* synth);
|
fluid_synth_t* synth);
|
||||||
|
fluid_audio_driver_t* new_fluid_dsound_audio_driver2(fluid_settings_t* settings,
|
||||||
|
fluid_audio_func_t func, void* data);
|
||||||
int delete_fluid_dsound_audio_driver(fluid_audio_driver_t* p);
|
int delete_fluid_dsound_audio_driver(fluid_audio_driver_t* p);
|
||||||
void fluid_dsound_audio_driver_settings(fluid_settings_t* settings);
|
void fluid_dsound_audio_driver_settings(fluid_settings_t* settings);
|
||||||
#endif
|
#endif
|
||||||
|
@ -158,7 +160,7 @@ fluid_audriver_definition_t fluid_audio_drivers[] = {
|
||||||
#if DSOUND_SUPPORT
|
#if DSOUND_SUPPORT
|
||||||
{ "dsound",
|
{ "dsound",
|
||||||
new_fluid_dsound_audio_driver,
|
new_fluid_dsound_audio_driver,
|
||||||
NULL,
|
new_fluid_dsound_audio_driver2,
|
||||||
delete_fluid_dsound_audio_driver,
|
delete_fluid_dsound_audio_driver,
|
||||||
fluid_dsound_audio_driver_settings },
|
fluid_dsound_audio_driver_settings },
|
||||||
#endif
|
#endif
|
||||||
|
|
|
@ -50,7 +50,7 @@ typedef struct {
|
||||||
WAVEFORMATEX* format;
|
WAVEFORMATEX* format;
|
||||||
HANDLE thread;
|
HANDLE thread;
|
||||||
DWORD threadID;
|
DWORD threadID;
|
||||||
fluid_synth_t* synth;
|
void* user_obj;
|
||||||
fluid_audio_callback_t write;
|
fluid_audio_callback_t write;
|
||||||
int cont;
|
int cont;
|
||||||
DWORD buffer_byte_size;
|
DWORD buffer_byte_size;
|
||||||
|
@ -94,12 +94,8 @@ void fluid_dsound_audio_driver_settings(fluid_settings_t* settings)
|
||||||
DirectSoundEnumerate((LPDSENUMCALLBACK) fluid_dsound_enum_callback, settings);
|
DirectSoundEnumerate((LPDSENUMCALLBACK) fluid_dsound_enum_callback, settings);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
/*
|
|
||||||
* new_fluid_dsound_audio_driver
|
|
||||||
*/
|
|
||||||
fluid_audio_driver_t*
|
fluid_audio_driver_t*
|
||||||
new_fluid_dsound_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
|
new_fluid_dsound_audio_driver2(fluid_settings_t* settings, fluid_audio_func_t func, void* data)
|
||||||
{
|
{
|
||||||
HRESULT hr;
|
HRESULT hr;
|
||||||
DSBUFFERDESC desc;
|
DSBUFFERDESC desc;
|
||||||
|
@ -133,7 +129,7 @@ new_fluid_dsound_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
|
||||||
}
|
}
|
||||||
FLUID_MEMSET(dev, 0, sizeof(fluid_dsound_audio_driver_t));
|
FLUID_MEMSET(dev, 0, sizeof(fluid_dsound_audio_driver_t));
|
||||||
|
|
||||||
dev->synth = synth;
|
dev->user_obj = data;
|
||||||
dev->cont = 1;
|
dev->cont = 1;
|
||||||
|
|
||||||
fluid_settings_getnum(settings, "synth.sample-rate", &sample_rate);
|
fluid_settings_getnum(settings, "synth.sample-rate", &sample_rate);
|
||||||
|
@ -149,7 +145,7 @@ new_fluid_dsound_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
|
||||||
dev->frame_size = 2 * sizeof(short);
|
dev->frame_size = 2 * sizeof(short);
|
||||||
dev->buffer_byte_size = period_size * dev->frame_size;
|
dev->buffer_byte_size = period_size * dev->frame_size;
|
||||||
dev->queue_byte_size = periods * dev->buffer_byte_size;
|
dev->queue_byte_size = periods * dev->buffer_byte_size;
|
||||||
dev->write = fluid_synth_write_s16;
|
dev->write = func;
|
||||||
|
|
||||||
/* create and initialize the buffer format */
|
/* create and initialize the buffer format */
|
||||||
dev->format = (WAVEFORMATEX*) FLUID_MALLOC(sizeof(WAVEFORMATEX));
|
dev->format = (WAVEFORMATEX*) FLUID_MALLOC(sizeof(WAVEFORMATEX));
|
||||||
|
@ -270,6 +266,11 @@ new_fluid_dsound_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
|
||||||
return NULL;
|
return NULL;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
fluid_audio_driver_t*
|
||||||
|
new_fluid_dsound_audio_driver(fluid_settings_t* settings, fluid_synth_t* synth)
|
||||||
|
{
|
||||||
|
return new_fluid_dsound_audio_driver2(settings, (fluid_audio_func_t)fluid_synth_write_s16, synth);
|
||||||
|
}
|
||||||
|
|
||||||
int delete_fluid_dsound_audio_driver(fluid_audio_driver_t* d)
|
int delete_fluid_dsound_audio_driver(fluid_audio_driver_t* d)
|
||||||
{
|
{
|
||||||
|
@ -355,14 +356,14 @@ DWORD WINAPI fluid_dsound_audio_run(LPVOID lpParameter)
|
||||||
/* fill the first part of the buffer */
|
/* fill the first part of the buffer */
|
||||||
if (bytes1 > 0) {
|
if (bytes1 > 0) {
|
||||||
frames = bytes1 / dev->frame_size;
|
frames = bytes1 / dev->frame_size;
|
||||||
dev->write(dev->synth, frames, buf1, 0, 2, buf1, 1, 2);
|
dev->write(dev->user_obj, frames, buf1, 0, 2, buf1, 1, 2);
|
||||||
cur_position += frames * dev->frame_size;
|
cur_position += frames * dev->frame_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
/* fill the second part of the buffer */
|
/* fill the second part of the buffer */
|
||||||
if ((buf2 != NULL) && (bytes2 > 0)) {
|
if ((buf2 != NULL) && (bytes2 > 0)) {
|
||||||
frames = bytes2 / dev->frame_size;
|
frames = bytes2 / dev->frame_size;
|
||||||
dev->write(dev->synth, frames, buf2, 0, 2, buf2, 1, 2);
|
dev->write(dev->user_obj, frames, buf2, 0, 2, buf2, 1, 2);
|
||||||
cur_position += frames * dev->frame_size;
|
cur_position += frames * dev->frame_size;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
Loading…
Reference in a new issue