static void ShowFormat(WaveFile& wave, bool details = true) { cout << "Format: " << wave.GetFormatType() << (wave.IsCompressed()? " (compressed)" : " (PCM)") << endl << "Channels: " << wave.GetNumChannels() << endl << "Sample rate: " << wave.GetSampleRate() << endl << "Bytes per second: " << wave.GetBytesPerSecond() << endl << "Bytes per sample: " << wave.GetBytesPerSample() << endl << "Bits per channel: " << wave.GetBitsPerChannel() << endl << "Bytes: " << wave.GetDataLength() << endl << "Samples: " << wave.GetNumSamples() << endl << "Seconds: " << wave.GetNumSeconds() << endl; if(wave.GetFile()) cout << "File pointer: " << ftell(wave.GetFile()) << endl; else cout << "File pointer: null" << endl; if (details) { string type, value; if (wave.GetFirstExtraItem(type, value)) { cout << "Extra data:" << endl; do { cout << " " << type << ": " << value << endl; } while (wave.GetNextExtraItem(type, value)); } wave.ResetToStart(); } pause(); }
int main(int , char **) { WaveFile wf; wf.SetupFormat(); if (!wf.OpenWrite("A440.wav")) { cout << "Can't open for writing: " << wf.GetError(); return 1; } const dataLength = 1 /*sec*/ * wf.GetSampleRate(); // in samples float alpha = 0; for (int i = 0; i < dataLength; i++) { wf.WriteSample(sin(alpha) / 2); alpha += 2 * M_PI * frequency / wf.GetSampleRate(); } return 0; }