35class AudioClip final :
public Clip {
38 ~AudioClip()
override;
40 void expectNoFurtherTicks(
Song* song,
bool actuallySoundChange =
true)
override;
43 int32_t amplitudeIncrement, int32_t pitchAdjust);
45 bool shouldDeleteEmptyNoteRowsAtEndOfList =
false,
bool shouldRetainLinksToSounds =
false,
46 bool keepNoteRowsWithMIDIInput =
true,
bool shouldGrabMidiCommands =
false,
47 bool shouldBackUpExpressionParamsToo =
true)
override;
49 uint32_t xZoom,
RGB* image, uint8_t occupancyMask[],
bool addUndefinedArea,
50 int32_t noteRowIndexStart = 0, int32_t noteRowIndexEnd = 2147483647, int32_t xStart = 0,
51 int32_t xEnd = kDisplayWidth,
bool allowBlur =
true,
bool drawRepeats =
false)
override;
53 void loadSample(
bool mayActuallyReadFile);
54 bool wantsToBeginLinearRecording(
Song* song)
override;
55 bool isAbandonedOverdub()
override;
57 int32_t buttonLatencyForTempolessRecord)
override;
60 uint32_t timeRemainder, int32_t suggestedLength,
61 int32_t alternativeLongerLength)
override;
67 int64_t getSamplesFromTicks(int32_t ticks);
68 void unassignVoiceSample(
bool wontBeUsedAgain);
72 AudioClip* favourClipForCloningParamManager =
nullptr);
74 bool currentlyScrollableAndZoomable()
override;
75 void getScrollAndZoomInSamples(int32_t xScroll, int32_t xZoom, int64_t* xScrollSamples, int64_t* xZoomSamples);
77 bool clearSequenceAndMPE)
override;
78 bool getCurrentlyRecordingLinearly()
override;
79 void abortRecording()
override;
80 void setupPlaybackBounds();
81 uint64_t getCullImmunity();
83 void copyBasicsFrom(
Clip const* otherClip)
override;
84 bool willCloneOutputForOverdub()
override {
return overdubsShouldCloneOutput; }
85 void sampleZoneChanged(ModelStackWithTimelineCounter
const* modelStack);
86 int64_t getNumSamplesTilLoop(ModelStackWithTimelineCounter* modelStack);
87 void setPos(ModelStackWithTimelineCounter* modelStack, int32_t newPos,
bool useActualPosForParamManagers)
override;
89 bool shiftHorizontally(ModelStackWithTimelineCounter* modelStack, int32_t amount,
bool shiftAutomation,
90 bool shiftSequenceAndMPE)
override;
92 Error readFromFile(Deserializer& reader, Song* song)
override;
93 void writeDataToFile(Serializer& writer, Song* song)
override;
94 char const* getXMLTag()
override {
return "audioClip"; }
95 int32_t nextSampleRestartPos;
96 SampleControls sampleControls;
98 SampleHolderForClip sampleHolder;
100 VoiceSample* voiceSample;
102 SamplePlaybackGuide guide;
104 String outputNameWhileLoading;
106 WaveformRenderData renderData;
108 SampleRecorder* recorder;
112 VoicePriority voicePriority;
117 bool renderSidebar(uint32_t whichRows = 0, RGB image[][kDisplayWidth + kSideBarWidth] =
nullptr,
118 uint8_t occupancyMask[][kDisplayWidth + kSideBarWidth] =
nullptr)
override {
119 return audioClipView.renderSidebar(whichRows, image, occupancyMask);
122 ParamManagerForTimeline* getCurrentParamManager()
override;
124 bool isEmpty(
bool displayPopup =
true)
override;
127 bool cloneOutput(ModelStackWithTimelineCounter* modelStack)
override;
130 AudioClip* nextClipInSection;
131 void removeClipFromSection(AudioClip* clip);
132 void detachAudioClipFromOutput(Song* song,
bool shouldRetainLinksToOutput,
bool shouldTakeParamManagerWith =
false);
133 LoopType getLoopingType(ModelStackWithTimelineCounter
const* modelStack);