Feat: add Wave class for single cycle waveform and make Wavetable proper

Refs: #2
pull/5/head
rkcf 2023-02-26 04:27:46 -06:00
parent 3cc6970596
commit 4a274f4618
1 changed files with 38 additions and 24 deletions

View File

@ -11,21 +11,42 @@ static const uint32_t DEFAULT_SAMPLE_RATE = 44100; // 44.1 kHz sampling rate
static const uint8_t DEFAULT_BIT_DEPTH = 12;
static const uint16_t DEFAULT_N_SAMPLES = 1024;
class Wavetable
/* Single cycle wave object with lookup table */
class Wave
{
private:
uint_fast16_t m_id {}; // Unique ID number of wavetable
std::string m_name {}; // String name of wavetable
uint16_t m_id{}; // Unique ID number of wave
std::array<float_t, DEFAULT_N_SAMPLES> m_table; // table data
public:
Wavetable(uint16_t id, std::string name)
: m_id{ id }, m_name{ name }, m_table {}
Wave(uint16_t id) : m_id{id}, m_table{}
{
// Do nothing
}
uint16_t id() {
return m_id;
}
void set_table(std::array<float_t, DEFAULT_N_SAMPLES> table) {
m_table = table;
}
void print_head() {
for (uint8_t i = 0; i < 10; i++) {
std::cout << m_table[i] << '\n';
}
}
};
/* Table of single cycle wave lookup tables */
class Wavetable
{
private:
uint16_t m_id {}; // Unique ID number of wavetable
std::string m_name {}; // String name of wavetable
std::array<Wave, DEFAULT_N_SAMPLES> m_table; // table data
public:
std::string name()
{
std::string id_str = std::to_string(m_id);
@ -34,17 +55,10 @@ public:
return id_str;
}
void set_table(std::array<float_t, DEFAULT_N_SAMPLES> table)
void set_table(std::array<Wave, DEFAULT_N_SAMPLES> table)
{
m_table = table;
}
void print_head()
{
for(uint8_t i = 0; i < 10; i++) {
std::cout << m_table[i] << '\n';
}
}
};
/* Logs a message */
@ -53,11 +67,11 @@ static void log(std::string message)
std::cout << "wtpp: " << message << '\n';
}
/* Generates basic sine Wavetable object */
static Wavetable gen_sin_tbl()
/* Generates basic sine Wave object */
static Wave gen_sine()
{
// Make the new Wavetable object
Wavetable table = {0, "sine"};
Wave wave = {0};
// Make an array to hold our values
std::array<float_t, DEFAULT_N_SAMPLES> sin_vals {};
// Make a place to store calculated value
@ -70,10 +84,10 @@ static Wavetable gen_sin_tbl()
sin_vals[i] = val;
}
// Store values in new Wavetable.table
table.set_table(sin_vals);
wave.set_table(sin_vals);
// Return the completed Wavetable object
return table;
return wave;
}
int main()
@ -81,12 +95,12 @@ int main()
// Generate wavetables
log("Generating wavetables");
// Generate sine table
Wavetable sin_tbl = gen_sin_tbl();
log(sin_tbl.name());
// Generate sine wave cycle object
Wave sin_wave = gen_sine();
log(std::to_string(sin_wave.id()));
log("Printing head of sine table");
sin_tbl.print_head();
sin_wave.print_head();
return 0;
}