// g++ -Iflac/include makenoise.cpp flac/lib/libFLAC++.a flac/lib/libFLAC.a -o makenoise // g++ -Iflac/include makenoise.cpp flac/lib/libFLAC++.a flac/lib/libFLAC.a -o makenoise; ./makenoise; open flacout.flac #include #include #include #include #include #include "FLAC++/metadata.h" #include "FLAC++/encoder.h" using namespace std; #define FS (48000) const double ampscl = 48000; int main(int argc, const char * argv[]) { vector data_l, data_r; size_t nsamps = 5*FS; data_l.resize(nsamps); data_r.resize(nsamps); double amp = ampscl; for(int j = 0; j < nsamps; ++j) { double t = (double)j/FS; double t2pi = t*M_PI*2.0; data_l[j] = (sin(t2pi*1e3)*amp + sin(t2pi*1.2e3)*amp)*sin(t2pi*(t2pi*12)); data_r[j] = 0;//data_l[j]; } FLAC::Encoder::File enc; bool ok = true; ok &= enc.set_verify(true); ok &= enc.set_compression_level(5); ok &= enc.set_channels(2); ok &= enc.set_bits_per_sample(24); ok &= enc.set_sample_rate(FS); ok &= enc.set_total_samples_estimate(data_l.size()*2); if(!ok) { cout << "Error: couldn't configure encoder" << endl; return EXIT_FAILURE; } FLAC__StreamEncoderInitStatus init_status = enc.init("flacout.flac"); if(init_status != FLAC__STREAM_ENCODER_INIT_STATUS_OK) { cout << "Error: couldn't init encoder" << endl; return EXIT_FAILURE; } FLAC__int32 * pcmData[2]; pcmData[0] = &data_l[0]; pcmData[1] = &data_r[0]; if(!enc.process(pcmData, nsamps)) { cout << "Error while encoding" << endl; } enc.finish(); return EXIT_SUCCESS; }