Skip to content
Snippets Groups Projects
Commit 2a8d0efc authored by jsiegle's avatar jsiegle
Browse files

Individual channel parameters are editable in SignalGenerator

Problem:
- There's not yet a way to get the parameters for each channel
after it's clicked
parent cf214b30
No related branches found
No related tags found
No related merge requests found
...@@ -19,7 +19,7 @@ ifeq ($(CONFIG),Debug) ...@@ -19,7 +19,7 @@ ifeq ($(CONFIG),Debug)
OUTDIR := build OUTDIR := build
CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2"
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0 CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -g -ggdb -O0
CXXFLAGS += $(CFLAGS) -D__STDC_LIMIT_MACROS CXXFLAGS += $(CFLAGS) -export-dynamic
LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../JuceLibraryCode/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lftdi -lftgl LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../JuceLibraryCode/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lftdi -lftgl
LDDEPS := LDDEPS :=
RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" RESFLAGS := -D "LINUX=1" -D "DEBUG=1" -D "_DEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2"
...@@ -34,7 +34,7 @@ ifeq ($(CONFIG),Release) ...@@ -34,7 +34,7 @@ ifeq ($(CONFIG),Release)
OUTDIR := build OUTDIR := build
CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" CPPFLAGS := $(DEPFLAGS) -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2"
CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3 CFLAGS += $(CPPFLAGS) $(TARGET_ARCH) -O3
CXXFLAGS += $(CFLAGS) -D__STDC_LIMIT_MACROS CXXFLAGS += $(CFLAGS) -export-dynamic
LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../JuceLibraryCode/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lftdi -lftgl LDFLAGS += -L$(BINDIR) -L$(LIBDIR) -L"/usr/X11R6/lib/" -L"../../JuceLibraryCode/bin" -lfreetype -lpthread -lrt -lX11 -lGL -lGLU -lXinerama -lasound -lftdi -lftgl
LDDEPS := LDDEPS :=
RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2" RESFLAGS := -D "LINUX=1" -D "NDEBUG=1" -D "JUCER_LINUX_MAKE_7346DA2A=1" -I "/usr/include" -I "/usr/include/freetype2"
......
...@@ -325,6 +325,7 @@ ...@@ -325,6 +325,7 @@
1640CC946EDFD5EC9A321954 = { isa = PBXGroup; children = ( 1640CC946EDFD5EC9A321954 = { isa = PBXGroup; children = (
2D8E1C366F21D3C8FE662382, 2D8E1C366F21D3C8FE662382,
4E8DA551A1B5D7A2B1229181 ); name = Resources; sourceTree = "<group>"; }; 4E8DA551A1B5D7A2B1229181 ); name = Resources; sourceTree = "<group>"; };
21721C7CD4451993F10354CB = { isa = PBXGroup; children = ( ); name = Plugins; sourceTree = "<group>"; };
8F98BACF97340868397BA4BB = { isa = PBXGroup; children = ( 8F98BACF97340868397BA4BB = { isa = PBXGroup; children = (
673778A175624FC9F52E7A15, 673778A175624FC9F52E7A15,
2EAE0475B719C3233AD8BB35 ); name = Network; sourceTree = "<group>"; }; 2EAE0475B719C3233AD8BB35 ); name = Network; sourceTree = "<group>"; };
...@@ -479,6 +480,7 @@ ...@@ -479,6 +480,7 @@
2A78F719BAFBDCD63AE9A88A, 2A78F719BAFBDCD63AE9A88A,
DB605BA15852F367DF625300 ); name = UI; sourceTree = "<group>"; }; DB605BA15852F367DF625300 ); name = UI; sourceTree = "<group>"; };
98D3BECE25EB3CF1F64F54B4 = { isa = PBXGroup; children = ( 98D3BECE25EB3CF1F64F54B4 = { isa = PBXGroup; children = (
21721C7CD4451993F10354CB,
CA0A1584725D21237DBCD70A, CA0A1584725D21237DBCD70A,
63992CB3AC42F91A51135EAC, 63992CB3AC42F91A51135EAC,
8F98BACF97340868397BA4BB, 8F98BACF97340868397BA4BB,
......
...@@ -83,6 +83,11 @@ GenericEditor::GenericEditor (GenericProcessor* owner)//, FilterViewport* vp) ...@@ -83,6 +83,11 @@ GenericEditor::GenericEditor (GenericProcessor* owner)//, FilterViewport* vp)
backgroundColor = Colour(255, 89, 0);//Colour(int(1.0*255.0f),int(0.5*255.0f),int(0.0*255.0f)); backgroundColor = Colour(255, 89, 0);//Colour(int(1.0*255.0f),int(0.5*255.0f),int(0.0*255.0f));
paramsChannels.clear();
audioChannels.clear();
recordChannels.clear();
fadeIn(); fadeIn();
} }
...@@ -311,25 +316,25 @@ bool GenericEditor::checkChannelSelectors(Button* button) ...@@ -311,25 +316,25 @@ bool GenericEditor::checkChannelSelectors(Button* button)
if (button == channelSelectorButtons[n]) if (button == channelSelectorButtons[n])
{ {
String type; // String type;
if (audioButton->getToggleState()) if (audioButton->getToggleState())
{ {
audioChannels.set(n,button->getToggleState()); audioChannels.set(n,button->getToggleState());
type = "Audio "; //type = "Audio ";
} }
else if (recordButton->getToggleState()) else if (recordButton->getToggleState())
{ {
recordChannels.set(n,button->getToggleState()); recordChannels.set(n,button->getToggleState());
type = "Record "; //type = "Record ";
} }
else if (paramsButton->getToggleState()) else if (paramsButton->getToggleState())
{ {
paramsChannels.set(n,button->getToggleState()); paramsChannels.set(n,button->getToggleState());
type = "Params "; //type = "Params ";
} }
std::cout << type << "button " << n << " clicked." << std::endl; //std::cout << type << "button " << n << " clicked." << std::endl;
return true; return true;
} }
...@@ -401,6 +406,22 @@ bool GenericEditor::checkChannelSelectors(Button* button) ...@@ -401,6 +406,22 @@ bool GenericEditor::checkChannelSelectors(Button* button)
} }
Array<int> GenericEditor::getActiveChannels()
{
Array<int> chans;
for (int n = 0; n < paramsChannels.size(); n++)
{
if (paramsChannels[n])
{
chans.add(n);
}
}
return chans;
}
void GenericEditor::createRadioButtons(int x, int y, int w, StringArray values, const String& groupName) void GenericEditor::createRadioButtons(int x, int y, int w, StringArray values, const String& groupName)
{ {
int numButtons = values.size(); int numButtons = values.size();
......
...@@ -99,6 +99,8 @@ public: ...@@ -99,6 +99,8 @@ public:
bool checkDrawerButton(Button* button); bool checkDrawerButton(Button* button);
bool checkChannelSelectors(Button* button); bool checkChannelSelectors(Button* button);
Array<int> getActiveChannels();
private: private:
......
...@@ -55,9 +55,22 @@ SignalGeneratorEditor::~SignalGeneratorEditor() ...@@ -55,9 +55,22 @@ SignalGeneratorEditor::~SignalGeneratorEditor()
void SignalGeneratorEditor::sliderValueChanged (Slider* slider) void SignalGeneratorEditor::sliderValueChanged (Slider* slider)
{ {
if (slider == amplitudeSlider) Array<int> chans = getActiveChannels();
getAudioProcessor()->setParameter(0,slider->getValue());
else //std::cout << chans.size() << " channels selected." << std::endl;
getAudioProcessor()->setParameter(1,slider->getValue());
GenericProcessor* p = (GenericProcessor*) getAudioProcessor();
for (int n = 0; n < chans.size(); n++) {
p->setCurrentChannel(chans[n]);
if (slider == amplitudeSlider)
p->setParameter(0,slider->getValue());
else
p->setParameter(1,slider->getValue());
}
} }
\ No newline at end of file
...@@ -26,7 +26,7 @@ ...@@ -26,7 +26,7 @@
GenericProcessor::GenericProcessor(const String& name_) : name(name_), GenericProcessor::GenericProcessor(const String& name_) : name(name_),
sourceNode(0), destNode(0), editor(0), isEnabled(true), saveOrder(-1), loadOrder(-1), sourceNode(0), destNode(0), editor(0), isEnabled(true), saveOrder(-1), loadOrder(-1),
nextAvailableChannel(0), wasConnected(false) nextAvailableChannel(0), wasConnected(false), currentChannel(-1)
{ {
...@@ -81,7 +81,7 @@ int GenericProcessor::getDefaultNumOutputs() ...@@ -81,7 +81,7 @@ int GenericProcessor::getDefaultNumOutputs()
{ {
if (!isSink()) if (!isSink())
{ {
return 16; return 10;
} else { } else {
return 0; return 0;
} }
...@@ -294,6 +294,13 @@ void GenericProcessor::updateSettings() ...@@ -294,6 +294,13 @@ void GenericProcessor::updateSettings()
setPlayConfigDetails(getNumInputs(), getNumOutputs(), 44100.0, 128); setPlayConfigDetails(getNumInputs(), getNumOutputs(), 44100.0, 128);
updateParameters();
}
void GenericProcessor::updateParameters()
{
} }
......
...@@ -137,7 +137,10 @@ public: ...@@ -137,7 +137,10 @@ public:
virtual int getNextChannel(bool); virtual int getNextChannel(bool);
virtual void resetConnections(); virtual void resetConnections();
virtual void updateSettings(); virtual void updateSettings(); // updates sample rate and number of channels
virtual void updateParameters(); // called in updateSettings() to update params
virtual void setCurrentChannel(int chan) {currentChannel = chan;}
int getNodeId() {return nodeId;} int getNodeId() {return nodeId;}
void setNodeId(int id) {nodeId = id;} void setNodeId(int id) {nodeId = id;}
...@@ -188,6 +191,8 @@ public: ...@@ -188,6 +191,8 @@ public:
int saveOrder; int saveOrder;
int loadOrder; int loadOrder;
int currentChannel;
// Getting and setting: // Getting and setting:
......
...@@ -29,15 +29,12 @@ ...@@ -29,15 +29,12 @@
SignalGenerator::SignalGenerator() SignalGenerator::SignalGenerator()
: GenericProcessor("Signal Generator"), : GenericProcessor("Signal Generator"),
frequency(10.0), defaultFrequency(10.0),
sampleRate (44100.0), defaultAmplitude (0.02f)
currentPhase (0.0),
phasePerSample (0.0),
amplitude (0.02f)
{ {
setNumOutputs(16); setNumOutputs(10);
setNumInputs(0); setNumInputs(0);
...@@ -73,25 +70,44 @@ AudioProcessorEditor* SignalGenerator::createEditor( ) ...@@ -73,25 +70,44 @@ AudioProcessorEditor* SignalGenerator::createEditor( )
return ed; return ed;
} }
void SignalGenerator::updateParameters()
{
std::cout << "Signal generator updating parameters" << std::endl;
frequencies.clear();
amplitudes.clear();
currentPhase.clear();
phasePerSample.clear();
for (int n = 0; n < getNumOutputs(); n++)
{
frequencies.add(defaultFrequency*n);
amplitudes.add(defaultAmplitude);
currentPhase.add(0);
phasePerSample.add(double_Pi * 2.0 / (getSampleRate() / frequencies[n]));
}
}
void SignalGenerator::setParameter (int parameterIndex, float newValue) void SignalGenerator::setParameter (int parameterIndex, float newValue)
{ {
//std::cout << "Message received." << std::endl; //std::cout << "Message received." << std::endl;
if (parameterIndex == 0) if (currentChannel > -1) {
amplitude = newValue; if (parameterIndex == 0) {
else amplitudes.set(currentChannel,newValue);
frequency = newValue; } else {
frequencies.set(currentChannel,newValue);
phasePerSample = double_Pi * 2.0 / (sampleRate / frequency); phasePerSample.set(currentChannel, double_Pi * 2.0 / (sampleRate / frequencies[currentChannel]));
}
}
} }
bool SignalGenerator::enable () { bool SignalGenerator::enable () {
phasePerSample = double_Pi * 2.0 / (getSampleRate() / frequency);
std::cout << "Signal generator received enable signal." << std::endl; std::cout << "Signal generator received enable signal." << std::endl;
return true; return true;
} }
...@@ -112,11 +128,13 @@ void SignalGenerator::process(AudioSampleBuffer &buffer, ...@@ -112,11 +128,13 @@ void SignalGenerator::process(AudioSampleBuffer &buffer,
for (int i = 0; i < nSamps; ++i) for (int i = 0; i < nSamps; ++i)
{ {
const float sample = amplitude * (float) std::sin (currentPhase); for (int j = buffer.getNumChannels(); --j >= 0;) {
currentPhase += phasePerSample;
const float sample = amplitudes[j] * (float) std::sin (currentPhase[j]);
currentPhase.set(j,currentPhase[j] + phasePerSample[j]);
for (int j = buffer.getNumChannels(); --j >= 0;) // dereference pointer to one of the buffer's samples
// dereference pointer to one of the buffer's samples
*buffer.getSampleData (j, i) = sample; *buffer.getSampleData (j, i) = sample;
}
} }
} }
...@@ -61,11 +61,17 @@ public: ...@@ -61,11 +61,17 @@ public:
bool isSource() {return true;} bool isSource() {return true;}
void updateParameters();
private: private:
double frequency, sampleRate; double defaultFrequency;
double currentPhase, phasePerSample; double defaultAmplitude;
float amplitude;
Array<double> frequencies;
Array<double> amplitudes;
Array<double> currentPhase;
Array<double> phasePerSample;
JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SignalGenerator); JUCE_DECLARE_NON_COPYABLE_WITH_LEAK_DETECTOR (SignalGenerator);
......
...@@ -12,7 +12,7 @@ ...@@ -12,7 +12,7 @@
<XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK" <XCODE_MAC targetFolder="Builds/MacOSX" vstFolder="~/SDKs/vstsdk2.4" rtasFolder="~/SDKs/PT_80_SDK"
juceFolder="JuceLibraryCode" extraLinkerFlags="-lftdi -lftgl"/> juceFolder="JuceLibraryCode" extraLinkerFlags="-lftdi -lftgl"/>
<LINUX_MAKE targetFolder="Builds/Linux" vstFolder="~/SDKs/vstsdk2.4" juceFolder="JuceLibraryCode" <LINUX_MAKE targetFolder="Builds/Linux" vstFolder="~/SDKs/vstsdk2.4" juceFolder="JuceLibraryCode"
extraLinkerFlags="-lftdi -lftgl" extraCompilerFlags="-D__STDC_LIMIT_MACROS"/> extraLinkerFlags="-lftdi -lftgl" extraCompilerFlags="-export-dynamic"/>
</EXPORTFORMATS> </EXPORTFORMATS>
<CONFIGURATIONS> <CONFIGURATIONS>
<CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="open-ephys" <CONFIGURATION name="Debug" isDebug="1" optimisation="1" targetName="open-ephys"
...@@ -74,6 +74,7 @@ ...@@ -74,6 +74,7 @@
</GROUP> </GROUP>
</GROUP> </GROUP>
<GROUP id="ZMfWAFj" name="Source"> <GROUP id="ZMfWAFj" name="Source">
<GROUP id="C4YiLUg" name="Plugins"/>
<FILE id="AXFRUPT" name="AccessClass.cpp" compile="1" resource="0" <FILE id="AXFRUPT" name="AccessClass.cpp" compile="1" resource="0"
file="Source/AccessClass.cpp"/> file="Source/AccessClass.cpp"/>
<FILE id="2ViPrE" name="AccessClass.h" compile="0" resource="0" file="Source/AccessClass.h"/> <FILE id="2ViPrE" name="AccessClass.h" compile="0" resource="0" file="Source/AccessClass.h"/>
......
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment