#include <iostream>
#include <pulse/simple.h>
#include <pulse/error.h>
#include <fstream>
int main() {
const char* fileName = "output.raw";
std::ofstream outFile(fileName, std::ios::binary);
pa_sample_spec sampleSpec;
sampleSpec.format = PA_SAMPLE_S16LE;
sampleSpec.rate = 44100;
sampleSpec.channels = 2;
pa_simple *pulseAudioSimple = nullptr;
int error;
pulseAudioSimple = pa_simple_new(NULL, "record_system_audio", PA_STREAM_RECORD, NULL, "record", &sampleSpec, NULL, NULL, &error);
if (!pulseAudioSimple) {
std::cerr << "Error: Could not create PulseAudio simple:" << pa_strerror(error) << std::endl;
return 1;
}
const size_t numSamples = 44100 * 10; // Record for 10 seconds
int16_t buffer[numSamples];
if (pa_simple_read(pulseAudioSimple, buffer, sizeof(buffer), &error) < 0) {
std::cerr << "Error: Could not read from PulseAudio: " << pa_strerror(error) << std::endl;
pa_simple_free(pulseAudioSimple);
return 1;
}
outFile.write(reinterpret_cast<char*>(buffer), sizeof(buffer));
pa_simple_free(pulseAudioSimple);
outFile.close();
std::cout << "System audio has been recorded successfully. Output saved to " << fileName << std::endl;
return 0;
}