Deluge Firmware
1.3.0
Build date: 2026.08.23
Toggle main menu visibility
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
24
namespace
deluge::gui::menu_item::audio_clip {
25
class
Transpose
final :
public
Decimal
,
public
MenuItemWithCCLearning {
26
public
:
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, ¢s);
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
MIDICable
A MIDI cable connection. Stores all state specific to a given cable and its contained ports and chann...
Definition
midi_device.h:96
ParamDescriptor
Definition
param_descriptor.h:27
deluge::gui::menu_item::Decimal
Definition
decimal.h:24
deluge::gui::menu_item::audio_clip::Transpose
Definition
transpose.h:25
deluge::gui::menu_item::audio_clip::Transpose::unlearnAction
void unlearnAction() override
Unlearn the parameter controlled by this menu.
Definition
transpose.h:46
deluge::gui::menu_item::audio_clip::Transpose::readCurrentValue
void readCurrentValue() override
Like readValueAgain, but does not redraw.
Definition
transpose.h:28
deluge::gui::menu_item::audio_clip::Transpose::learnKnob
void learnKnob(MIDICable *cable, int32_t whichKnob, int32_t modKnobMode, int32_t midiChannel) override
Definition
transpose.h:48
deluge::gui::menu_item::audio_clip::Transpose::allowsLearnMode
bool allowsLearnMode() override
Used by SoundEditor to determine if the current menu item can accept MIDI learning.
Definition
transpose.h:47
deluge::modulation::params::UNPATCHED_START
constexpr ParamType UNPATCHED_START
Definition
param.h:171