Initialise parameters as floating point values.
This commit is contained in:
parent
f1d35c42ac
commit
2dc2879064
3 changed files with 39 additions and 22 deletions
|
@ -7,37 +7,52 @@
|
|||
JuceOplvstiAudioProcessor::JuceOplvstiAudioProcessor()
|
||||
{
|
||||
Opl = new Hiopl(44100); // 1 second at 44100
|
||||
Opl->SetSampleRate(44100);
|
||||
Opl->EnableSustain(1, 1);
|
||||
Opl->EnableSustain(1, 2);
|
||||
|
||||
const String waveforms[] = {"Sine", "Half Sine", "Abs Sine", "Quarter Sine"};
|
||||
params.push_back(new EnumFloatParameter("Carrier Wave",
|
||||
StringArray(waveforms, sizeof(waveforms)/sizeof(String)))
|
||||
);
|
||||
); setParameter(params.size()-1, 0.0f);
|
||||
params.push_back(new EnumFloatParameter("Modulator Wave",
|
||||
StringArray(waveforms, sizeof(waveforms)/sizeof(String)))
|
||||
);
|
||||
); setParameter(params.size()-1,0.0f);
|
||||
|
||||
const String levels[] = {"-0.75 dB", "-1.5 dB", "-3 dB", "-6 dB", "-12 dB", "-24 dB"};
|
||||
params.push_back(new EnumFloatParameter("Carrier Attenuation",
|
||||
StringArray(levels, sizeof(levels)/sizeof(String)))
|
||||
);
|
||||
); setParameter(params.size()-1,0.0f);
|
||||
params.push_back(new EnumFloatParameter("Modulator Attenuation",
|
||||
StringArray(levels, sizeof(levels)/sizeof(String)))
|
||||
);
|
||||
); setParameter(params.size()-1,0.75f);
|
||||
|
||||
const String frq_multipliers[] = {
|
||||
"x0.5", "x1", "x2", "x3", "x4", "x5", "x6", "x7", "x8", "x9", "x10", "x10", "x12", "x12", "x15", "x15"
|
||||
};
|
||||
params.push_back(new EnumFloatParameter("Carrier Frequency Multiplier",
|
||||
StringArray(frq_multipliers, sizeof(frq_multipliers)/sizeof(String)))
|
||||
);
|
||||
); setParameter(params.size()-1, 0.08f);
|
||||
params.push_back(new EnumFloatParameter("Modulator Frequency Multiplier",
|
||||
StringArray(frq_multipliers, sizeof(frq_multipliers)/sizeof(String)))
|
||||
);
|
||||
); setParameter(params.size()-1, 0.15f);
|
||||
|
||||
params.push_back(new IntFloatParameter("Carrier Attack", 0, 15));
|
||||
params.push_back(new IntFloatParameter("Carrier Sustain", 0, 15));
|
||||
setParameter(params.size()-1,0.5f);
|
||||
params.push_back(new IntFloatParameter("Carrier Decay", 0, 15));
|
||||
setParameter(params.size()-1,0.25f);
|
||||
params.push_back(new IntFloatParameter("Carrier Sustain", 0, 15));
|
||||
setParameter(params.size()-1,0.125f);
|
||||
params.push_back(new IntFloatParameter("Carrier Release", 0, 15));
|
||||
setParameter(params.size()-1,0.5f);
|
||||
params.push_back(new IntFloatParameter("Modulator Attack", 0, 15));
|
||||
params.push_back(new IntFloatParameter("Modulator Sustain", 0, 15));
|
||||
setParameter(params.size()-1,0.5f);
|
||||
params.push_back(new IntFloatParameter("Modulator Decay", 0, 15));
|
||||
setParameter(params.size()-1,0.25f);
|
||||
params.push_back(new IntFloatParameter("Modulator Sustain", 0, 15));
|
||||
setParameter(params.size()-1,0.25f);
|
||||
params.push_back(new IntFloatParameter("Modulator Release", 0, 15));
|
||||
setParameter(params.size()-1,0.25f);
|
||||
}
|
||||
|
||||
JuceOplvstiAudioProcessor::~JuceOplvstiAudioProcessor()
|
||||
|
@ -65,9 +80,9 @@ void JuceOplvstiAudioProcessor::setParameter (int index, float newValue)
|
|||
FloatParameter* p = params[index];
|
||||
p->setParameter(newValue);
|
||||
String name = p->getName();
|
||||
int osc = 1; // Carrier
|
||||
int osc = 2; // Carrier
|
||||
if (name.startsWith("Modulator")) {
|
||||
osc = 2;
|
||||
osc = 1;
|
||||
}
|
||||
if (name.endsWith("Wave")) {
|
||||
Opl->SetWaveform(1, osc, (Waveform)((EnumFloatParameter*)p)->getParameterIndex());
|
||||
|
@ -77,7 +92,14 @@ void JuceOplvstiAudioProcessor::setParameter (int index, float newValue)
|
|||
Opl->SetFrequencyMultiple(1, osc, (FreqMultiple)((EnumFloatParameter*)p)->getParameterIndex());
|
||||
} else if (name.endsWith("Attack")) {
|
||||
Opl->SetEnvelopeAttack(1, osc, ((IntFloatParameter*)p)->getParameterValue());
|
||||
} else if (name.endsWith("Decay")) {
|
||||
Opl->SetEnvelopeDecay(1, osc, ((IntFloatParameter*)p)->getParameterValue());
|
||||
} else if (name.endsWith("Sustain")) {
|
||||
Opl->SetEnvelopeSustain(1, osc, ((IntFloatParameter*)p)->getParameterValue());
|
||||
} else if (name.endsWith("Release")) {
|
||||
Opl->SetEnvelopeRelease(1, osc, ((IntFloatParameter*)p)->getParameterValue());
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
const String JuceOplvstiAudioProcessor::getParameterName (int index)
|
||||
|
@ -164,7 +186,7 @@ void JuceOplvstiAudioProcessor::changeProgramName (int index, const String& newN
|
|||
//==============================================================================
|
||||
void JuceOplvstiAudioProcessor::prepareToPlay (double sampleRate, int samplesPerBlock)
|
||||
{
|
||||
Opl->SetSampleRate((int)sampleRate);
|
||||
//Opl->SetSampleRate((int)sampleRate);
|
||||
// Use this method as the place to do any pre-playback
|
||||
// initialisation that you need..
|
||||
}
|
||||
|
|
|
@ -64,17 +64,6 @@ void Hiopl::Generate(int length, float* buffer) {
|
|||
|
||||
void Hiopl::SetSampleRate(int hz) {
|
||||
adlib->Init(hz);
|
||||
_WriteReg(0x20,0x32); // modulator multiplier 2
|
||||
_WriteReg(0x23,0x21); // carrier multiplier 1
|
||||
_WriteReg(0x40,0x1a); // modulator attenuation
|
||||
_WriteReg(0x43,0x09); // carrier attenuation
|
||||
_WriteReg(0x60,0x84); // AD
|
||||
_WriteReg(0x63,0x84); // AD
|
||||
_WriteReg(0x80,0x29); // SR
|
||||
_WriteReg(0x83,0x44); // SR
|
||||
//_WriteReg(0xe3,0x00); // wave select
|
||||
//_WriteReg(0xe0,0x02); // wave select
|
||||
//_WriteReg(0xc0,0x06); // carrier self-feedback level
|
||||
}
|
||||
|
||||
void Hiopl::_WriteReg(Bit32u reg, Bit8u value, Bit8u mask) {
|
||||
|
@ -129,6 +118,11 @@ void Hiopl::SetEnvelopeRelease(int ch, int osc, int t) {
|
|||
_WriteReg(0x80+offset, (Bit8u)t, 0x0f);
|
||||
}
|
||||
|
||||
void Hiopl::EnableSustain(int ch, int osc) {
|
||||
int offset = this->_GetOffset(ch, osc);
|
||||
_WriteReg(0x20+offset, (Bit8u)0x20, 0x20);
|
||||
}
|
||||
|
||||
void Hiopl::KeyOn(int ch, float frqHz) {
|
||||
unsigned int fnum, block;
|
||||
_milliHertzToFnum((unsigned int)(frqHz * 1000.0), &fnum, &block);
|
||||
|
|
|
@ -31,6 +31,7 @@ class Hiopl {
|
|||
void SetEnvelopeDecay(int ch, int osc, int t);
|
||||
void SetEnvelopeSustain(int ch, int osc, int level);
|
||||
void SetEnvelopeRelease(int ch, int osc, int t);
|
||||
void EnableSustain(int ch, int osc);
|
||||
void KeyOn(int ch, float frqHz);
|
||||
void KeyOff(int ch);
|
||||
void _WriteReg(Bit32u reg, Bit8u value, Bit8u mask=0x0);
|
||||
|
|
Loading…
Reference in a new issue