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.

127 lines
3.7KB

  1. #include "PluginProcessor.h"
  2. #include "PluginEditor.h"
  3. #include "xmmintrin.h"
  4. ReFinedAudioProcessor::ReFinedAudioProcessor()
  5. {
  6. parameters = new AudioProcessorValueTreeState(*this, nullptr);
  7. parameters->createAndAddParameter("red", "red", "", NormalisableRange<float>(0.f, 1.f), 0.f, [](float val) { return String(val, 2); }, [](const String& s) { return (float) s.getDoubleValue(); });
  8. parameters->createAndAddParameter("green", "green", "", NormalisableRange<float>(0.f, 1.f), 0.f, [](float val) { return String(val, 2); }, [](const String& s) { return (float) s.getDoubleValue(); });
  9. parameters->createAndAddParameter("blue", "blue", "", NormalisableRange<float>(0.f, 1.f), 0.f, [](float val) { return String(val, 2); }, [](const String& s) { return (float) s.getDoubleValue(); });
  10. parameters->createAndAddParameter("x2", "x2", "", NormalisableRange<float>(0.f, 1.f), 0.f, [](float val) { return val < 0.5f ? "Off" : "On"; }, [](const String& s) { return s.trim() == "1" || s.trim().toLowerCase() == "on" ? 1.f : 0.f; });
  11. }
  12. ReFinedAudioProcessor::~ReFinedAudioProcessor()
  13. {
  14. }
  15. const String ReFinedAudioProcessor::getName() const
  16. {
  17. return JucePlugin_Name;
  18. }
  19. bool ReFinedAudioProcessor::acceptsMidi() const
  20. {
  21. return false;
  22. }
  23. bool ReFinedAudioProcessor::producesMidi() const
  24. {
  25. return false;
  26. }
  27. double ReFinedAudioProcessor::getTailLengthSeconds() const
  28. {
  29. return 0.0;
  30. }
  31. int ReFinedAudioProcessor::getNumPrograms()
  32. {
  33. return 1;
  34. }
  35. int ReFinedAudioProcessor::getCurrentProgram()
  36. {
  37. return 0;
  38. }
  39. void ReFinedAudioProcessor::setCurrentProgram (int /*index*/)
  40. {
  41. }
  42. const String ReFinedAudioProcessor::getProgramName (int /*index*/)
  43. {
  44. return String();
  45. }
  46. void ReFinedAudioProcessor::changeProgramName (int /*index*/, const String& /*newName*/)
  47. {
  48. }
  49. void ReFinedAudioProcessor::prepareToPlay (double newSampleRate, int /*samplesPerBlock*/)
  50. {
  51. dsp.setSampleRate(newSampleRate);
  52. }
  53. void ReFinedAudioProcessor::releaseResources()
  54. {
  55. }
  56. void ReFinedAudioProcessor::processBlock (AudioSampleBuffer& buffer, MidiBuffer& /*midiMessages*/)
  57. {
  58. {
  59. const float low = parameters->getParameter("red")->getValue();
  60. const float mid = parameters->getParameter("green")->getValue();
  61. const float high = parameters->getParameter("blue")->getValue();
  62. const float x2mode = parameters->getParameter("x2")->getValue();
  63. dsp.setLow(0.9f * low + 0.05f * mid + 0.05f * high);
  64. dsp.setMid(0.9f * mid + 0.05f * high + 0.05f * low);
  65. dsp.setHigh(0.9f * high + 0.05f * low + 0.05f * mid);
  66. dsp.setX2Mode(x2mode > 0.5f);
  67. }
  68. const int numChannels = buffer.getNumChannels();
  69. const int numSamples = buffer.getNumSamples();
  70. float* chL = buffer.getWritePointer(0);
  71. float* chR = numChannels > 1 ? buffer.getWritePointer(1) : nullptr;
  72. dsp.processBlock(chL, chR, numSamples);
  73. }
  74. bool ReFinedAudioProcessor::hasEditor() const
  75. {
  76. return true;
  77. }
  78. AudioProcessorEditor* ReFinedAudioProcessor::createEditor()
  79. {
  80. return new ReFinedAudioProcessorEditor (*this);
  81. }
  82. void ReFinedAudioProcessor::getStateInformation (MemoryBlock& destData)
  83. {
  84. XmlElement xml("REFINED");
  85. for (int i = 0; i < getNumParameters(); ++i)
  86. xml.setAttribute(getParameterName(i), getParameter(i));
  87. copyXmlToBinary(xml, destData);
  88. }
  89. void ReFinedAudioProcessor::setStateInformation (const void* data, int sizeInBytes)
  90. {
  91. ScopedPointer<XmlElement> xml(getXmlFromBinary(data, sizeInBytes));
  92. if (xml != nullptr)
  93. {
  94. for (int i = 0; i < getNumParameters(); ++i)
  95. setParameterNotifyingHost(i, (float) xml->getDoubleAttribute(getParameterName(i), getParameter(i)));
  96. }
  97. }
  98. AudioProcessor* JUCE_CALLTYPE createPluginFilter()
  99. {
  100. return new ReFinedAudioProcessor();
  101. }