audio/cpp/ WriteAWindowedSineWave
Back to SimpleExamples001.
#include <cmath>
#include <cstdint>
#include <vector>
#include <fstream>
#include <cstdio>
using std::sin;
constexpr double pi = 3.141592653589793238462643383279502884;
int main() {
// windowed sine -- use single cycle of sin^2 -- which is pi
double sr = 48000.0;
float len = 2.0f;
float freq = 440.0f;
double phase_per_sample = 2*pi*freq/sr;
double window_phase_per_sample = pi/(len*sr);
int nsamps = (int)(len*sr);
std::vector<float> data(nsamps, 0.0f);
std::printf("size: %ld, window_phase_per_sample: %lf\n",data.size(),window_phase_per_sample);
double mx = 0.0;
for(int i=0; i<nsamps; i++ ) {
double samp = sin(i*phase_per_sample);
double window = sin(i*window_phase_per_sample);
window *= window;
mx = window > mx ? window : mx;
data[i] = window * samp;
}
std::printf("Max window: %lf\n",mx);
std::fstream output_file;
output_file.open("output.pcm", std::ios::out | std::ios::binary );
output_file.write(reinterpret_cast<const char*>(data.data()),data.size()*sizeof(float));
output_file.close();
}