// Copyright 2013 Olivier Gillet. // // Author: Olivier Gillet (ol.gillet@gmail.com) // // This program is free software: you can redistribute it and/or modify // it under the terms of the GNU General Public License as published by // the Free Software Foundation, either version 3 of the License, or // (at your option) any later version. // This program is distributed in the hope that it will be useful, // but WITHOUT ANY WARRANTY; without even the implied warranty of // MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the // GNU General Public License for more details. // You should have received a copy of the GNU General Public License // along with this program. If not, see . #include #include #include #include #include "peaks/processors.h" using namespace peaks; using namespace stmlib; const uint32_t kSampleRate = 48000; void write_wav_header(FILE* fp, int num_samples, int num_channels) { uint32_t l; uint16_t s; fwrite("RIFF", 4, 1, fp); l = 36 + num_samples * 2 * num_channels; fwrite(&l, 4, 1, fp); fwrite("WAVE", 4, 1, fp); fwrite("fmt ", 4, 1, fp); l = 16; fwrite(&l, 4, 1, fp); s = 1; fwrite(&s, 2, 1, fp); s = num_channels; fwrite(&s, 2, 1, fp); l = kSampleRate; fwrite(&l, 4, 1, fp); l = static_cast(kSampleRate) * 2 * num_channels; fwrite(&l, 4, 1, fp); s = 2 * num_channels; fwrite(&s, 2, 1, fp); s = 16; fwrite(&s, 2, 1, fp); fwrite("data", 4, 1, fp); l = num_samples * 2 * num_channels; fwrite(&l, 4, 1, fp); } int main(void) { FILE* fp = fopen("peaks.wav", "wb"); write_wav_header(fp, kSampleRate * 10, 1); processors[0].Init(1); processors[0].set_control_mode(CONTROL_MODE_HALF); processors[0].set_function(PROCESSOR_FUNCTION_BASS_DRUM); processors[0].set_parameter(0, 60000); processors[0].set_parameter(1, 40000); uint32_t period = kSampleRate / 2; for (uint32_t i = 0; i < kSampleRate * 10 ; ++i) { uint16_t tri = i; tri = tri > 32767 ? 65535 - tri : tri; uint8_t control = 0; if (i % period < (period / 4)) { control |= CONTROL_GATE; } if (i % period == 0) { control |= CONTROL_GATE_RISING; } int16_t s = processors[0].Process(control); fwrite(&s, sizeof(s), 1, fp); processors[0].Buffer(); } }