summaryrefslogtreecommitdiff
path: root/src
diff options
context:
space:
mode:
Diffstat (limited to 'src')
-rw-r--r--src/main.cc17
1 files changed, 11 insertions, 6 deletions
diff --git a/src/main.cc b/src/main.cc
index 9d7c41b..4f99230 100644
--- a/src/main.cc
+++ b/src/main.cc
@@ -43,8 +43,8 @@ int register_spec_asset(AssetId id) {
return synth_register_spectrogram(&spec);
}
-static float g_spec_buffer_a[SPEC_FRAMES * DCT_SIZE];
-static float g_spec_buffer_b[SPEC_FRAMES * DCT_SIZE];
+static float *g_spec_buffer_a[SPEC_FRAMES * DCT_SIZE] = { 0 };
+static float *g_spec_buffer_b[SPEC_FRAMES * DCT_SIZE] = { 0 };
// Global storage for the melody to ensure it persists
std::vector<float> g_melody_data;
@@ -110,8 +110,12 @@ int generate_melody() {
return synth_register_spectrogram(&spec);
}
-void generate_tone(float *buffer, float freq) {
- memset(buffer, 0, SPEC_FRAMES * DCT_SIZE * sizeof(float));
+float* generate_tone(float *buffer, float freq) {
+ if (buffer == nullptr) {
+ buffer = (float*)calloc(SPEC_FRAMES * DCT_SIZE, sizeof(float));
+ } else {
+ memset(buffer, 0, SPEC_FRAMES * DCT_SIZE * sizeof(float));
+ }
for (int frame = 0; frame < SPEC_FRAMES; ++frame) {
float *spec_frame = buffer + frame * DCT_SIZE;
float amplitude = 1000. * powf(1.0f - (float)frame / SPEC_FRAMES, 2.0f);
@@ -121,6 +125,7 @@ void generate_tone(float *buffer, float freq) {
spec_frame[bin] = amplitude;
}
}
+ return buffer;
}
int main(int argc, char **argv) {
@@ -149,8 +154,8 @@ int main(int argc, char **argv) {
int hihat_id = register_spec_asset(AssetId::ASSET_HIHAT_1);
// Still keep the dynamic tone for bass
- generate_tone(g_spec_buffer_a, 110.0f); // A2
- generate_tone(g_spec_buffer_b, 110.0f);
+ const float* g_spec_buffer_a = generate_tone(nullptr, 110.0f); // A2
+ const float* g_spec_buffer_b = generate_tone(nullptr, 110.0f);
const Spectrogram bass_spec = {g_spec_buffer_a, g_spec_buffer_b, SPEC_FRAMES};
int bass_id = synth_register_spectrogram(&bass_spec);