tracktion-engine 3.0-10-g034fdde4aa5
Tracktion Engine — High level data model for audio applications

« « « Anklang Documentation
Loading...
Searching...
No Matches
tracktion_Pitch.h
Go to the documentation of this file.
1 /*
2 ,--. ,--. ,--. ,--.
3 ,-' '-.,--.--.,--,--.,---.| |,-.,-' '-.`--' ,---. ,--,--, Copyright 2024
4 '-. .-'| .--' ,-. | .--'| /'-. .-',--.| .-. || \ Tracktion Software
5 | | | | \ '-' \ `--.| \ \ | | | |' '-' '| || | Corporation
6 `---' `--' `--`--'`---'`--'`--' `---' `--' `---' `--''--' www.tracktion.com
7
8 Tracktion Engine uses a GPL/commercial licence - see LICENCE.md for details.
9*/
10
11namespace tracktion { inline namespace engine
12{
13
14struct Pitch
15{
16 static juce::String getPitchAsString (Engine& engine, int pitch)
17 {
18 auto middleC = engine.getEngineBehaviour().getMiddleCOctave();
19 auto sharp = juce::MidiMessage::getMidiNoteName (pitch, true, false, middleC);
20 auto flat = juce::MidiMessage::getMidiNoteName (pitch, false, false, middleC);
21
22 if (sharp == flat)
23 return sharp;
24
25 return sharp + " / " + flat;
26 }
27
28 static juce::StringArray getPitchAsStrings (Engine& engine, int pitch)
29 {
30 auto middleC = engine.getEngineBehaviour().getMiddleCOctave();
31 auto sharp = juce::MidiMessage::getMidiNoteName (pitch, true, false, middleC);
32 auto flat = juce::MidiMessage::getMidiNoteName (pitch, false, false, middleC);
33
35
36 if (sharp == flat)
37 {
38 res.add (sharp);
39 return res;
40 }
41
42 res.add (sharp);
43 res.add (flat);
44 res.add (sharp + " / " + flat);
45
46 return res;
47 }
48
49 static int getPitchFromString (Engine& engine, const juce::String& str)
50 {
51 for (int i = 0; i < 12; ++i)
52 if (getPitchAsStrings (engine, i + 60).contains (str))
53 return i + 60;
54
55 return 60;
56 }
57
58 static juce::StringArray getPitchStrings (Engine& engine, bool separateSharpFlat)
59 {
60 juce::StringArray pitchChoices;
61
62 if (separateSharpFlat)
63 {
64 for (int i = 0; i < 12; ++i)
65 for (auto s : getPitchAsStrings (engine, i + 60))
66 if (! s.contains ("/"))
67 pitchChoices.add (s);
68 }
69 else
70 {
71 for (int i = 0; i < 12; ++i)
72 pitchChoices.add (getPitchAsString (engine, i + 60));
73 }
74
75 return pitchChoices;
76 }
77
78 // Converts a relative number of semitones up or down into a speed ratio where 0 semitones = 1.0
79 static float semitonesToRatio (float semitonesUp) noexcept
80 {
81 if (semitonesUp == 0.0f)
82 return 1.0f;
83
84 auto oneSemitone = std::pow (2.0, 1.0 / 12.0);
85 return (float) std::pow (oneSemitone, (double) semitonesUp);
86 }
87
88};
89
90}} // namespace tracktion { inline namespace engine
static String getMidiNoteName(int noteNumber, bool useSharps, bool includeOctaveNumber, int octaveNumForMiddleC)
void add(String stringToAdd)
The Engine is the central class for all tracktion sessions.
EngineBehaviour & getEngineBehaviour() const
Returns the EngineBehaviour instance.
T pow(T... args)