Skip to content

Commit 530b0f0

Browse files
committed
Merge branch 'master' of https://github.com/pingdynasty/OwlProgram into web-audio
2 parents beb2e43 + f491a72 commit 530b0f0

7 files changed

Lines changed: 268 additions & 49 deletions

File tree

Makefile

Lines changed: 38 additions & 25 deletions
Original file line numberDiff line numberDiff line change
@@ -1,21 +1,45 @@
1-
BUILDROOT = .
1+
BUILDROOT ?= $(CURDIR)
22

33
ifndef CONFIG
44
CONFIG=Release
55
endif
66

77
ifeq ($(CONFIG),Debug)
88
CPPFLAGS = -g -Wall -Wcpp -Wunused-function -DDEBUG -DUSE_FULL_ASSERT
9-
ASFLAGS = -g
9+
ASFLAGS = -g
1010
endif
1111

1212
ifeq ($(CONFIG),Release)
1313
CPPFLAGS = -O2
1414
endif
1515

16+
DEPS = $(BUILD)/patch.cpp $(BUILD)/patch.h
17+
18+
ifdef FAUST
19+
# options for FAUST compilation
20+
PATCHNAME ?= $(FAUST)
21+
PATCHCLASS ?= $(PATCHNAME)Patch
22+
PATCHFILE ?= $(PATCHNAME)Patch.hpp
23+
DEPS += $(BUILD)/$(PATCHFILE)
24+
else ifdef HEAVY
25+
# options for Heavy PD compilation
26+
PATCHNAME ?= $(HEAVY)
27+
PATCHCLASS ?= HeavyPatch
28+
PATCHFILE ?= HeavyPatch.hpp
29+
DEPS += $(HEAVYDIR)/Heavy_owl.h
30+
HEAVYFILE ?= $(HEAVY).pd
31+
HEAVYNAME ?= owl
32+
HEAVYDIR ?= $(BUILD)/HeavySource
33+
CPPFLAGS += -I$(HEAVYDIR)
34+
CPPFLAGS += -D__unix__ -DHV_SIMD_NONE
35+
vpath %.c $(HEAVYDIR)
36+
else
37+
# options for C++ compilation
1638
PATCHNAME ?= "Template"
1739
PATCHCLASS ?= $(PATCHNAME)Patch
1840
PATCHFILE ?= $(PATCHNAME)Patch.hpp
41+
endif
42+
1943
PATCHIN ?= 2
2044
PATCHOUT ?= 2
2145
SLOT ?= 0
@@ -31,7 +55,7 @@ CPPFLAGS += -fpie
3155
CPPFLAGS += -fdata-sections
3256
CPPFLAGS += -ffunction-sections
3357
# CPPFLAGS += -munaligned-access
34-
CPPFLAGS += -mno-unaligned-access
58+
CPPFLAGS += -mno-unaligned-access
3559
# CPPFLAGS += -mlong-calls
3660

3761
# CPPFLAGS += -mpic-data-is-text-relative
@@ -78,14 +102,6 @@ vpath %.c $(PATCHSOURCE)
78102
vpath %.s $(PATCHSOURCE)
79103
vpath %.c Libraries/syscalls
80104

81-
# Heavy
82-
HEAVYFILE ?= $(PATCHNAME).pd
83-
HEAVYNAME = owl
84-
HEAVYDIR = $(BUILD)/HeavySource
85-
CPPFLAGS += -I$(HEAVYDIR)
86-
CPPFLAGS += -D__unix__ -DHV_SIMD_NONE
87-
vpath %.c $(HEAVYDIR)
88-
89105
# emscripten
90106
EMCC = emcc
91107
EMCCFLAGS ?= -fno-rtti -fno-exceptions # -std=c++11
@@ -111,7 +127,8 @@ all: patch
111127
include $(BUILDROOT)/libs.mk
112128
include $(BUILDROOT)/common.mk
113129

114-
.PHONY: .FORCE clean realclean run store faust heavy online docs
130+
.PHONY: .FORCE clean realclean run store online docs
131+
115132
.FORCE:
116133
@echo Building patch $(PATCHNAME)
117134

@@ -121,14 +138,14 @@ $(BUILD)/patch.cpp: .FORCE
121138
$(BUILD)/patch.h: .FORCE
122139
@echo "#include \"$(PATCHFILE)\"" > $(BUILD)/patch.h
123140

124-
$(BUILD)/PatchProgram.o: $(SOURCE)/PatchProgram.cpp $(BUILD)/patch.h $(BUILD)/patch.cpp
125-
@$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(SOURCE)/PatchProgram.cpp -o $@
126-
@$(CXX) -MM -MT"$@" $(CPPFLAGS) $(CXXFLAGS) $(SOURCE)/PatchProgram.cpp > $(@:.o=.d)
127-
128141
$(BUILD)/startup.o: .FORCE
129142
@echo '.string "'$(PATCHNAME)'"' > $(BUILD)/progname.s
130143
@$(CC) -c $(CPPFLAGS) $(CFLAGS) $(SOURCE)/startup.s -o $@
131144

145+
$(BUILD)/PatchProgram.o: $(SOURCE)/PatchProgram.cpp $(DEPS)
146+
@$(CXX) -c $(CPPFLAGS) $(CXXFLAGS) $(SOURCE)/PatchProgram.cpp -o $@
147+
@$(CXX) -MM -MT"$@" $(CPPFLAGS) $(CXXFLAGS) $(SOURCE)/PatchProgram.cpp > $(@:.o=.d)
148+
132149
$(BUILD)/patch.elf: $(PATCH_OBJS) $(OBJS) $(LDSCRIPT)
133150
@$(LD) $(LDFLAGS) -o $@ $(PATCH_OBJS) $(OBJS) $(LDLIBS)
134151

@@ -142,7 +159,7 @@ $(BUILD)/%.syx: $(BUILD)/%.bin
142159
@$(FIRMWARESENDER) -q -in $< -save $@
143160

144161
$(BUILD)/%Patch.hpp: $(PATCHSOURCE)/%.dsp
145-
@cd $(BUILD) && faust2owl ../$<
162+
@cd $(BUILD) && faust2owl $<
146163

147164
size: $(BUILD)/patch.elf $(BUILD)/patch.bin
148165
@$(SIZE) $(BUILD)/patch.elf
@@ -165,25 +182,21 @@ online:
165182
@echo "$(ONLINE_INCLUDES)" > $(BUILD)/patch.h
166183
@echo "$(ONLINE_REGISTER)" > $(BUILD)/patch.cpp
167184
@echo '.string "OnlineCompiler"' > $(BUILD)/progname.s
168-
@make $(BUILD)/patch.syx
185+
@$(MAKE) $(BUILD)/patch.syx
169186
@cp $(BUILD)/patch.syx $(BUILD)/online.syx
170187

171-
web: $(EMCC_SRC) $(BUILD)/patch.h $(BUILD)/patch.cpp
188+
web: $(EMCC_SRC) $(DEPS)
172189
@$(EMCC) $(EMCCFLAGS) $(EMCC_SRC) -o $(BUILD)/patch.js
173190

174191
$(HEAVYDIR)/_main.pd: $(PATCHSOURCE)/$(HEAVYFILE)
175192
@mkdir -p $(BUILD)/HeavySource
176193
@cp -f $(PATCHSOURCE)/*.pd $(BUILD)/HeavySource
177194
@cp -f $< $@
178195

179-
$(HEAVYDIR)/Heavy_owl.h: $(BUILD)/HeavySource/_main.pd
196+
$(HEAVYDIR)/Heavy_owl.h: $(HEAVYDIR)/_main.pd
180197
@python ./Tools/Heavy/uploader.py $(BUILD)/HeavySource -g c -n $(HEAVYNAME) -o $(HEAVYDIR)
181198

182199
heavy: $(HEAVYDIR)/Heavy_owl.h
183200
@$(eval HEAVY_SRC = $(wildcard $(HEAVYDIR)/*.c) )
184-
@$(eval PATCH_OBJS += $(addprefix $(BUILD)/, $(notdir $(HEAVY_SRC:.c=.o))) )
185-
@$(eval PATCHCLASS ?= HeavyPatch)
186-
@$(eval PATCHFILE ?= HeavyPatch.hpp)
201+
@$(eval PATCH_OBJS += $(addprefix $(HEAVYDIR)/, $(notdir $(HEAVY_SRC:.c=.o))))
187202
@make $(PATCH_OBJS)
188-
189-
faust: $(BUILD)/$(PATCHFILE)

README.md

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -43,7 +43,7 @@ Then open `WebSource/patch.html`
4343
## Building FAUST patches
4444
To compile and run a FAUST patch
4545
* copy .dsp file and dependencies into `PatchSource`, e.g. `LowShelf.dsp`
46-
* `make PATCHNAME=LowShelf faust run`
46+
* `make FAUST=LowShelf run`
4747

4848
Note: assign OWL parameters with slider metadata: `[OWL:PARAMETER_A]`, `[OWL:PARAMETER_B]` et c. For example:
4949
```gain = vslider("gain[OWL:PARAMETER_C]", 1,0,1,0.1);```
@@ -59,7 +59,7 @@ To compile and run a PD patch, with C code generated by Enzien Audio:
5959
Or, using the Heavy uploader (recommended):
6060
* ensure you have a Heavy project called `owl`
6161
* put your PD patch file (e.g. `Foo.pd`) into `PatchSource`
62-
* `make HEAVYFILE=Foo.pd heavy run`
62+
* `make HEAVY=Foo heavy run`
6363
* enter username and credentials when prompted (first time only)
6464

6565
Note: assign OWL parameters with PD receivers called `Channel-A`, `Channel-B`, et c.

Source/MemoryBuffer.hpp

Lines changed: 2 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -13,9 +13,6 @@ class MemoryBuffer : public AudioBuffer {
1313
void clear(){
1414
memset(buffer, 0, size*channels*sizeof(float));
1515
}
16-
// float* getSamples(int channel){
17-
// return buffer+channel*size;
18-
// }
1916
FloatArray getSamples(int channel){
2017
return FloatArray(buffer+channel*size, size);
2118
}
@@ -30,13 +27,13 @@ class MemoryBuffer : public AudioBuffer {
3027
class ManagedMemoryBuffer : public MemoryBuffer {
3128
public:
3229
ManagedMemoryBuffer(int ch, int sz) :
33-
MemoryBuffer((float*)malloc(ch*sz*sizeof(float)), ch, sz) {
30+
MemoryBuffer(new float[ch*sz], ch, sz) {
3431
if(buffer == NULL){
3532
channels = 0;
3633
size = 0;
3734
}
3835
}
3936
~ManagedMemoryBuffer(){
40-
free(buffer);
37+
delete buffer;
4138
}
4239
};

Source/PatchProcessor.cpp

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -1,5 +1,4 @@
11
#include "PatchProcessor.h"
2-
#include "PatchRegistry.h"
32
#include "MemoryBuffer.hpp"
43
#include "device.h"
54
#include <string.h>
@@ -42,20 +41,28 @@ float PatchProcessor::getParameterValue(PatchParameterId pid){
4241
return 0.0f;
4342
}
4443

44+
#define SMOOTH_HYSTERESIS
45+
#define SMOOTH_FACTOR 3
4546
void PatchProcessor::setParameterValues(uint16_t *params){
4647
/* Implements an exponential moving average (leaky integrator) to smooth ADC values
4748
* y(n) = (1-alpha)*y(n-1) + alpha*y(n)
4849
* with alpha=0.5, fs=48k, bs=128, then w0 ~= 18hz
4950
*/
5051
if(getProgramVector()->hardware_version == OWL_MODULAR_HARDWARE){
5152
for(int i=0; i<NOF_ADC_VALUES; ++i)
52-
if(abs(params[i]-parameterValues[i]) > 8)
53+
#ifdef SMOOTH_HYSTERESIS
54+
if(abs(params[i]-parameterValues[i]) > 7)
55+
#endif
5356
// invert parameter values for OWL Modular
54-
parameterValues[i] = (parameterValues[i] + 0x1000 - params[i]) >> 1;
57+
parameterValues[i] = (parameterValues[i]*SMOOTH_FACTOR + 0x1000 - params[i])/(SMOOTH_FACTOR+1);
5558
}else{
5659
for(int i=0; i<NOF_ADC_VALUES; ++i)
57-
if(abs(params[i]-parameterValues[i]) > 16)
60+
#ifdef SMOOTH_HYSTERESIS
61+
if(abs(params[i]-parameterValues[i]) > 7)
62+
#endif
5863
// 16 = half a midi step (4096/128=32)
59-
parameterValues[i] = (parameterValues[i] + params[i]) >> 1;
64+
parameterValues[i] = (parameterValues[i]*SMOOTH_FACTOR + params[i])/(SMOOTH_FACTOR+1);
6065
}
66+
// for(int i=NOF_ADC_VALUES; i<NOF_PARAMETERS; ++i)
67+
// // todo!
6168
}

0 commit comments

Comments
 (0)