#include #include #include #include #include using namespace std; struct Note { double freq; // Hz double duration; // seconds }; // Write 44-byte WAV header void write_wav_header(ofstream &out, int sample_rate, int num_samples) { int byte_rate = sample_rate * 2; // 16-bit mono int block_align = 2; // 16-bit mono int subchunk2_size = num_samples * 2; out.write("RIFF", 4); int chunk_size = 36 + subchunk2_size; out.write((char*)&chunk_size, 4); out.write("WAVE", 4); out.write("fmt ", 4); int subchunk1_size = 16; short audio_format = 1; short num_channels = 1; short bits_per_sample = 16; out.write((char*)&subchunk1_size, 4); out.write((char*)&audio_format, 2); out.write((char*)&num_channels, 2); out.write((char*)&sample_rate, 4); out.write((char*)&byte_rate, 4); out.write((char*)&block_align, 2); out.write((char*)&bits_per_sample, 2); out.write("data", 4); out.write((char*)&subchunk2_size, 4); } int main() { const int sample_rate = 44100; // FULL “Stand By Me” bassline pattern (looped) vector bass = { {41.20, 0.50}, {41.20, 0.50}, // E {61.74, 0.50}, {61.74, 0.50}, // B {55.00, 0.50}, {55.00, 0.50}, // A {41.20, 0.50}, {41.20, 0.50} // E }; // Repeat pattern 4 times (typical intro) vector song; for (int i = 0; i < 4; i++) for (auto &n : bass) song.push_back(n); // Count samples int total_samples = 0; for (auto &n : song) total_samples += (int)(n.duration * sample_rate); ofstream out("standbyme.wav", ios::binary); write_wav_header(out, sample_rate, total_samples); // Generate audio for (auto &n : song) { int ns = (int)(n.duration * sample_rate); double step = 2 * M_PI * n.freq / sample_rate; for (int i = 0; i < ns; i++) { short sample = (short)(30000 * sin(i * step)); out.write((char*)&sample, 2); } } out.close(); cout << "Created standbyme.wav successfully.\n"; return EXIT_SUCCESS; }