// // Speaker.hpp // Clock Signal // // Created by Thomas Harte on 03/12/2016. // Copyright © 2016 Thomas Harte. All rights reserved. // #ifndef Atari2600_Speaker_hpp #define Atari2600_Speaker_hpp #include "../../Outputs/Speaker.hpp" namespace Atari2600 { // This should be a divisor of 38; audio counters are updated every 38 cycles — though lesser dividers // will give greater resolution to changes in audio state. 1, 2 and 19 are the only divisors of 38. const int CPUTicksPerAudioTick = 2; class Speaker: public ::Outputs::Filter { public: Speaker(); void set_volume(int channel, uint8_t volume); void set_divider(int channel, uint8_t divider); void set_control(int channel, uint8_t control); void get_samples(unsigned int number_of_samples, int16_t *target); private: uint8_t volume_[2]; uint8_t divider_[2]; uint8_t control_[2]; int poly4_counter_[2]; int poly5_counter_[2]; int poly9_counter_[2]; int output_state_[2]; int divider_counter_[2]; }; } #endif /* Speaker_hpp */