Skip to content

Commit d910aed

Browse files
Merge pull request electro-smith#103 from andrewikenberry/delayline_template
Delayline template
2 parents e73e01a + 5d02eb6 commit d910aed

File tree

5 files changed

+63
-85
lines changed

5 files changed

+63
-85
lines changed

daisysp/Makefile

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -6,7 +6,6 @@ adenv \
66
crossfade \
77
dcblock \
88
decimator \
9-
delayline \
109
line \
1110
nlfilt \
1211
metro \
@@ -17,6 +16,7 @@ reverbsc \
1716
svf \
1817

1918
# certain modules are only header files:
19+
# delayline
2020
# whitenoise
2121

2222
# TODO: Consider making this work for PCs as well?

daisysp/daisysp.h

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,7 +34,6 @@ typedef struct {
3434
#include "modules/crossfade.h"
3535
#include "modules/dcblock.h"
3636
#include "modules/decimator.h"
37-
#include "modules/delayline.h"
3837
#include "modules/line.h"
3938
#include "modules/nlfilt.h"
4039
#include "modules/metro.h"
@@ -44,6 +43,7 @@ typedef struct {
4443
#ifdef __cplusplus
4544
}
4645

46+
#include "modules/delayline.h"
4747
#include "modules/reverbsc.h"
4848
#include "modules/whitenoise.h"
4949
#include "modules/svf.h"

daisysp/daisysp.vcxproj

Lines changed: 0 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -95,7 +95,6 @@
9595
<ClCompile Include="modules\crossfade.c" />
9696
<ClCompile Include="modules\dcblock.c" />
9797
<ClCompile Include="modules\decimator.cpp" />
98-
<ClCompile Include="modules\delayline.c" />
9998
<ClCompile Include="modules\line.cpp" />
10099
<ClCompile Include="modules\metro.c" />
101100
<ClCompile Include="modules\nlfilt.c" />

daisysp/modules/delayline.c

Lines changed: 0 additions & 56 deletions
This file was deleted.

daisysp/modules/delayline.h

Lines changed: 61 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -1,36 +1,71 @@
11
// Simple Delay Line
2+
//
23
// November 2019
3-
// By: shensley
44
//
5-
// User manages their own buffer in order to provide
6-
// flexibility without dynamic memory.
5+
// Converted to Template December 2019
6+
//
7+
// By: shensley
78
//
8-
// TODO: add some sort of type flexibility -- for now its just floats.
99
#pragma once
1010
#ifndef DSY_DELAY_H
1111
#define DSY_DELAY_H
12-
#ifdef __cplusplus
13-
extern "C" {
14-
#endif
15-
#include <stdint.h>
1612
#include <stdlib.h>
17-
18-
typedef struct
13+
#include <stdint.h>
14+
namespace daisysp
1915
{
20-
uint8_t interp;
21-
size_t write_ptr, delay, size;
22-
float delay_frac, delay_sec, sr;
23-
float *line;
24-
}dsy_delayline;
25-
26-
void dsy_delay_init(dsy_delayline *p, float* buff, size_t buff_size, float samplerate);
27-
void dsy_delay_reset(dsy_delayline *p);
28-
void dsy_delay_set_delay_samps(dsy_delayline *p, size_t size);
29-
void dsy_delay_set_delay_sec(dsy_delayline *p, float sec);
30-
void dsy_delay_line_write(dsy_delayline *p, float val);
31-
float dsy_delay_line_read(dsy_delayline *p);
32-
33-
#ifdef __cplusplus
34-
}
35-
#endif
16+
template<typename T, size_t max_size>
17+
class delayline
18+
{
19+
public:
20+
delayline() { }
21+
~delayline() { }
22+
23+
void init()
24+
{
25+
reset();
26+
}
27+
28+
void reset() {
29+
for (size_t i = 0; i < max_size; i++)
30+
{
31+
line_[i] = T(0);
32+
}
33+
write_ptr_ = 0;
34+
delay_ = 1;
35+
}
36+
37+
inline void set_delay(size_t delay)
38+
{
39+
frac_ = 0.0f;
40+
delay_ = delay < max_size ? delay : max_size - 1;
41+
}
42+
43+
inline void set_delay(float delay)
44+
{
45+
int32_t int_delay = static_cast<int32_t>(delay);
46+
frac_ = delay - static_cast<float>(int_delay);
47+
delay_ = int_delay < max_size ? int_delay : max_size - 1;
48+
}
49+
50+
inline void write(const T sample)
51+
{
52+
line_[write_ptr_] = sample;
53+
write_ptr_ = (write_ptr_ - 1 + max_size) % max_size;
54+
}
55+
56+
inline const T read() const
57+
{
58+
T a = line_[(write_ptr_ + delay_) % max_size];
59+
T b = line_[(write_ptr_ + delay_ + 1) % max_size];
60+
return a + (b - a) * frac_;
61+
}
62+
63+
private:
64+
float frac_;
65+
size_t write_ptr_;
66+
size_t delay_;
67+
T line_[max_size];
68+
69+
};
70+
} // namespace daisysp
3671
#endif

0 commit comments

Comments
 (0)