1
0
mirror of https://github.com/TomHarte/CLK.git synced 2024-11-26 23:52:26 +00:00

Merge pull request #403 from TomHarte/VicRange

Causes the 6560 to obey `set_sample_volume_range`.
This commit is contained in:
Thomas Harte 2018-04-05 21:06:09 -04:00 committed by GitHub
commit bab1440f5c
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 6 additions and 4 deletions

View File

@ -18,7 +18,7 @@ AudioGenerator::AudioGenerator(Concurrency::DeferringAsyncTaskQueue &audio_queue
void AudioGenerator::set_volume(uint8_t volume) { void AudioGenerator::set_volume(uint8_t volume) {
audio_queue_.defer([=]() { audio_queue_.defer([=]() {
volume_ = volume; volume_ = static_cast<int16_t>(volume) * range_multiplier_;
}); });
} }
@ -114,12 +114,12 @@ void AudioGenerator::get_samples(std::size_t number_of_samples, int16_t *target)
// this sums the output of all three sounds channels plus a DC offset for volume; // this sums the output of all three sounds channels plus a DC offset for volume;
// TODO: what's the real ratio of this stuff? // TODO: what's the real ratio of this stuff?
target[c] = ( target[c] = static_cast<int16_t>(
(shift_registers_[0]&1) + (shift_registers_[0]&1) +
(shift_registers_[1]&1) + (shift_registers_[1]&1) +
(shift_registers_[2]&1) + (shift_registers_[2]&1) +
((noise_pattern[shift_registers_[3] >> 3] >> (shift_registers_[3]&7))&(control_registers_[3] >> 7)&1) ((noise_pattern[shift_registers_[3] >> 3] >> (shift_registers_[3]&7))&(control_registers_[3] >> 7)&1)
) * volume_ * 700 + volume_ * 44; ) * volume_ + (volume_ >> 4);
} }
} }
@ -133,6 +133,7 @@ void AudioGenerator::skip_samples(std::size_t number_of_samples) {
} }
void AudioGenerator::set_sample_volume_range(std::int16_t range) { void AudioGenerator::set_sample_volume_range(std::int16_t range) {
range_multiplier_ = static_cast<int16_t>(range / 64);
} }
#undef shift #undef shift

View File

@ -36,7 +36,8 @@ class AudioGenerator: public ::Outputs::Speaker::SampleSource {
unsigned int counters_[4] = {2, 1, 0, 0}; // create a slight phase offset for the three channels unsigned int counters_[4] = {2, 1, 0, 0}; // create a slight phase offset for the three channels
unsigned int shift_registers_[4] = {0, 0, 0, 0}; unsigned int shift_registers_[4] = {0, 0, 0, 0};
uint8_t control_registers_[4] = {0, 0, 0, 0}; uint8_t control_registers_[4] = {0, 0, 0, 0};
uint8_t volume_ = 0; int16_t volume_ = 0;
int16_t range_multiplier_ = 1;
}; };
/*! /*!