summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
authorJohn Glover <j@johnglover.net>2012-07-03 17:27:12 +0100
committerJohn Glover <j@johnglover.net>2012-07-03 17:27:12 +0100
commit23a5f9888e4c28ff5273b16e984caff32caeac69 (patch)
treedc4111d13217b0e5cbf594a0dd167f5f8da9a703 /src
parent9d5c3da8942305461d42627d686abdeac7fba30c (diff)
downloadsimpl-23a5f9888e4c28ff5273b16e984caff32caeac69.tar.gz
simpl-23a5f9888e4c28ff5273b16e984caff32caeac69.tar.bz2
simpl-23a5f9888e4c28ff5273b16e984caff32caeac69.zip
[synthesis] Fix SMSSynthesis (was using Peak data instead of tracked Partials). Add test for harmonic synthesis using sum of sines.
Diffstat (limited to 'src')
-rw-r--r--src/simpl/synthesis.cpp13
1 files changed, 9 insertions, 4 deletions
diff --git a/src/simpl/synthesis.cpp b/src/simpl/synthesis.cpp
index 9dd1131..221e60e 100644
--- a/src/simpl/synthesis.cpp
+++ b/src/simpl/synthesis.cpp
@@ -125,10 +125,15 @@ void SMSSynthesis::det_synthesis_type(int new_det_synthesis_type) {
}
void SMSSynthesis::synth_frame(Frame* frame) {
- for(int i = 0; i < _data.nTracks; i++) {
- _data.pFSinAmp[i] = frame->peak(i)->amplitude;
- _data.pFSinFreq[i] = frame->peak(i)->frequency;
- _data.pFSinPha[i] = frame->peak(i)->phase;
+ int num_partials = _data.nTracks;
+ if(num_partials > frame->num_partials()) {
+ num_partials = frame->num_partials();
+ }
+
+ for(int i = 0; i < num_partials; i++) {
+ _data.pFSinAmp[i] = frame->partial(i)->amplitude;
+ _data.pFSinFreq[i] = frame->partial(i)->frequency;
+ _data.pFSinPha[i] = frame->partial(i)->phase;
}
sms_synthesize(&_data, frame->synth(), &_synth_params);