|
10 | 10 |
|
11 | 11 | class TalkboxDSP : public SoundpipeDSPBase { |
12 | 12 | private: |
13 | | - sp_talkbox *talkbox; |
| 13 | + sp_talkbox *talkboxL; |
| 14 | + sp_talkbox *talkboxR; |
14 | 15 | ParameterRamper qualityRamp{1.0}; |
15 | 16 |
|
16 | 17 | public: |
|
21 | 22 |
|
22 | 23 | void init(int channelCount, double sampleRate) override { |
23 | 24 | SoundpipeDSPBase::init(channelCount, sampleRate); |
24 | | - sp_talkbox_create(&talkbox); |
25 | | - sp_talkbox_init(sp, talkbox); |
| 25 | + sp_talkbox_create(&talkboxL); |
| 26 | + sp_talkbox_init(sp, talkboxL); |
| 27 | + sp_talkbox_create(&talkboxR); |
| 28 | + sp_talkbox_init(sp, talkboxR); |
26 | 29 | } |
27 | 30 |
|
28 | 31 | void deinit() override { |
29 | 32 | SoundpipeDSPBase::deinit(); |
30 | | - sp_talkbox_destroy(&talkbox); |
| 33 | + sp_talkbox_destroy(&talkboxL); |
| 34 | + sp_talkbox_destroy(&talkboxR); |
31 | 35 | } |
32 | 36 |
|
33 | 37 | void reset() override { |
34 | 38 | SoundpipeDSPBase::reset(); |
35 | 39 | if (!isInitialized) return; |
36 | | - sp_talkbox_init(sp, talkbox); |
| 40 | + sp_talkbox_init(sp, talkboxL); |
| 41 | + sp_talkbox_init(sp, talkboxR); |
37 | 42 | } |
38 | 43 |
|
39 | 44 | void process(FrameRange range) override { |
40 | 45 | for (int i : range) { |
41 | | - float sourceIn = inputSample(0, i); // source input (first input stream) |
42 | | - float excitationIn = input2Sample(0, i); // excitation input (second input stream) |
43 | | - float outSample; |
| 46 | + float sourceInL = inputSample(0, i); // modulator input left |
| 47 | + float sourceInR = inputSample(1, i); // modulator input right |
| 48 | + float excitationInL = input2Sample(0, i); // carrier input left |
| 49 | + float excitationInR = input2Sample(1, i); // carrier input right |
| 50 | + float outSampleL; |
| 51 | + float outSampleR; |
44 | 52 |
|
45 | | - talkbox->quality = qualityRamp.getAndStep(); |
46 | | - |
47 | | - sp_talkbox_compute(sp, talkbox, &sourceIn, &excitationIn, &outSample); |
| 53 | + float quality = qualityRamp.getAndStep(); |
| 54 | + talkboxL->quality = quality; |
| 55 | + talkboxR->quality = quality; |
48 | 56 |
|
49 | | - outputSample(0, i) = outSample; |
| 57 | + sp_talkbox_compute(sp, talkboxL, &sourceInL, &excitationInL, &outSampleL); |
| 58 | + sp_talkbox_compute(sp, talkboxR, &sourceInR, &excitationInR, &outSampleR); |
| 59 | + |
| 60 | + outputSample(0, i) = outSampleL; |
| 61 | + outputSample(1, i) = outSampleR; |
50 | 62 | } |
51 | 63 | } |
52 | 64 | }; |
|
0 commit comments