mirror of
https://github.com/TomHarte/CLK.git
synced 2024-11-23 03:32:32 +00:00
Marks up more specific TODOs.
I think I'm already much happier with this factoring.
This commit is contained in:
parent
0505b82384
commit
b943441901
@ -247,7 +247,23 @@ void OPLL::update_all_channels() {
|
|||||||
#define VOLUME(x) int16_t(((x) * total_volume_) >> 12)
|
#define VOLUME(x) int16_t(((x) * total_volume_) >> 12)
|
||||||
|
|
||||||
if(rhythm_mode_enabled_) {
|
if(rhythm_mode_enabled_) {
|
||||||
// TODO!
|
// Advance the rhythm envelope generators.
|
||||||
|
// TODO: these need to be properly seeded.
|
||||||
|
for(int c = 0; c < 5; ++c) {
|
||||||
|
oscillator_.update_lfsr();
|
||||||
|
rhythm_generators_[c].update(oscillator_);
|
||||||
|
}
|
||||||
|
|
||||||
|
// Fill in the melodic channels.
|
||||||
|
output_levels_[3] = VOLUME(melodic_output(0));
|
||||||
|
output_levels_[4] = VOLUME(melodic_output(1));
|
||||||
|
output_levels_[5] = VOLUME(melodic_output(2));
|
||||||
|
|
||||||
|
output_levels_[9] = VOLUME(melodic_output(3));
|
||||||
|
output_levels_[10] = VOLUME(melodic_output(4));
|
||||||
|
output_levels_[11] = VOLUME(melodic_output(5));
|
||||||
|
|
||||||
|
// TODO: drum noises. Also subject to proper channel population.
|
||||||
} else {
|
} else {
|
||||||
for(int c = 6; c < 9; ++c) {
|
for(int c = 6; c < 9; ++c) {
|
||||||
envelope_generators_[c + 0].update(oscillator_);
|
envelope_generators_[c + 0].update(oscillator_);
|
||||||
@ -277,11 +293,13 @@ void OPLL::update_all_channels() {
|
|||||||
#undef VOLUME
|
#undef VOLUME
|
||||||
|
|
||||||
// TODO: batch updates of the LFSR.
|
// TODO: batch updates of the LFSR.
|
||||||
|
// TODO: modulator feedback.
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int OPLL::melodic_output(int channel) {
|
int OPLL::melodic_output(int channel) {
|
||||||
// TODO: key-rate scaling.
|
// TODO: key-rate scaling.
|
||||||
|
// TODO: proper scales of all attenuations below.
|
||||||
auto modulation = WaveformGenerator<period_precision>::wave(channels_[channel].modulator_waveform, phase_generators_[channel + 9].phase());
|
auto modulation = WaveformGenerator<period_precision>::wave(channels_[channel].modulator_waveform, phase_generators_[channel + 9].phase());
|
||||||
modulation += envelope_generators_[channel + 9].attenuation() + channels_[channel].modulator_attenuation;
|
modulation += envelope_generators_[channel + 9].attenuation() + channels_[channel].modulator_attenuation;
|
||||||
|
|
||||||
|
Loading…
Reference in New Issue
Block a user