17#include "SubComponent.h"
18#include "Concurrency.h"
25class AudioPort final :
27public Inspectable<AudioPortInfo, AudioPortStats>,
28public util::RingBuffer <SamplePair, 12288> {
30 Descriptions descriptions = {{
33 .description =
"Audio Port"
36 ConfigOptions options = {
51 AudioPortConfig config = { };
54 util::Time lastAlignment;
57 double sampleRateCorrection = 0.0;
79 AudioPort(C64 &ref) : SubComponent(ref) { };
81 AudioPort& operator= (
const AudioPort& other) {
97 void serialize(T& worker)
99 if (isResetter(worker))
return;
108 } SERIALIZERS(serialize);
117 const Descriptions &getDescriptions()
const override {
return descriptions; }
121 void _dump(Category category, std::ostream& os)
const override;
122 void _reset(
bool hard)
override;
123 void _powerOn()
override;
124 void _run()
override;
125 void _pause()
override;
126 void _warpOn()
override;
127 void _warpOff()
override;
128 void _focus()
override;
129 void _unfocus()
override;
138 void cacheInfo(AudioPortInfo &result)
const override;
139 void cacheStats(AudioPortStats &result)
const override;
148 const AudioPortConfig &getConfig()
const {
return config; }
149 const ConfigOptions &getOptions()
const override {
return options; }
150 i64 getOption(Option opt)
const override;
151 void checkOption(Option opt, i64 value)
override;
152 void setOption(Option opt, i64 value)
override;
162 void alignWritePtr();
168 void handleBufferUnderflow();
174 void handleBufferOverflow();
177 void clamp(isize maxSamples);
187 void generateSamples();
190 double getSampleRateCorrection() {
return sampleRateCorrection; }
196 void mute() { volL.mute(); volR.mute(); }
197 void mute(isize steps) { volL.mute(steps); volR.mute(steps); }
200 void unmute() { volL.unmute(); volR.unmute(); }
201 void unmute(isize steps) { volL.unmute(steps); volR.unmute(steps); }
209 template <
bool fading>
void mixSingleSID(isize numSamples);
212 template <
bool fading>
void mixMultiSID(isize numSamples);
226 isize copyMono(
float *buffer, isize n);
227 isize copyStereo(
float *left,
float *right, isize n);
228 isize copyInterleaved(
float *buffer, isize n);
VirtualC64 project namespace.
Definition CmdQueue.cpp:16
@ OPT_AUD_VOL_L
Master volume (left channel)
Definition OptionTypes.h:125
@ OPT_AUD_PAN0
Channel 0 panning.
Definition OptionTypes.h:121
@ OPT_AUD_VOL2
Channel 2 volume.
Definition OptionTypes.h:119
@ OPT_AUD_PAN1
Channel 1 panning.
Definition OptionTypes.h:122
@ OPT_AUD_VOL3
Channel 3 volume.
Definition OptionTypes.h:120
@ OPT_AUD_VOL1
Channel 1 volume.
Definition OptionTypes.h:118
@ OPT_AUD_VOL_R
Master volume (right channel)
Definition OptionTypes.h:126
@ OPT_AUD_PAN3
Channel 3 panning.
Definition OptionTypes.h:124
@ OPT_AUD_PAN2
Channel 2 panning.
Definition OptionTypes.h:123
@ OPT_AUD_VOL0
Channel 0 volume.
Definition OptionTypes.h:117