37class AudioOutput final :
public Output,
public GlobalEffectableForClip {
40 ~AudioOutput()
override;
41 void cloneFrom(ModControllableAudio* other)
override;
43 void renderOutput(
ModelStack* modelStack, std::span<StereoSample> buffer, int32_t* reverbBuffer,
44 int32_t reverbAmountAdjust, int32_t sideChainHitPending,
bool shouldLimitDelayFeedback,
45 bool isClipActive)
override;
48 std::span<StereoSample> globalEffectableBuffer, int32_t* bufferToTransferTo,
49 int32_t* reverbBuffer, int32_t reverbAmountAdjust, int32_t sideChainHitPending,
50 bool shouldLimitDelayFeedback,
bool isClipActive, int32_t pitchAdjust,
51 int32_t amplitudeAtStart, int32_t amplitudeAtEnd)
override;
54 bool matchesPreset(OutputType otherType, int32_t channel, int32_t channelSuffix,
char const* otherName,
55 char const* dirPath)
override {
60 uint8_t* getModKnobMode()
override {
return &modKnobMode; }
62 void cutAllSound()
override;
64 Kit** kitWithMostReverb, int32_t* highestReverbAmountFound);
66 Error readFromFile(
Deserializer& reader,
Song* song,
Clip* clip, int32_t readAutomationUpToPos)
override;
67 bool writeDataToFile(
Serializer& writer,
Clip* clipForSavingOutputOnly,
Song* song)
override;
68 void deleteBackedUpParamManagers(
Song* song)
override;
70 PgmChangeSend maySendMIDIPGMs = PgmChangeSend::ONCE)
override;
71 bool isSkippingRendering()
override;
72 Output* toOutput()
override {
return this; }
73 void getThingWithMostReverb(
Sound** soundWithMostReverb,
ParamManager** paramManagerWithMostReverb,
74 GlobalEffectableForClip** globalEffectableWithMostReverb,
75 int32_t* highestReverbAmountFound)
override;
78 void offerReceivedCCToLearnedParams(
MIDICable& cable, uint8_t channel, uint8_t ccNumber, uint8_t value,
80 ModControllableAudio::offerReceivedCCToLearnedParamsForClip(cable, channel, ccNumber, value, modelStack);
84 return ModControllableAudio::offerReceivedPitchBendToLearnedParams(cable, channel, data1, data2, modelStack);
87 char const* getXMLTag()
override {
return "audioTrack"; }
91 int32_t amplitudeLastTime;
93 int32_t overrideAmplitudeEnvelopeReleaseRate;
104 AudioOutputMode mode{AudioOutputMode::player};
107 void clearRecordingFrom()
override { setOutputRecordingFrom(
nullptr); }
108 void setOutputRecordingFrom(Output* toRecordfrom) {
109 if (toRecordfrom ==
this) {
124 ModelStackWithAutoParam* getModelStackWithParam(ModelStackWithTimelineCounter* modelStack, Clip* clip,
126 bool affectEntire,
bool useMenuStack)
override;
127 void scrollAudioOutputMode(
int offset) {
128 auto modeInt = util::to_underlying(mode);
129 modeInt = (modeInt + offset) % kNumAudioOutputModes;
131 mode =
static_cast<AudioOutputMode
>(std::clamp<int>(modeInt, 0, kNumAudioOutputModes - 1));
137 if (display->have7SEG()) {
140 case AudioOutputMode::player:
143 case AudioOutputMode::sampler:
146 case AudioOutputMode::looper:
149 display->displayPopup(type);
154 Clip* createNewClipForArrangementRecording(ModelStack* modelStack)
override;
155 bool wantsToBeginArrangementRecording()
override;
156 bool willRenderAsOneChannelOnlyWhichWillNeedCopying()
override;
bool offerReceivedPitchBendToLearnedParams(MIDICable &cable, uint8_t channel, uint8_t data1, uint8_t data2, ModelStackWithTimelineCounter *modelStack) override
Pitch bend is available in the mod matrix as X and shouldn't be learned to params anymore (post 4....
Definition audio_output.h:82