From 9cc92ed38ebdb9f0928be9b7de2d6bd90a7367c7 Mon Sep 17 00:00:00 2001 From: 8nl <8nl@localhost.my.domain> Date: Wed, 19 Mar 2025 18:03:54 +0300 Subject: [PATCH] fixed --- audio_vis.sh | 2 +- spark_ncurses.c | 91 +++++++++++-------------------------------------- 2 files changed, 20 insertions(+), 73 deletions(-) mode change 100644 => 100755 audio_vis.sh diff --git a/audio_vis.sh b/audio_vis.sh old mode 100644 new mode 100755 index 33ff443..e083a65 --- a/audio_vis.sh +++ b/audio_vis.sh @@ -1,2 +1,2 @@ #!/bin/sh -arecord --buffer-size=128 -Dloopout -MNqc1 -fS24_LE -traw 2> /dev/null | hexdump -e '/4 "%d "' | ./spark +arecord -r 48000 --buffer-size=1024 -Dloopout -MNqc1 -fS16_LE -traw 2> /dev/null | ./spark diff --git a/spark_ncurses.c b/spark_ncurses.c index 8814b23..a89f306 100644 --- a/spark_ncurses.c +++ b/spark_ncurses.c @@ -1,75 +1,10 @@ -#include +#include #include -#include #include #include #include #include #include -#include - -#define ARG_SIZE 50 - -struct winsize ws; - -int max; -int min; - -int args; -size_t middle; -int add_value(const char *str) { - if (args > (int)ws.ws_col) - return 1; - - int val1 = atoi(str); - - int val2 = val1; - if (val2 < 0) - val2 *= -1; - - if (val2 > max) - max = val2; - - else if (val2 < min) - min = val2; - - int k = (val2 - min) * (middle - 5) / ((max - min) + 1); - if (val1 > 0) - mvprintw(middle - k, args, "@"); - - else - mvprintw(middle + k, args, "@"); - - args++; - return 0; -} - -void stdin_read(void) { - char arg[ARG_SIZE + 1]; - char *p = arg; - - while (1) { - int c = getchar(); - if (c == EOF) - return; - - else if (c == ' ' && p != arg) { - *p = '\0'; - p = arg; - - if (add_value(arg)) - break; - } - - else { - *p = c; - if (p + 1 == arg + sizeof(arg)) - break; - - p++; - } - } -} void sig_handler(int sig) { (void)sig; @@ -81,6 +16,8 @@ void sig_handler(int sig) { int main(void) { signal(SIGINT, sig_handler); signal(SIGTERM, sig_handler); + + struct winsize ws; if (ioctl(STDOUT_FILENO, TIOCGWINSZ, &ws) < 0) return 1; @@ -89,12 +26,22 @@ int main(void) { curs_set(0); timeout(0); - middle = ws.ws_row / 2; - while (1) { - args = 0; + size_t middle = ws.ws_row / 2; - clear(); - stdin_read(); - refresh(); + size_t args = 0; + while (1) { + if (args > ws.ws_col) { + refresh(); + clear(); + args = 0; + } + + int val1; + read(STDIN_FILENO, &val1, sizeof(val1)); + + int k = val1 * (middle - 5) / INT_MAX; + mvprintw(middle + k, args, "@"); + + args++; } }