static void (*ModPlug_Seek) (ModPlugFile* file, int millisecond);
static void (*ModPlug_GetSettings) (ModPlug_Settings* settings);
static void (*ModPlug_SetSettings) (const ModPlug_Settings* settings);
+typedef void (ModPlug_SetMasterVolume_t) (ModPlugFile* file,unsigned int cvol) ;
+ModPlug_SetMasterVolume_t *ModPlug_SetMasterVolume;
+
static dllfunction_t modplugfuncs[] =
{
// Load the DLLs
// We need to load both by hand because some OSes seem to not load
// the modplug DLL automatically when loading the modplugFile DLL
- return Sys_LoadLibrary (dllnames_modplug, &modplug_dll, modplugfuncs);
+ if(Sys_LoadLibrary (dllnames_modplug, &modplug_dll, modplugfuncs))
+ {
+ ModPlug_SetMasterVolume = (ModPlug_SetMasterVolume_t *) Sys_GetProcAddress(modplug_dll, "ModPlug_SetMasterVolume");
+ if(!ModPlug_SetMasterVolume)
+ Con_Print("Warning: modplug volume control not supported. Try getting a newer version of libmodplug.\n");
+ return true;
+ }
+ else
+ return false;
}
Mem_Free (per_ch);
return NULL;
}
+
+#ifndef SND_MODPLUG_STATIC
+ if(ModPlug_SetMasterVolume)
+#endif
+ ModPlug_SetMasterVolume(per_ch->mf, 512); // max volume, DP scales down!
+
per_ch->bs = 0;
per_ch->sb_offset = 0;
ModPlug_Seek(per_ch->mf, modplug_start);
sb->nbframes = 0;
- real_start = (float)modplug_start / 1000 * snd_renderbuffer->format.speed;
+ real_start = (unsigned int) ((float)modplug_start / 1000 * snd_renderbuffer->format.speed);
if (*start - real_start + nbsampleframes > sb->maxframes)
{
Con_Printf ("ModPlug_FetchSound: stream buffer too small after seek (%u sample frames required)\n",
return false;
}
+#ifndef SND_MODPLUG_STATIC
+ if(ModPlug_SetMasterVolume)
+#endif
+ ModPlug_SetMasterVolume(mf, 512); // max volume, DP scales down!
+
if (developer_loading.integer >= 2)
Con_Printf ("\"%s\" will be streamed\n", filename);
per_sfx = (modplug_stream_persfx_t *)Mem_Alloc (snd_mempool, sizeof (*per_sfx));