From 7cc2f28241b5f9f21ee7c7d376acd340be75e705 Mon Sep 17 00:00:00 2001 From: Sheldon Lee Date: Thu, 10 Oct 2024 20:11:57 +0800 Subject: [PATCH] Initial commit --- .astylerc | 3 + .editorconfig | 5 + .gitignore | 5 + FiraCode-Regular.ttf | Bin 0 -> 289624 bytes example-test-code/main.c.bak | 517 ++++++++++++++++++++++++++++++++++ example-test-code/main.c.bak1 | 64 +++++ example-test-code/main.c.bak2 | 98 +++++++ example-test-code/temp.cpp | 85 ++++++ log.c | 29 ++ log.h | 14 + main.c | 510 +++++++++++++++++++++++++++++++++ makefile | 29 ++ 12 files changed, 1359 insertions(+) create mode 100644 .astylerc create mode 100644 .editorconfig create mode 100644 .gitignore create mode 100644 FiraCode-Regular.ttf create mode 100644 example-test-code/main.c.bak create mode 100644 example-test-code/main.c.bak1 create mode 100644 example-test-code/main.c.bak2 create mode 100644 example-test-code/temp.cpp create mode 100644 log.c create mode 100644 log.h create mode 100644 main.c create mode 100644 makefile diff --git a/.astylerc b/.astylerc new file mode 100644 index 0000000..528f93c --- /dev/null +++ b/.astylerc @@ -0,0 +1,3 @@ +style=linux +indent=tab +align-pointer=type diff --git a/.editorconfig b/.editorconfig new file mode 100644 index 0000000..f7fcb2a --- /dev/null +++ b/.editorconfig @@ -0,0 +1,5 @@ +root = true + +[*.c] +indent_style = tab +indent_size = 8 diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..05d8217 --- /dev/null +++ b/.gitignore @@ -0,0 +1,5 @@ +obj/ +main +*.out + +logfile.txt diff --git a/FiraCode-Regular.ttf b/FiraCode-Regular.ttf new file mode 100644 index 0000000000000000000000000000000000000000..bd736851948d2d76483b434113e2d9ee35554446 GIT binary patch literal 289624 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͹< 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 JVW8mO{{dG|E=m9Z literal 0 HcmV?d00001 diff --git a/example-test-code/main.c.bak b/example-test-code/main.c.bak new file mode 100644 index 0000000..f4c2ba0 --- /dev/null +++ b/example-test-code/main.c.bak @@ -0,0 +1,517 @@ +#include +#include +#include +#include +#include + +#include "log.h" + +const int SCREEN_WIDTH = 640; +const int SCREEN_HEIGHT = 480; + +const int MAX_RECORDING_DEVICES = 10; +const int MAX_RECORDING_SECONDS = 1; +const int RECORDING_BUFFER_SECONDS = MAX_RECORDING_SECONDS + 1; +/* + * Application + */ +int init(); +void destroy(); +int select_device(SDL_KeyboardEvent* key_event, int max_index); + +typedef enum { + SELECTING_DEVICE, + RECORDING, + RECORDED, + PLAYBACK, +} application_state; + +typedef struct { + application_state application_state; + int device_index; + int recording_device_id; + int playback_device_id; +} state; + +void application_state_to_string(application_state state, char* string); +/* + * Visual + */ +SDL_Window* window = NULL; +SDL_Renderer* renderer = NULL; +TTF_Font* global_font = NULL; + +typedef struct { + SDL_Texture* texture; + int width; + int height; +} text_texture; + +int text_texture_init(text_texture* text_texture); +int text_texture_load(text_texture* text_texture, char* string); +int text_texture_render(text_texture* text_texture, int x, int y); +int text_texture_free(text_texture* text_texture); +/* + * Audio + */ +int num_devices = 0; + +SDL_AudioSpec* recording_spec; +SDL_AudioSpec* playback_spec; +SDL_AudioSpec* received_recording_spec; +SDL_AudioSpec* received_playback_spec; +Uint8* recording_buffer = NULL; +unsigned int recording_buffer_size = 0; +unsigned int recording_buffer_position = 0; +unsigned int recording_buffer_position_max = 0; + +SDL_AudioDeviceID audio_recording_init(int index, void* userdata); +SDL_AudioDeviceID audio_playback_init(void* userdata); +void audio_buffer_destroy(); +void audio_recording_callback( void* userdata, Uint8* stream, int len ); +void audio_playback_callback( void* userdata, Uint8* stream, int len ); + +void handle_input(SDL_Event* event, state* state); +void handle_task(state* state); +int main(int argc, char* argv[]) +{ + if (!init()) return 1; + + num_devices = SDL_GetNumAudioDevices(1); + printf("Num audio devices: %i\n", num_devices); + char char_buffer[64]; + char default_fmt[] = "Device selected: %i"; + + state state = { + SELECTING_DEVICE, + -1, + 0, + 0, + }; + + text_texture display_text_texture; + text_texture_init(&display_text_texture); + sprintf(char_buffer, default_fmt, state.device_index); + text_texture_load(&display_text_texture, char_buffer); + + text_texture device_textures[num_devices]; + for (int i = 0; i < num_devices; i++) { + text_texture_init(&device_textures[i]); + sprintf(char_buffer, "%i: %s", i, SDL_GetAudioDeviceName(i, 1)); + text_texture_load(&device_textures[i], char_buffer); + } + + text_texture state_text_texture; + text_texture_init(&state_text_texture); + application_state_to_string(state.application_state, char_buffer); + text_texture_load(&state_text_texture, char_buffer); + + SDL_Event event; + int running = 1; + while (running) { + while (SDL_PollEvent(&event)) { + SDL_Keycode keysym = event.key.keysym.sym; + switch (event.type) { + + case SDL_QUIT: + running = 0; + break; + + case SDL_KEYDOWN: + handle_input(&event, &state); + + sprintf(char_buffer, default_fmt, state.device_index); + text_texture_load(&display_text_texture, char_buffer); + application_state_to_string(state.application_state, char_buffer); + text_texture_load(&state_text_texture, char_buffer); + break; + + } + } + + handle_task(&state); + + // Clear the screen + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + // Render + text_texture_render(&display_text_texture, 0, 0); + + if (state.application_state == SELECTING_DEVICE) { + int text_y_offset_step = display_text_texture.height * 2; + int text_y_offset = text_y_offset_step; + for (int i = 0; i < num_devices; i++) { + text_texture_render(&device_textures[i], 0, text_y_offset); + text_y_offset += text_y_offset_step; + } + } + + text_texture_render(&state_text_texture, 0, SCREEN_HEIGHT - state_text_texture.height); + + // Update the screen + SDL_RenderPresent(renderer); + } + + text_texture_free(&display_text_texture); + destroy(); + + return 0; +} + +void handle_input(SDL_Event* event, state* state) +{ + SDL_Keycode keysym = event->key.keysym.sym; + switch (state->application_state) { + + case SELECTING_DEVICE: + switch (keysym) { + case SDLK_y: + case SDLK_RETURN: + if (state->device_index == -1 || !state->recording_device_id) break; + recording_buffer_position = 0; + SDL_PauseAudioDevice(state->recording_device_id, 0); + /*SDL_UnlockAudioDevice(state->recording_device_id);*/ + state->application_state = RECORDING; + break; + case SDLK_ESCAPE: + state->device_index = -1; + SDL_CloseAudioDevice(state->recording_device_id); + break; + } + int device_index_new = select_device(&event->key, num_devices); + if (device_index_new == -1) break; + if (state->device_index != -1 && device_index_new == -1) break; + state->device_index = device_index_new; + SDL_CloseAudioDevice(state->recording_device_id); + state->recording_device_id = audio_recording_init(state->device_index, NULL); + break; + + case RECORDING: + switch (keysym) { + case SDLK_y: + SDL_PauseAudioDevice(state->recording_device_id, 0); + break; + case SDLK_q: + case SDLK_ESCAPE: + SDL_PauseAudioDevice(state->recording_device_id, 1); + audio_buffer_destroy(); + state->application_state = SELECTING_DEVICE; + break; + } + break; + + case RECORDED: + switch (keysym) { + case SDLK_y: + case SDLK_RETURN: + if (!state->playback_device_id) { + state->playback_device_id = audio_playback_init(NULL); + break; + } + recording_buffer_position = 0; + SDL_PauseAudioDevice(state->playback_device_id, 0); + /*SDL_UnlockAudioDevice(state->playback_device_id);*/ + state->application_state = PLAYBACK; + break; + case SDLK_q: + case SDLK_ESCAPE: + audio_buffer_destroy(); + state->application_state = SELECTING_DEVICE; + break; + } + break; + + case PLAYBACK: + switch (keysym) { + case SDLK_q: + case SDLK_ESCAPE: + state->application_state = RECORDED; + break; + } + break; + + } +} + +void handle_task(state* state) +{ + switch (state->application_state) { + + case SELECTING_DEVICE: + break; + + case RECORDING: + SDL_LockAudioDevice(state->recording_device_id); + /*printf("buf pos: %u\n", recording_buffer_position);*/ + if (recording_buffer_position >= recording_buffer_position_max) { + SDL_UnlockAudioDevice(state->recording_device_id); + SDL_PauseAudioDevice(state->recording_device_id, 1); + SDL_CloseAudioDevice(state->recording_device_id); + state->application_state = RECORDED; + break; + } + SDL_UnlockAudioDevice(state->recording_device_id); + break; + + case RECORDED: + break; + + case PLAYBACK: + SDL_LockAudioDevice(state->playback_device_id); + if (recording_buffer_position >= recording_buffer_position_max) { + SDL_UnlockAudioDevice(state->playback_device_id); + SDL_PauseAudioDevice(state->playback_device_id, 1); + SDL_CloseAudioDevice(state->playback_device_id); + state->application_state = RECORDED; + break; + } + SDL_UnlockAudioDevice(state->playback_device_id); + break; + + } +} + +int init() +{ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { + printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError()); + return 0; + } + + if (TTF_Init() == -1) { + printf("TTF could not initialize! TTF Error: %s\n", TTF_GetError()); + return 0; + } + + window = SDL_CreateWindow("SDL record", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, + SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + + if (!window) { + printf("Window could not be created! SDL Error: %s\n", SDL_GetError()); + return 0; + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if (!renderer) { + printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError()); + return 0; + } + + global_font = TTF_OpenFont("FiraCode-Regular.ttf", 24); + if (!global_font) { + printf("Failed to load font! TTF_Error: %s\n", TTF_GetError()); + return 0; + } + + recording_spec = malloc(sizeof(SDL_AudioSpec)); + received_recording_spec = malloc(sizeof(SDL_AudioSpec)); + playback_spec = malloc(sizeof(SDL_AudioSpec)); + received_playback_spec = malloc(sizeof(SDL_AudioSpec)); + return 1; +} + +void destroy() +{ + free(recording_spec); + free(received_recording_spec); + free(playback_spec); + free(received_playback_spec); + free(recording_buffer); + + TTF_CloseFont(global_font); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + TTF_Quit(); + SDL_Quit(); +} + +int select_device(SDL_KeyboardEvent* key_event, int max_index) +{ + SDL_Keycode keycode = key_event->keysym.sym; + SDL_Keycode mod = key_event->keysym.mod; + + int keycode_is_num = (keycode >= SDLK_0 && keycode <= SDLK_9); + int no_mod = (mod == 0); + if (!keycode_is_num || !no_mod) { + printf("Not number: %c <%u>\n", keycode, keycode); + return -1; + } else { + printf("Is number: %c <%u>\n", keycode, keycode); + } + + int index = keycode - SDLK_0; + if (index >= max_index) return -1; + + return index; +} + +void application_state_to_string(application_state state, char* string) +{ + switch (state) { + case SELECTING_DEVICE: + sprintf(string, "Selecting Device [0-9] -> [y/RET], "); + break; + case RECORDING: + sprintf(string, "Recording"); + break; + case RECORDED: + sprintf(string, "Recorded"); + break; + case PLAYBACK: + sprintf(string, "Playing"); + break; + } +} + +int text_texture_init(text_texture* text_texture) +{ + text_texture->texture = NULL; + text_texture->width = 0; + text_texture->height = 0; + return 1; +} + +int text_texture_load(text_texture* text_texture, char* string) +{ + if (text_texture->texture) { + SDL_DestroyTexture(text_texture->texture); + text_texture->texture = NULL; + } + + SDL_Color text_color = { 255, 255, 255 }; + SDL_Surface* text_surface = TTF_RenderText_Solid(global_font, string, text_color); + if (!text_surface) { + printf("Unable to render text surface! TTF_Error: %s\n", TTF_GetError()); + return 0; + } + + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, text_surface); + if (!texture) { + printf("Unable to create texture from rendered text! SDL_Error: %s\n", SDL_GetError()); + return 0; + } + + text_texture->texture = SDL_CreateTextureFromSurface(renderer, text_surface); + text_texture->width = text_surface->w; + text_texture->height = text_surface->h; + + SDL_FreeSurface(text_surface); + return 1; +} + +int text_texture_render(text_texture* text_texture, int x, int y) +{ + if (!text_texture) { + printf("text_texture uninitialized"); + return 0; + } + if (!text_texture->texture) { + printf("text_texture->texture uninitialized"); + return 0; + } + + int quad_width = text_texture->width; + int quad_height = text_texture->height; + SDL_Rect render_quad = { x, y, quad_width, quad_height }; + SDL_RenderCopy(renderer, text_texture->texture, NULL, &render_quad); + + return 1; +} + +int text_texture_free(text_texture* text_texture) +{ + if (!text_texture->texture) { + return 0; + } + SDL_DestroyTexture(text_texture->texture); + return 1; +} + +SDL_AudioDeviceID audio_recording_init(int index, void* userdata) +{ + memset(recording_spec, 0, sizeof(SDL_AudioSpec)); + memset(received_recording_spec, 0, sizeof(SDL_AudioSpec)); + recording_spec->freq = 44100; + recording_spec->format = AUDIO_F32; + recording_spec->channels = 2; + recording_spec->samples = 4096; + recording_spec->callback = audio_recording_callback; + recording_spec->userdata = userdata; + + SDL_AudioDeviceID device_id = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(index, 1), 1, recording_spec, received_recording_spec, SDL_AUDIO_ALLOW_FORMAT_CHANGE); + printf("Recording Device: %s\n", SDL_GetAudioDeviceName(index, 1)); + if (!device_id) { + printf("Failed to open recording device! SDL Error: %s", SDL_GetError()); + return 0; + } + + unsigned int bytes_per_sample = received_recording_spec->channels * (SDL_AUDIO_BITSIZE(received_recording_spec->format)/8); + unsigned int bytes_per_second = received_recording_spec->freq * bytes_per_sample; + recording_buffer_size = RECORDING_BUFFER_SECONDS * bytes_per_second; + recording_buffer_position_max = MAX_RECORDING_SECONDS * bytes_per_second; + + recording_buffer = malloc(recording_buffer_size); + memset(recording_buffer, 0, recording_buffer_size); + + return device_id; +} + +SDL_AudioDeviceID audio_playback_init(void* userdata) +{ + if (!recording_buffer) { + printf("Audio buffer not initialized"); + return 0; + } + + memset(playback_spec, 0, sizeof(SDL_AudioSpec)); + memset(received_playback_spec, 0, sizeof(SDL_AudioSpec)); + playback_spec->freq = 44100; + playback_spec->format = AUDIO_F32; + playback_spec->channels = 2; + playback_spec->samples = 4096; + playback_spec->callback = audio_playback_callback; + playback_spec->callback = userdata; + + SDL_AudioDeviceID device_id = SDL_OpenAudioDevice(NULL, 0, playback_spec, received_playback_spec, SDL_AUDIO_ALLOW_FORMAT_CHANGE); + if (!device_id) { + printf("Failed to open playback device! SDL Error: %s", SDL_GetError()); + return 0; + } + + return device_id; +} + +int audio_device_stop(int device_id) +{ + SDL_PauseAudioDevice(device_id, 1); + SDL_CloseAudioDevice(device_id); + return 1; +} + +void audio_buffer_destroy() +{ + free(recording_buffer); + recording_buffer = NULL; + recording_buffer_size = 0; + recording_buffer_position = 0; +} + +void audio_recording_callback(void* userdata, Uint8* stream, int len) +{ + memcpy(&recording_buffer[recording_buffer_position], stream, len); + recording_buffer_position += len; + char string[64]; + sprintf(string, "Record pos: %u %u", recording_buffer_position, len); + log_message(LOG_INFO, string); +} + +void audio_playback_callback(void* userdata, Uint8* stream, int len) +{ + memcpy(stream, &recording_buffer[recording_buffer_position], len); + recording_buffer_position += len; + char string[64]; + sprintf(string, "Playback pos: %u %u", recording_buffer_position, len); + log_message(LOG_INFO, string); +} diff --git a/example-test-code/main.c.bak1 b/example-test-code/main.c.bak1 new file mode 100644 index 0000000..14b10a3 --- /dev/null +++ b/example-test-code/main.c.bak1 @@ -0,0 +1,64 @@ +#include +#include +#include +#include + +#include "log.h" + +SDL_AudioSpec* desiredSpec; +void audio_callback(void* userdata, Uint8* stream, int len) +{ + // Fill the audio buffer with data + char string[64]; + sprintf(string, "stream: %u len: %u\n", stream, len); + printf(string, "stream: %u len: %u\n", stream, len); + log_message(LOG_INFO, string); +} + +int main(int argc, char* argv[]) +{ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + // Handle error + } + + desiredSpec = malloc(sizeof(SDL_AudioSpec)); + memset(desiredSpec, 0, sizeof(SDL_AudioSpec)); + desiredSpec->freq = 44100; // Sample rate + desiredSpec->format = AUDIO_F32; // Audio format + desiredSpec->channels = 2; + desiredSpec->samples = 4096; // Buffer size + desiredSpec->callback = audio_callback; // Set the callback + + SDL_AudioDeviceID audioDevice = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(2, 1), 1, desiredSpec, NULL, SDL_AUDIO_ALLOW_FORMAT_CHANGE); + if (SDL_GetError()[0] != '\0') { + printf("SDL Error : %s\n", SDL_GetError()); + } + printf("Name: %s\n", SDL_GetAudioDeviceName(2, 1)); + if (audioDevice == 0) { + // Handle error + } + + // Start audio playback + SDL_PauseAudioDevice(audioDevice, 0); + if (SDL_GetError()[0] != '\0') { + printf("SDL Error : %s\n", SDL_GetError()); + } + + SDL_Event event; + int running = 1; + while (running) { + while (SDL_PollEvent(&event)) { + SDL_Keycode keysym = event.key.keysym.sym; + switch (event.type) { + case SDL_QUIT: + running = 0; + break; + } + } + } + + SDL_CloseAudioDevice(audioDevice); + SDL_Quit(); + return 0; +} + diff --git a/example-test-code/main.c.bak2 b/example-test-code/main.c.bak2 new file mode 100644 index 0000000..90a8bbb --- /dev/null +++ b/example-test-code/main.c.bak2 @@ -0,0 +1,98 @@ +#include +#include +#include + +typedef struct { + Uint8* data; + int current_pos; + int max_length; +} BufferType; + +SDL_AudioDeviceID dev; + +void audio_callback(void* userdata, Uint8* stream, int len) +{ + BufferType* buffer = (BufferType*)userdata; + + printf("callback: %u %u\n", *stream, len); + int space_left = buffer->max_length - buffer->current_pos; + if (space_left <= 0) { + // Buffer is full; stop the device + SDL_PauseAudioDevice(dev, 1); + printf("Buffer full, stopping recording.\n"); + return; + } + + if (len > space_left) { + len = space_left; + } + + memcpy(buffer->data + buffer->current_pos, stream, len); + buffer->current_pos += len; +} + +int main(int argc, char* argv[]) +{ + if (SDL_Init(SDL_INIT_AUDIO) < 0) { + fprintf(stderr, "Failed to initialize SDL: %s\n", SDL_GetError()); + return 1; + } + + BufferType audio_buffer; + audio_buffer.max_length = 44100 * 5 * sizeof(float) * 2; // 5 seconds of stereo float audio + audio_buffer.data = (Uint8*)malloc(audio_buffer.max_length); + if (audio_buffer.data == NULL) { + fprintf(stderr, "Failed to allocate audio buffer\n"); + SDL_Quit(); + return 1; + } + audio_buffer.current_pos = 0; + + SDL_AudioSpec desired_spec, obtained_spec; + SDL_zero(desired_spec); + desired_spec.freq = 44100; + desired_spec.format = AUDIO_F32SYS; + desired_spec.channels = 2; + desired_spec.samples = 512; + desired_spec.callback = audio_callback; + desired_spec.userdata = &audio_buffer; + + dev = SDL_OpenAudioDevice(NULL, 1, &desired_spec, &obtained_spec, 0); + if (dev == 0) { + fprintf(stderr, "Failed to open audio device: %s\n", SDL_GetError()); + free(audio_buffer.data); + SDL_Quit(); + return 1; + } + + printf("Audio device opened successfully.\n"); + printf("Obtained Spec:\n"); + printf(" Frequency: %d\n", obtained_spec.freq); + printf(" Format: 0x%X\n", obtained_spec.format); + printf(" Channels: %d\n", obtained_spec.channels); + printf(" Samples: %d\n", obtained_spec.samples); + + SDL_PauseAudioDevice(dev, 0); // Start recording + printf("Recording started.\n"); + + SDL_Event event; + while (audio_buffer.current_pos < audio_buffer.max_length) { + while (SDL_PollEvent(&event)) { + if (event.type == SDL_QUIT) { + printf("Quit event received.\n"); + goto cleanup; + } + } + SDL_Delay(100); + } + + printf("Recording complete. Total bytes recorded: %d\n", audio_buffer.current_pos); + +cleanup: + SDL_PauseAudioDevice(dev, 1); // Stop recording + SDL_CloseAudioDevice(dev); + free(audio_buffer.data); + SDL_Quit(); + + return 0; +} diff --git a/example-test-code/temp.cpp b/example-test-code/temp.cpp new file mode 100644 index 0000000..170c812 --- /dev/null +++ b/example-test-code/temp.cpp @@ -0,0 +1,85 @@ +#include +#include +#include +#include + +using namespace std; + +SDL_AudioSpec want, have; +SDL_AudioDeviceID player; + +void SDLCALL callback_player( void* userdata, Uint8* stream, int len) +{ + + for (int i = 0; i < len; i ++) { + auto value = Uint8(sin(i) * 1000); + stream[i] = value ; + } +} + +auto setupAudioPlayer() +{ + + printf("### Device Player ###\n"); + int num = SDL_GetNumAudioDevices(false); + printf("num: %d\n", num); + for (int i = 0; i < num; i++) { + auto name = SDL_GetAudioDeviceName(i, false); + printf("%d: %s\n", i, name); + } + + int deviceIndex; + printf("select device to player audio: "); + scanf("%d", &deviceIndex); + printf("\n"); + + SDL_memset(&want, 0, sizeof(want)); /* or SDL_zero(want) */ + want.freq = 44100; + want.format = AUDIO_F32; + want.channels = 2; + want.samples = 1024; + want.callback = callback_player; // you wrote this function elsewhere. + //want.size = 512; + + SDL_AudioDeviceID player = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(deviceIndex, false), SDL_FALSE, &want, &have, SDL_AUDIO_ALLOW_FORMAT_CHANGE); + if (player == 0) { + printf("Failed to open player device! SDL Error: %s", SDL_GetError()); + + } else { + + printf("freq %d \nformat %d \nchannels %d \nsamples %d\n", have.freq, have.format, have.channels, have.samples); + } + + return player; +} + +void destroyAudio() +{ + + SDL_CloseAudioDevice(player); + SDL_Quit(); +} + +int main(int n, char** args) +{ + + int err = SDL_Init(SDL_INIT_AUDIO); + printf("error: %d", err); + if (err < 0) { + printf("erorr: %d\n", err); + printf("Failed to init audio! SDL Error: %s", SDL_GetError()); + } + //recorder = setupAudioRecorder(); + auto player = setupAudioPlayer(); + printf("player: %d\n", player); + //loadWave(); + + printf("playing\n"); + //SDL_PauseAudioDevice(recorder, 0); + SDL_PauseAudioDevice(player, 0); + //SDL_SemWait(sem); + SDL_Delay(10000); + destroyAudio(); + //system("pause"); + return 0; +} diff --git a/log.c b/log.c new file mode 100644 index 0000000..6312a28 --- /dev/null +++ b/log.c @@ -0,0 +1,29 @@ +// Chat GPT code +#include "log.h" + +const char* get_current_time() +{ + static char buffer[20]; + time_t now = time(NULL); + struct tm* tm_info = localtime(&now); + strftime(buffer, sizeof(buffer), "%Y-%m-%d %H:%M:%S", tm_info); + return buffer; +} + +void log_message(LogLevel level, const char* message) +{ + const char* level_strings[] = { "INFO", "WARNING", "ERROR" }; + + // Open the log file in append mode + FILE* log_file = fopen("logfile.txt", "a"); + if (log_file == NULL) { + fprintf(stderr, "Could not open log file for writing.\n"); + return; + } + + // Write the log message to the file + fprintf(log_file, "[%s] [%s] %s\n", get_current_time(), level_strings[level], message); + + // Close the log file + fclose(log_file); +} diff --git a/log.h b/log.h new file mode 100644 index 0000000..f8dad15 --- /dev/null +++ b/log.h @@ -0,0 +1,14 @@ +// Chat GPT code +#include +#include +#include + +typedef enum { + LOG_INFO, + LOG_WARNING, + LOG_ERROR +} LogLevel; + +const char* get_current_time(); + +void log_message(LogLevel level, const char* message); diff --git a/main.c b/main.c new file mode 100644 index 0000000..e025d94 --- /dev/null +++ b/main.c @@ -0,0 +1,510 @@ +#include +#include +#include +#include +#include + +#include "log.h" + +const int SCREEN_WIDTH = 640; +const int SCREEN_HEIGHT = 480; + +const int MAX_RECORDING_DEVICES = 10; +const int MAX_RECORDING_SECONDS = 1; +const int RECORDING_BUFFER_SECONDS = MAX_RECORDING_SECONDS + 1; +/* + * Application + */ +int init(); +void destroy(); +int select_device(SDL_KeyboardEvent* key_event, int max_index); + +typedef enum { + SELECTING_DEVICE, + RECORDING, + RECORDED, + PLAYBACK, +} application_state; + +typedef struct { + application_state application_state; + int device_index; + int recording_device_id; + int playback_device_id; +} state; + +void application_state_to_string(application_state state, char* string); +/* + * Visual + */ +SDL_Window* window = NULL; +SDL_Renderer* renderer = NULL; +TTF_Font* global_font = NULL; + +typedef struct { + SDL_Texture* texture; + int width; + int height; +} text_texture; + +int text_texture_init(text_texture* text_texture); +int text_texture_load(text_texture* text_texture, char* string); +int text_texture_render(text_texture* text_texture, int x, int y); +int text_texture_free(text_texture* text_texture); +/* + * Audio + */ +int num_devices = 0; + +SDL_AudioSpec recording_spec; +SDL_AudioSpec playback_spec; +SDL_AudioSpec received_recording_spec; +SDL_AudioSpec received_playback_spec; +Uint8* recording_buffer = NULL; +unsigned int recording_buffer_size = 0; +unsigned int recording_buffer_position = 0; +unsigned int recording_buffer_position_max = 0; + +SDL_AudioDeviceID audio_recording_init(int index, void* userdata); +SDL_AudioDeviceID audio_playback_init(void* userdata); +void audio_buffer_destroy(); +void audio_recording_callback( void* userdata, Uint8* stream, int len ); +void audio_playback_callback( void* userdata, Uint8* stream, int len ); + +void handle_input(SDL_Event* event, state* state); +void handle_task(state* state); +int main(int argc, char* argv[]) +{ + if (!init()) return 1; + + num_devices = SDL_GetNumAudioDevices(1); + printf("Num audio devices: %i\n", num_devices); + char char_buffer[64]; + char default_fmt[] = "Device selected: %i"; + + state state = { + SELECTING_DEVICE, + -1, + 0, + 0, + }; + + text_texture display_text_texture; + text_texture_init(&display_text_texture); + sprintf(char_buffer, default_fmt, state.device_index); + text_texture_load(&display_text_texture, char_buffer); + + text_texture device_textures[num_devices]; + for (int i = 0; i < num_devices; i++) { + text_texture_init(&device_textures[i]); + sprintf(char_buffer, "%i: %s", i, SDL_GetAudioDeviceName(i, 1)); + text_texture_load(&device_textures[i], char_buffer); + } + + text_texture state_text_texture; + text_texture_init(&state_text_texture); + application_state_to_string(state.application_state, char_buffer); + text_texture_load(&state_text_texture, char_buffer); + + SDL_Event event; + int running = 1; + while (running) { + while (SDL_PollEvent(&event)) { + SDL_Keycode keysym = event.key.keysym.sym; + switch (event.type) { + + case SDL_QUIT: + running = 0; + break; + + case SDL_KEYDOWN: + handle_input(&event, &state); + break; + + } + } + + handle_task(&state); + + sprintf(char_buffer, default_fmt, state.device_index); + text_texture_load(&display_text_texture, char_buffer); + application_state_to_string(state.application_state, char_buffer); + text_texture_load(&state_text_texture, char_buffer); + + // Clear the screen + SDL_SetRenderDrawColor(renderer, 0, 0, 0, 255); + SDL_RenderClear(renderer); + + // Render + text_texture_render(&display_text_texture, 0, 0); + + if (state.application_state == SELECTING_DEVICE) { + int text_y_offset_step = display_text_texture.height * 2; + int text_y_offset = text_y_offset_step; + for (int i = 0; i < num_devices; i++) { + text_texture_render(&device_textures[i], 0, text_y_offset); + text_y_offset += text_y_offset_step; + } + } + + text_texture_render(&state_text_texture, 0, SCREEN_HEIGHT - state_text_texture.height); + + // Update the screen + SDL_RenderPresent(renderer); + } + + text_texture_free(&display_text_texture); + for (int i = 0; i < num_devices; i++) { + text_texture_free(&device_textures[i]); + } + destroy(); + + return 0; +} + +void handle_input(SDL_Event* event, state* state) +{ + SDL_Keycode keysym = event->key.keysym.sym; + switch (state->application_state) { + + case SELECTING_DEVICE: + switch (keysym) { + case SDLK_y: + case SDLK_RETURN: + SDL_CloseAudioDevice(state->recording_device_id); + state->recording_device_id = audio_recording_init(state->device_index, NULL); + if (state->device_index == -1 || !state->recording_device_id) break; + recording_buffer_position = 0; + SDL_PauseAudioDevice(state->recording_device_id, 0); + /*SDL_UnlockAudioDevice(state->recording_device_id);*/ + state->application_state = RECORDING; + break; + case SDLK_ESCAPE: + state->device_index = -1; + SDL_CloseAudioDevice(state->recording_device_id); + break; + } + int device_index_new = select_device(&event->key, num_devices); + if (device_index_new == -1) break; + if (state->device_index != -1 && device_index_new == -1) break; + state->device_index = device_index_new; + break; + + case RECORDING: + switch (keysym) { + case SDLK_y: + SDL_PauseAudioDevice(state->recording_device_id, 0); + break; + case SDLK_q: + case SDLK_ESCAPE: + SDL_PauseAudioDevice(state->recording_device_id, 1); + audio_buffer_destroy(); + state->application_state = SELECTING_DEVICE; + break; + } + break; + + case RECORDED: + switch (keysym) { + case SDLK_y: + case SDLK_RETURN: + SDL_CloseAudioDevice(state->playback_device_id); + state->playback_device_id = audio_playback_init(NULL); + recording_buffer_position = 0; + SDL_PauseAudioDevice(state->playback_device_id, 0); + /*SDL_UnlockAudioDevice(state->playback_device_id);*/ + state->application_state = PLAYBACK; + break; + case SDLK_q: + case SDLK_ESCAPE: + audio_buffer_destroy(); + state->application_state = SELECTING_DEVICE; + break; + } + break; + + case PLAYBACK: + switch (keysym) { + case SDLK_q: + case SDLK_ESCAPE: + state->application_state = RECORDED; + break; + } + break; + + } +} + +void handle_task(state* state) +{ + switch (state->application_state) { + + case SELECTING_DEVICE: + break; + + case RECORDING: + SDL_LockAudioDevice(state->recording_device_id); + /*printf("buf pos: %u\n", recording_buffer_position);*/ + if (recording_buffer_position >= recording_buffer_position_max) { + SDL_UnlockAudioDevice(state->recording_device_id); + SDL_PauseAudioDevice(state->recording_device_id, 1); + SDL_CloseAudioDevice(state->recording_device_id); + state->application_state = RECORDED; + break; + } + SDL_UnlockAudioDevice(state->recording_device_id); + break; + + case RECORDED: + break; + + case PLAYBACK: + SDL_LockAudioDevice(state->playback_device_id); + if (recording_buffer_position >= recording_buffer_position_max) { + SDL_UnlockAudioDevice(state->playback_device_id); + SDL_PauseAudioDevice(state->playback_device_id, 1); + SDL_CloseAudioDevice(state->playback_device_id); + state->application_state = RECORDED; + break; + } + SDL_UnlockAudioDevice(state->playback_device_id); + break; + + } +} + +int init() +{ + if (SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) < 0) { + printf("SDL could not initialize! SDL Error: %s\n", SDL_GetError()); + return 0; + } + + if (TTF_Init() == -1) { + printf("TTF could not initialize! TTF Error: %s\n", TTF_GetError()); + return 0; + } + + window = SDL_CreateWindow("SDL record", SDL_WINDOWPOS_UNDEFINED, + SDL_WINDOWPOS_UNDEFINED, SCREEN_WIDTH, + SCREEN_HEIGHT, SDL_WINDOW_SHOWN); + + if (!window) { + printf("Window could not be created! SDL Error: %s\n", SDL_GetError()); + return 0; + } + + renderer = SDL_CreateRenderer(window, -1, SDL_RENDERER_ACCELERATED); + if (!renderer) { + printf("Renderer could not be created! SDL_Error: %s\n", SDL_GetError()); + return 0; + } + + global_font = TTF_OpenFont("FiraCode-Regular.ttf", 24); + if (!global_font) { + printf("Failed to load font! TTF_Error: %s\n", TTF_GetError()); + return 0; + } + + return 1; +} + +void destroy() +{ + free(recording_buffer); + + TTF_CloseFont(global_font); + SDL_DestroyRenderer(renderer); + SDL_DestroyWindow(window); + TTF_Quit(); + SDL_Quit(); +} + +int select_device(SDL_KeyboardEvent* key_event, int max_index) +{ + SDL_Keycode keycode = key_event->keysym.sym; + SDL_Keycode mod = key_event->keysym.mod; + + int keycode_is_num = (keycode >= SDLK_0 && keycode <= SDLK_9); + int no_mod = (mod == 0); + if (!keycode_is_num || !no_mod) { + printf("Not number: %c <%u>\n", keycode, keycode); + return -1; + } else { + printf("Is number: %c <%u>\n", keycode, keycode); + } + + int index = keycode - SDLK_0; + if (index >= max_index) return -1; + + return index; +} + +void application_state_to_string(application_state state, char* string) +{ + switch (state) { + case SELECTING_DEVICE: + sprintf(string, "Selecting Device [0-9] -> [y/RET], "); + break; + case RECORDING: + sprintf(string, "Recording"); + break; + case RECORDED: + sprintf(string, "Recorded"); + break; + case PLAYBACK: + sprintf(string, "Playing"); + break; + } +} + +int text_texture_init(text_texture* text_texture) +{ + text_texture->texture = NULL; + text_texture->width = 0; + text_texture->height = 0; + return 1; +} + +int text_texture_load(text_texture* text_texture, char* string) +{ + if (text_texture->texture) { + SDL_DestroyTexture(text_texture->texture); + text_texture->texture = NULL; + } + + SDL_Color text_color = { 255, 255, 255 }; + SDL_Surface* text_surface = TTF_RenderText_Solid(global_font, string, text_color); + if (!text_surface) { + printf("Unable to render text surface! TTF_Error: %s\n", TTF_GetError()); + return 0; + } + + SDL_Texture* texture = SDL_CreateTextureFromSurface(renderer, text_surface); + if (!texture) { + printf("Unable to create texture from rendered text! SDL_Error: %s\n", SDL_GetError()); + return 0; + } + + text_texture->texture = SDL_CreateTextureFromSurface(renderer, text_surface); + text_texture->width = text_surface->w; + text_texture->height = text_surface->h; + + SDL_FreeSurface(text_surface); + return 1; +} + +int text_texture_render(text_texture* text_texture, int x, int y) +{ + if (!text_texture) { + printf("text_texture uninitialized"); + return 0; + } + if (!text_texture->texture) { + printf("text_texture->texture uninitialized"); + return 0; + } + + int quad_width = text_texture->width; + int quad_height = text_texture->height; + SDL_Rect render_quad = { x, y, quad_width, quad_height }; + SDL_RenderCopy(renderer, text_texture->texture, NULL, &render_quad); + + return 1; +} + +int text_texture_free(text_texture* text_texture) +{ + if (!text_texture->texture) { + return 0; + } + SDL_DestroyTexture(text_texture->texture); + return 1; +} + +SDL_AudioDeviceID audio_recording_init(int index, void* userdata) +{ + SDL_zero(recording_spec); + recording_spec.freq = 44100; + recording_spec.format = AUDIO_F32; + recording_spec.channels = 2; + recording_spec.samples = 4096; + recording_spec.callback = audio_recording_callback; + recording_spec.userdata = userdata; + + SDL_AudioDeviceID device_id = SDL_OpenAudioDevice(SDL_GetAudioDeviceName(index, 1), 1, &recording_spec, &received_recording_spec, SDL_AUDIO_ALLOW_FORMAT_CHANGE); + printf("Recording Device: %s\n", SDL_GetAudioDeviceName(index, 1)); + if (!device_id) { + printf("Failed to open recording device! SDL Error: %s", SDL_GetError()); + return 0; + } + + unsigned int bytes_per_sample = received_recording_spec.channels * (SDL_AUDIO_BITSIZE(received_recording_spec.format)/8); + unsigned int bytes_per_second = received_recording_spec.freq * bytes_per_sample; + recording_buffer_size = RECORDING_BUFFER_SECONDS * bytes_per_second; + recording_buffer_position_max = MAX_RECORDING_SECONDS * bytes_per_second; + + recording_buffer = malloc(recording_buffer_size); + memset(recording_buffer, 0, recording_buffer_size); + + return device_id; +} + +SDL_AudioDeviceID audio_playback_init(void* userdata) +{ + if (!recording_buffer) { + printf("Audio buffer not initialized"); + return 0; + } + + SDL_zero(playback_spec); + playback_spec.freq = 44100; + playback_spec.format = AUDIO_F32; + playback_spec.channels = 2; + playback_spec.samples = 4096; + playback_spec.callback = audio_playback_callback; + playback_spec.callback = userdata; + + SDL_AudioDeviceID device_id = SDL_OpenAudioDevice(NULL, 0, &playback_spec, &received_playback_spec, SDL_AUDIO_ALLOW_FORMAT_CHANGE); + if (!device_id) { + printf("Failed to open playback device! SDL Error: %s", SDL_GetError()); + return 0; + } + + return device_id; +} + +int audio_device_stop(int device_id) +{ + SDL_PauseAudioDevice(device_id, 1); + SDL_CloseAudioDevice(device_id); + return 1; +} + +void audio_buffer_destroy() +{ + free(recording_buffer); + recording_buffer = NULL; + recording_buffer_size = 0; + recording_buffer_position = 0; +} + +void audio_recording_callback(void* userdata, Uint8* stream, int len) +{ + memcpy(&recording_buffer[recording_buffer_position], stream, len); + recording_buffer_position += len; + char string[64]; + sprintf(string, "Record pos: %u %u", recording_buffer_position, len); + printf(string, "Record pos: %u %u\n", recording_buffer_position, len); + log_message(LOG_INFO, string); +} + +void audio_playback_callback(void* userdata, Uint8* stream, int len) +{ + memcpy(stream, &recording_buffer[recording_buffer_position], len); + recording_buffer_position += len; + char string[64]; + sprintf(string, "Playback pos: %u %u", recording_buffer_position, len); + printf(string, "Playback pos: %u %u", recording_buffer_position, len); + log_message(LOG_INFO, string); +} diff --git a/makefile b/makefile new file mode 100644 index 0000000..2b66093 --- /dev/null +++ b/makefile @@ -0,0 +1,29 @@ +CC = gcc + +OBJD = obj +SRCS := $(wildcard *.c) +OBJS := $(SRCS:%.c=$(OBJD)/%.o) + +# Compiler flags +CCFLAGS = -g +LDFLAGS = -lSDL2 -lSDL2_image -lSDL2_ttf + +# Target executable name +TARGET = main + +# Build target +all: $(TARGET) + +$(TARGET): $(OBJS) + $(CC) $(CCFLAGS) $^ -o $(TARGET) $(LDFLAGS) + +$(OBJS): $(OBJD)/%.o: %.c + mkdir -p $(@D) + $(CC) $(CCFLAGS) -c $? -o $@ + +clean: + rm -r $(TARGET) $(OBJD) + +run: $(TARGET) + ./$(TARGET) +