#include #include #include #include #include #include #include #include #include #include #include #include #include "scope.h" // Pulse static const pa_sample_spec my_pa_spec = { .format = PA_SAMPLE_S16LE, .rate = 44100, .channels = 1 }; // audio buffer main_buffer_manager_class::main_buffer_manager_class() { my_read_main_buffer = NULL; } main_buffer_manager_class::~main_buffer_manager_class() { if (my_read_main_buffer != NULL) { free(my_read_main_buffer); } } Sint16 *main_buffer_manager_class::initial_preparation() { my_read_main_buffer = (Sint16 *)malloc ((sizeof(Sint16) * READ_BUFFER_SIZE)); if (my_read_main_buffer == NULL) { printf ("cannot allocate read buffer\n"); perror ("error is"); return NULL; } // Open pulse pulse_s = pa_simple_new(NULL,"scope sound", PA_STREAM_RECORD, NULL, "record", &my_pa_spec, NULL, NULL, &function_return); if (pulse_s == NULL) { printf("pa_simple_new() failed: %s\n", pa_strerror(function_return)); return NULL; } return my_read_main_buffer; } Sint16 *main_buffer_manager_class::read_main_buffer() { // grab the buffer from the audio device printf("about to grab sound\n"); if (pa_simple_read(pulse_s, (Uint8 *)my_read_main_buffer, (READ_BUFFER_SIZE * sizeof(Sint16)), &function_return) < 0) { printf("sound read failed %s\n", pa_strerror(function_return)); return NULL; } printf("just grabbed the buffer from device\n"); // Turn the volume down for (main_buffer_index = 0; main_buffer_index < READ_BUFFER_SIZE; main_buffer_index += 1) { main_buffer_hold = (Sint16)(*(my_read_main_buffer + main_buffer_index) * MAIN_VOLUME); *(my_read_main_buffer + main_buffer_index) = main_buffer_hold; } return my_read_main_buffer; }