templated sample data type

This commit is contained in:
Chris
2023-07-18 20:25:39 +02:00
parent 2830e56b12
commit 35a29b9c2f
7 changed files with 23 additions and 18 deletions

View File

@@ -5,6 +5,7 @@
#include <vector>
namespace trnr {
template <typename t_sample>
// Bandpass filter based on YBandpass by Chris Johnson
class ybandpass {
public:
@@ -70,7 +71,7 @@ public:
{
F = value;
}
void processblock(double** inputs, double** outputs, int blockSize)
void processblock(t_sample** inputs, t_sample** outputs, int blockSize)
{
double* in1 = inputs[0];
double* in2 = inputs[1];

View File

@@ -5,6 +5,7 @@
#include <vector>
namespace trnr {
template <typename t_sample>
// Highpass filter based on YHighpass by Chris Johnson
class yhighpass {
public:
@@ -70,7 +71,7 @@ public:
{
F = value;
}
void processblock(double** inputs, double** outputs, int blockSize)
void processblock(t_sample** inputs, t_sample** outputs, int blockSize)
{
double* in1 = inputs[0];
double* in2 = inputs[1];

View File

@@ -5,6 +5,7 @@
#include <vector>
namespace trnr {
template <typename t_sample>
// Lowpass filter based on YLowpass by Chris Johnson
class ylowpass {
public:
@@ -70,12 +71,12 @@ public:
{
F = value;
}
void processblock(double** inputs, double** outputs, int blockSize)
void processblock(t_sample** inputs, t_sample** outputs, int blockSize)
{
double* in1 = inputs[0];
double* in2 = inputs[1];
double* out1 = outputs[0];
double* out2 = outputs[1];
t_sample* in1 = inputs[0];
t_sample* in2 = inputs[1];
t_sample* out1 = outputs[0];
t_sample* out2 = outputs[1];
int inFramesToProcess = blockSize;
double overallscale = 1.0;

View File

@@ -4,6 +4,7 @@
#include <array>
#include <vector>
template <typename t_sample>
namespace trnr {
// Notch filter based on YNotch by Chris Johnson
class ynotch {
@@ -70,7 +71,7 @@ public:
{
F = value;
}
void processblock(double** inputs, double** outputs, int blockSize)
void processblock(t_sample** inputs, t_sample** outputs, int blockSize)
{
double* in1 = inputs[0];
double* in2 = inputs[1];

View File

@@ -5,6 +5,7 @@
#include "ynotch.h"
namespace trnr {
template <typename t_sample>
enum filter_types {
lowpass = 0,
@@ -75,7 +76,7 @@ public:
notch.set_mix(value);
}
void process_block(double** inputs, double** outputs, int block_size) {
void process_block(t_sample** inputs, t_sample** outputs, int block_size) {
switch (filter_type) {
case filter_types::lowpass:

View File

@@ -9,8 +9,8 @@ namespace trnr {
// a generic midi synth base class with sample accurate event handling.
// the templated type t_voice must derive from ivoice
template <typename t_voice>
class midi_synth : public voice_allocator<t_voice> {
template <typename t_voice, typename t_sample>
class midi_synth : public voice_allocator<t_voice, t_sample> {
public:
midi_synth(int _n_voices)
: m_voices_active { false }
@@ -22,10 +22,10 @@ public:
void set_samplerate_blocksize(double _samplerate, int _block_size)
{
m_block_size = _block_size;
voice_allocator<t_voice>::set_samplerate(_samplerate);
voice_allocator<t_voice, t_sample>::set_samplerate(_samplerate);
}
void process_block(double** _outputs, int _n_frames)
void process_block(t_sample** _outputs, int _n_frames)
{
// sample accurate event handling based on the iPlug2 synth by Oli Larkin
if (m_voices_active || !m_event_queue.empty()) {
@@ -48,18 +48,18 @@ public:
// send performance messages to the voice allocator
// message offset is relative to the start of this process_samples() block
event.offset -= start_index;
voice_allocator<t_voice>::add_event(event);
voice_allocator<t_voice, t_sample>::add_event(event);
m_event_queue.erase(m_event_queue.begin());
}
voice_allocator<t_voice>::process_samples(_outputs, start_index, block_size);
voice_allocator<t_voice, t_sample>::process_samples(_outputs, start_index, block_size);
samples_remaining -= block_size;
start_index += block_size;
}
m_voices_active = voice_allocator<t_voice>::voices_active();
m_voices_active = voice_allocator<t_voice, t_sample>::voices_active();
flush_event_queue(_n_frames);
} else {

View File

@@ -5,7 +5,7 @@
namespace trnr {
template <typename t_voice>
template <typename t_voice, typename t_sample>
class voice_allocator {
public:
std::vector<t_voice> voices;
@@ -49,7 +49,7 @@ public:
std::for_each(voices.begin(), voices.end(), f);
}
void process_samples(double** _outputs, int _start_index, int _block_size)
void process_samples(t_sample** _outputs, int _start_index, int _block_size)
{
for (int s = _start_index; s < _start_index + _block_size; s++) {