Deluge Firmware 1.3.0
Build date: 2025.04.16
Loading...
Searching...
No Matches
transpose.h
1/*
2 * Copyright (c) 2014-2023 Synthstrom Audible Limited
3 *
4 * This file is part of The Synthstrom Audible Deluge Firmware.
5 *
6 * The Synthstrom Audible Deluge Firmware is free software: you can redistribute it and/or modify it under the
7 * terms of the GNU General Public License as published by the Free Software Foundation,
8 * either version 3 of the License, or (at your option) any later version.
9 *
10 * This program is distributed in the hope that it will be useful, but WITHOUT ANY WARRANTY;
11 * without even the implied warranty of MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.
12 * See the GNU General Public License for more details.
13 *
14 * You should have received a copy of the GNU General Public License along with this program.
15 * If not, see <https://www.gnu.org/licenses/>.
16 */
17#pragma once
18#include "gui/menu_item/decimal.h"
19#include "gui/menu_item/menu_item_with_cc_learning.h"
20#include "gui/ui/sound_editor.h"
21#include "model/clip/audio_clip.h"
22#include "model/song/song.h"
23
24namespace deluge::gui::menu_item::audio_clip {
25class Transpose final : public Decimal, public MenuItemWithCCLearning {
26public:
27 using Decimal::Decimal;
28 void readCurrentValue() override {
29 auto& sampleHolder = getCurrentAudioClip()->sampleHolder;
30 this->setValue(computeCurrentValueForTranspose(sampleHolder.transpose, sampleHolder.cents));
31 }
32 void writeCurrentValue() override {
33 int32_t transpose, cents;
34 computeFinalValuesForTranspose(this->getValue(), &transpose, &cents);
35
36 auto& sampleHolder = getCurrentAudioClip()->sampleHolder;
37 sampleHolder.transpose = transpose;
38 sampleHolder.cents = cents;
39 sampleHolder.recalculateNeutralPhaseIncrement();
40 }
41
42 [[nodiscard]] int32_t getMinValue() const override { return -9600; }
43 [[nodiscard]] int32_t getMaxValue() const override { return 9600; }
44 [[nodiscard]] int32_t getNumDecimalPlaces() const override { return 2; }
45
46 void unlearnAction() override { MenuItemWithCCLearning::unlearnAction(); }
47 bool allowsLearnMode() override { return MenuItemWithCCLearning::allowsLearnMode(); }
48 void learnKnob(MIDICable* cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) override {
49 MenuItemWithCCLearning::learnKnob(cable, whichKnob, modKnobMode, midiChannel);
50 };
51
52 ParamDescriptor getLearningThing() override {
53 ParamDescriptor paramDescriptor;
54 paramDescriptor.setToHaveParamOnly(deluge::modulation::params::UNPATCHED_START
55 + deluge::modulation::params::UNPATCHED_PITCH_ADJUST);
56 return paramDescriptor;
57 }
58};
59} // namespace deluge::gui::menu_item::audio_clip
A MIDI cable connection. Stores all state specific to a given cable and its contained ports and chann...
Definition midi_device.h:94
Definition param_descriptor.h:27
Definition decimal.h:24
void unlearnAction() override
Unlearn the parameter controlled by this menu.
Definition transpose.h:46
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition transpose.h:28
void learnKnob(MIDICable *cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) override
Definition transpose.h:48
bool allowsLearnMode() override
Used by SoundEditor to determine if the current menu item can accept MIDI learning.
Definition transpose.h:47
constexpr ParamType UNPATCHED_START
Definition param.h:171