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();
}