NeuralPi

Raspberry Pi guitar pedal using neural networks to emulate real amps and effects
Log | Files | Refs | Submodules | README

AmpOSCReceiver.h (5455B)


      1 #include "../JuceLibraryCode/JuceHeader.h"
      2 
      3 #pragma once
      4 
      5 class AmpOSCReceiver :
      6         private OSCReceiver,
      7         private OSCReceiver::Listener <OSCReceiver::MessageLoopCallback>
      8 {
      9 public:
     10     AmpOSCReceiver()
     11     {
     12         changePort (defaultPort);
     13 
     14         addListener (this);
     15     }
     16 
     17     Value& getGainValue()
     18     {
     19         return gainValue;
     20     }
     21 
     22     Value& getMasterValue()
     23     {
     24         return masterValue;
     25     }
     26 
     27     Value& getBassValue()
     28     {
     29         return bassValue;
     30     }
     31 
     32     Value& getMidValue()
     33     {
     34         return midValue;
     35     }
     36 
     37     Value& getTrebleValue()
     38     {
     39         return trebleValue;
     40     }
     41 
     42     Value& getPresenceValue()
     43     {
     44         return presenceValue;
     45     }
     46 
     47     Value& getModelValue()
     48     {
     49         return modelValue;
     50     }
     51 
     52     Value& getIrValue()
     53     {
     54         return irValue;
     55     }
     56 
     57     Value& getDelayValue()
     58     {
     59         return delayValue;
     60     }
     61 
     62     Value& getReverbValue()
     63     {
     64         return reverbValue;
     65     }
     66 
     67     void changePort (int port)
     68     {
     69         if (! connect (port))
     70         {
     71             connected = false;
     72             DBG ("Connection Failed");
     73         }
     74         else
     75         {
     76             connected = true;
     77             DBG("Connection Succeeded");
     78         }
     79     }
     80 
     81     void updateAmpName (String name)
     82     {
     83         ampName = std::move(name);
     84         buildAddressPatterns();
     85     }
     86 
     87     bool isConnected()
     88     {
     89         return connected;
     90     }
     91 
     92 private:
     93     void buildAddressPatterns()
     94     {
     95         gainAddressPattern = "/parameter/" + ampName + "/Gain";
     96         masterAddressPattern = "/parameter/" + ampName + "/Master";
     97         bassAddressPattern = "/parameter/" + ampName + "/Bass";
     98         midAddressPattern = "/parameter/" + ampName + "/Mid";
     99         trebleAddressPattern = "/parameter/" + ampName + "/Treble";
    100         presenceAddressPattern = "/parameter/" + ampName + "/Presence";
    101         modelAddressPattern = "/parameter/" + ampName + "/Model";
    102         irAddressPattern = "/parameter/" + ampName + "/Ir";
    103         reverbAddressPattern = "/parameter/" + ampName + "/Reverb";
    104         delayAddressPattern = "/parameter/" + ampName + "/Delay";
    105     }
    106 
    107     void oscMessageReceived(const OSCMessage& message) override
    108     {
    109         DBG("Message Received: ");
    110 
    111         if (message.size() == 1 && message[0].isFloat32())
    112         {
    113             DBG("    value " + String(message[0].getFloat32()) + " to AP " + message.getAddressPattern().toString());
    114 
    115             if (message.getAddressPattern().matches(gainAddressPattern))
    116             {
    117                 gainValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    118             }
    119             else if (message.getAddressPattern().matches(masterAddressPattern))
    120             {
    121                 masterValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    122             }
    123 
    124             if (message.getAddressPattern().matches(bassAddressPattern))
    125             {
    126                 bassValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    127             }
    128             else if (message.getAddressPattern().matches(midAddressPattern))
    129             {
    130                 midValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    131             }
    132 
    133             if (message.getAddressPattern().matches(trebleAddressPattern))
    134             {
    135                 trebleValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    136             }
    137             else if (message.getAddressPattern().matches(presenceAddressPattern))
    138             {
    139                 presenceValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    140             }
    141             else if (message.getAddressPattern().matches(modelAddressPattern))
    142             {
    143                 modelValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    144             }
    145             else if (message.getAddressPattern().matches(irAddressPattern))
    146             {
    147                 irValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    148             }
    149             else if (message.getAddressPattern().matches(reverbAddressPattern))
    150             {
    151                 reverbValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    152             }
    153             else if (message.getAddressPattern().matches(delayAddressPattern))
    154             {
    155                 delayValue.setValue(jlimit(0.0f, 1.0f, message[0].getFloat32()));
    156             }
    157         }
    158     }
    159 
    160     int defaultPort {25024};
    161 
    162     String ampName {"NeuralPi"};
    163     String gainAddressPattern {"/parameter/elk_juce_example/Gain"};
    164     String masterAddressPattern {"/parameter/elk_juce_example/Master"};
    165     String bassAddressPattern {"/parameter/elk_juce_example/Bass"};
    166     String midAddressPattern {"/parameter/elk_juce_example/Mid"};
    167     String trebleAddressPattern {"/parameter/elk_juce_example/Treble"};
    168     String presenceAddressPattern {"/parameter/elk_juce_example/Presence"};
    169     String modelAddressPattern {"/parameter/elk_juce_example/Model"};
    170     String irAddressPattern {"/parameter/elk_juce_example/Ir"};
    171     String delayAddressPattern {"/parameter/elk_juce_example/Delay"};
    172     String reverbAddressPattern {"/parameter/elk_juce_example/Reverb"};
    173 
    174     Value gainValue {0.5f};
    175     Value masterValue {0.5f};
    176     Value bassValue {0.5f};
    177     Value midValue {0.5f};
    178     Value trebleValue {0.5f};
    179     Value presenceValue {0.5f};
    180 
    181     Value modelValue {0.0f};
    182     Value irValue {0.0f};
    183 
    184     Value delayValue {0.0f};
    185     Value reverbValue {0.0f};
    186 
    187     bool connected = false;
    188 
    189     JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (AmpOSCReceiver)
    190 };