You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

173 lines
5.3KB

  1. /* Copyright 2013-2019 Matt Tytel
  2. *
  3. * vital is free software: you can redistribute it and/or modify
  4. * it under the terms of the GNU General Public License as published by
  5. * the Free Software Foundation, either version 3 of the License, or
  6. * (at your option) any later version.
  7. *
  8. * vital is distributed in the hope that it will be useful,
  9. * but WITHOUT ANY WARRANTY; without even the implied warranty of
  10. * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
  11. * GNU General Public License for more details.
  12. *
  13. * You should have received a copy of the GNU General Public License
  14. * along with vital. If not, see <http://www.gnu.org/licenses/>.
  15. */
  16. #pragma once
  17. #include "value.h"
  18. #include <string>
  19. namespace vital {
  20. constexpr int kNumLfos = 8;
  21. constexpr int kNumOscillators = 3;
  22. constexpr int kNumOscillatorWaveFrames = 257;
  23. constexpr int kNumEnvelopes = 6;
  24. constexpr int kNumRandomLfos = 4;
  25. constexpr int kNumMacros = 4;
  26. constexpr int kNumFilters = 2;
  27. constexpr int kNumFormants = 4;
  28. constexpr int kNumChannels = 2;
  29. constexpr int kMaxPolyphony = 33;
  30. constexpr int kMaxActivePolyphony = 32;
  31. constexpr int kLfoDataResolution = 2048;
  32. constexpr int kMaxModulationConnections = 64;
  33. constexpr int kOscilloscopeMemorySampleRate = 22000;
  34. constexpr int kOscilloscopeMemoryResolution = 512;
  35. constexpr int kAudioMemorySamples = 1 << 15;
  36. constexpr int kDefaultWindowWidth = 1400;
  37. constexpr int kDefaultWindowHeight = 820;
  38. constexpr int kMinWindowWidth = 350;
  39. constexpr int kMinWindowHeight = 205;
  40. constexpr int kDefaultKeyboardOffset = 48;
  41. constexpr wchar_t kDefaultKeyboardOctaveUp = 'x';
  42. constexpr wchar_t kDefaultKeyboardOctaveDown = 'z';
  43. const std::wstring kDefaultKeyboard = L"awsedftgyhujkolp;'";
  44. const std::string kPresetExtension = "vital";
  45. const std::string kWavetableExtension = "vitaltable";
  46. const std::string kWavetableExtensionsList = "*." + vital::kWavetableExtension + ";*.wav;*.flac";
  47. const std::string kSampleExtensionsList = "*.wav;*.flac";
  48. const std::string kSkinExtension = "vitalskin";
  49. const std::string kLfoExtension = "vitallfo";
  50. const std::string kBankExtension = "vitalbank";
  51. namespace constants {
  52. enum SourceDestination {
  53. kFilter1,
  54. kFilter2,
  55. kDualFilters,
  56. kEffects,
  57. kDirectOut,
  58. kNumSourceDestinations
  59. };
  60. static SourceDestination toggleFilter1(SourceDestination current_destination, bool on) {
  61. if (on) {
  62. if (current_destination == vital::constants::kFilter2)
  63. return vital::constants::kDualFilters;
  64. else
  65. return vital::constants::kFilter1;
  66. }
  67. else if (current_destination == vital::constants::kDualFilters)
  68. return vital::constants::kFilter2;
  69. else if (current_destination == vital::constants::kFilter1)
  70. return vital::constants::kEffects;
  71. return current_destination;
  72. }
  73. static SourceDestination toggleFilter2(SourceDestination current_destination, bool on) {
  74. if (on) {
  75. if (current_destination == vital::constants::kFilter1)
  76. return vital::constants::kDualFilters;
  77. else
  78. return vital::constants::kFilter2;
  79. }
  80. else if (current_destination == vital::constants::kDualFilters)
  81. return vital::constants::kFilter1;
  82. else if (current_destination == vital::constants::kFilter2)
  83. return vital::constants::kEffects;
  84. return current_destination;
  85. }
  86. enum Effect {
  87. kChorus,
  88. kCompressor,
  89. kDelay,
  90. kDistortion,
  91. kEq,
  92. kFilterFx,
  93. kFlanger,
  94. kPhaser,
  95. kReverb,
  96. kNumEffects
  97. };
  98. enum FilterModel {
  99. kAnalog,
  100. kDirty,
  101. kLadder,
  102. kDigital,
  103. kDiode,
  104. kFormant,
  105. kComb,
  106. kPhase,
  107. kNumFilterModels
  108. };
  109. enum RetriggerStyle {
  110. kFree,
  111. kRetrigger,
  112. kSyncToPlayHead,
  113. kNumRetriggerStyles,
  114. };
  115. constexpr int kNumSyncedFrequencyRatios = 13;
  116. constexpr vital::mono_float kSyncedFrequencyRatios[kNumSyncedFrequencyRatios] = {
  117. 0.0f,
  118. 1.0f / 128.0f,
  119. 1.0f / 64.0f,
  120. 1.0f / 32.0f,
  121. 1.0f / 16.0f,
  122. 1.0f / 8.0f,
  123. 1.0f / 4.0f,
  124. 1.0f / 2.0f,
  125. 1.0f,
  126. 2.0f,
  127. 4.0f,
  128. 8.0f,
  129. 16.0f
  130. };
  131. const poly_float kLeftOne(1.0f, 0.0f);
  132. const poly_float kRightOne(0.0f, 1.0f);
  133. const poly_float kFirstVoiceOne(1.0f, 1.0f, 0.0f, 0.0f);
  134. const poly_float kSecondVoiceOne(0.0f, 0.0f, 1.0f, 1.0f);
  135. const poly_float kStereoSplit = kLeftOne - kRightOne;
  136. const poly_float kPolySqrt2 = kSqrt2;
  137. const poly_mask kFullMask = poly_float::equal(0.0f, 0.0f);
  138. const poly_mask kLeftMask = poly_float::equal(kLeftOne, 1.0f);
  139. const poly_mask kRightMask = poly_float::equal(kRightOne, 1.0f);
  140. const poly_mask kFirstMask = poly_float::equal(kFirstVoiceOne, 1.0f);
  141. const poly_mask kSecondMask = poly_float::equal(kSecondVoiceOne, 1.0f);
  142. const cr::Value kValueZero(0.0f);
  143. const cr::Value kValueOne(1.0f);
  144. const cr::Value kValueTwo(2.0f);
  145. const cr::Value kValueHalf(0.5f);
  146. const cr::Value kValueFifth(0.2f);
  147. const cr::Value kValueTenth(0.1f);
  148. const cr::Value kValuePi(kPi);
  149. const cr::Value kValue2Pi(2.0f * kPi);
  150. const cr::Value kValueSqrt2(kSqrt2);
  151. const cr::Value kValueNegOne(-1.0f);
  152. } // namespace constants
  153. } // namespace vital