parameters. These seem to be used primarily to restrict percussion
instruments to specific notes. - Changed note velocity to not use the volume curve in recompute_amp(), since this sounds closer to TiMidity++, although I don't believe it's correct MIDI behavior. Also changed expression so that it scales the channel volume before going through the curve. - Reworked load_instrument to be less opaque. - Went through the TiMidity code and removed pretty much all of the SDL_mixer extensions. The only exception would be kill_others(), which I reworked into a kill_key_group() function, which should be useful for DLS instruments in the future. SVN r918 (trunk)
This commit is contained in:
parent
52eeff6db8
commit
9450db3cec
8 changed files with 771 additions and 1941 deletions
|
|
@ -413,6 +413,13 @@ void FreeAll()
|
|||
|
||||
int LoadConfig(const char *filename)
|
||||
{
|
||||
/* !!! FIXME: This may be ugly, but slightly less so than requiring the
|
||||
* default search path to have only one element. I think.
|
||||
*
|
||||
* We only need to include the likely locations for the config
|
||||
* file itself since that file should contain any other directory
|
||||
* that needs to be added to the search path.
|
||||
*/
|
||||
clear_pathlist();
|
||||
#ifdef _WIN32
|
||||
add_to_pathlist("C:\\TIMIDITY");
|
||||
|
|
@ -443,25 +450,21 @@ Renderer::Renderer(float sample_rate)
|
|||
{
|
||||
rate = sample_rate;
|
||||
patches = NULL;
|
||||
default_instrument = NULL;
|
||||
#ifdef FAST_DECAY
|
||||
fast_decay = true;
|
||||
#else
|
||||
fast_decay = false;
|
||||
#endif
|
||||
resample_buffer_size = 0;
|
||||
resample_buffer = NULL;
|
||||
adjust_panning_immediately = false;
|
||||
|
||||
control_ratio = clamp(int(rate / CONTROLS_PER_SECOND), 1, MAX_CONTROL_RATIO);
|
||||
|
||||
lost_notes = 0;
|
||||
cut_notes = 0;
|
||||
|
||||
default_instrument = NULL;
|
||||
default_program = DEFAULT_PROGRAM;
|
||||
if (def_instr_name.IsNotEmpty())
|
||||
set_default_instrument(def_instr_name);
|
||||
|
||||
voices = DEFAULT_VOICES;
|
||||
memset(voice, 0, sizeof(voice));
|
||||
memset(drumvolume, 0, sizeof(drumvolume));
|
||||
memset(drumpanpot, 0, sizeof(drumpanpot));
|
||||
memset(drumreverberation, 0, sizeof(drumreverberation));
|
||||
memset(drumchorusdepth, 0, sizeof(drumchorusdepth));
|
||||
drumchannels = DEFAULT_DRUMCHANNELS;
|
||||
}
|
||||
|
||||
|
|
@ -492,22 +495,7 @@ void Renderer::ComputeOutput(float *buffer, int count)
|
|||
{
|
||||
if (v->status != VOICE_FREE)
|
||||
{
|
||||
if (v->sample_offset == 0 && v->echo_delay_count)
|
||||
{
|
||||
if (v->echo_delay_count >= count)
|
||||
{
|
||||
v->echo_delay_count -= count;
|
||||
}
|
||||
else
|
||||
{
|
||||
mix_voice(this, buffer + v->echo_delay_count, v, count - v->echo_delay_count);
|
||||
v->echo_delay_count = 0;
|
||||
}
|
||||
}
|
||||
else
|
||||
{
|
||||
mix_voice(this, buffer, v, count);
|
||||
}
|
||||
mix_voice(this, buffer, v, count);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
@ -520,6 +508,11 @@ void Renderer::MarkInstrument(int banknum, int percussion, int instr)
|
|||
{
|
||||
return;
|
||||
}
|
||||
if (banknum != 0)
|
||||
{
|
||||
/* Mark the standard bank in case it's not defined by this one. */
|
||||
MarkInstrument(0, percussion, instr);
|
||||
}
|
||||
if (percussion)
|
||||
{
|
||||
bank = drumset[banknum];
|
||||
|
|
@ -532,9 +525,9 @@ void Renderer::MarkInstrument(int banknum, int percussion, int instr)
|
|||
{
|
||||
return;
|
||||
}
|
||||
if (bank->tone[instr].layer == NULL)
|
||||
if (bank->instrument[instr] == NULL)
|
||||
{
|
||||
bank->tone[instr].layer = MAGIC_LOAD_INSTRUMENT;
|
||||
bank->instrument[instr] = MAGIC_LOAD_INSTRUMENT;
|
||||
}
|
||||
}
|
||||
|
||||
|
|
@ -557,9 +550,6 @@ void cmsg(int type, int verbosity_level, const char *fmt, ...)
|
|||
va_start(args, fmt);
|
||||
vsprintf(buf, fmt, args);
|
||||
va_end(args);
|
||||
size_t l = strlen(buf);
|
||||
buf[l] = '\n';
|
||||
buf[l+1] = '\0';
|
||||
OutputDebugString(buf);
|
||||
#endif
|
||||
}
|
||||
|
|
|
|||
Loading…
Add table
Add a link
Reference in a new issue