From 523b752c16abc162a302df05eac50dd59e0d6a91 Mon Sep 17 00:00:00 2001 From: "Skylar \"The Cobra\" Widulski" Date: Sun, 24 Dec 2023 11:25:57 -0500 Subject: [PATCH] Refactor everything for easier system install Signed-off-by: Skylar "The Cobra" Widulski --- README.md | 7 +- compile.sh | 4 +- yammer.c => src/c/yammer.c | 0 yammer.h => src/c/yammer.h | 0 yammer.scm => src/guile/yammer.scm | 116 ++++++++++++++++++--------- {yammer => src/guile/yammer}/ffi.scm | 0 yammer | 3 + 7 files changed, 86 insertions(+), 44 deletions(-) rename yammer.c => src/c/yammer.c (100%) rename yammer.h => src/c/yammer.h (100%) rename yammer.scm => src/guile/yammer.scm (77%) mode change 100755 => 100644 rename {yammer => src/guile/yammer}/ffi.scm (100%) create mode 100755 yammer diff --git a/README.md b/README.md index 461d1b4..8886e1e 100644 --- a/README.md +++ b/README.md @@ -49,14 +49,15 @@ Below is a list of values and what they do * `exponential-factor`: Exponential smoothing factor, lower is more smooth. # Running -Either install libyammer.so and yammer.h to their respective systemwide locations, or do the following: +Either install .libs/libyammer.so, src/c/yammer.h, src/guile/yammer.scm, and src/guile/yammer to their respective systemwide locations, or do the following: ```bash -export LD_LIBRARY_PATH=. +export LD_LIBRARY_PATH=.libs +export GUILE_LOAD_PATH=src/guile ``` Then, run yammer. ```bash -guile -L . yammer.scm +./yammer ``` # Screenshots diff --git a/compile.sh b/compile.sh index acfc21d..f0b72cf 100755 --- a/compile.sh +++ b/compile.sh @@ -1,6 +1,8 @@ LDFLAGS="$(pkg-config --cflags --libs ${NO_FFTW:-fftw3} ${NO_PULSE:-libpulse-simple})" CFLAGS="-Wall -Wextra -Werror -fPIC -O3 ${DEBUG:+-ggdb}" -gcc_invoke="gcc ${NO_FFTW:--DUSE_FFTW} ${NO_PULSE:--DUSE_PULSE} -shared yammer.c -o libyammer.so ${CFLAGS} -shared ${LDFLAGS}" +gcc_invoke="gcc ${NO_FFTW:--DUSE_FFTW} ${NO_PULSE:--DUSE_PULSE} -shared ${0%/*}/src/c/yammer.c -o ${0%/*}/.libs/libyammer.so ${CFLAGS} -shared ${LDFLAGS}" +mkdir ${0%/*}/.libs +export C_INCLUDE_PATH="${0%/*}/src/c${C_INCLUDE_PATH:+:$C_INCLUDE_PATH}" eval "$gcc_invoke" diff --git a/yammer.c b/src/c/yammer.c similarity index 100% rename from yammer.c rename to src/c/yammer.c diff --git a/yammer.h b/src/c/yammer.h similarity index 100% rename from yammer.h rename to src/c/yammer.h diff --git a/yammer.scm b/src/guile/yammer.scm old mode 100755 new mode 100644 similarity index 77% rename from yammer.scm rename to src/guile/yammer.scm index 70e973e..479600e --- a/yammer.scm +++ b/src/guile/yammer.scm @@ -1,5 +1,3 @@ -#!/usr/bin/env -S guile -!# ;;; ;;; Copyright (C) 2023 Skylar Widulski ;;; @@ -20,7 +18,6 @@ ;;; (define-module (yammer) - #:declarative? #f #:use-module (sdl2) #:use-module (sdl2 blend-mode) #:use-module (sdl2 events) @@ -37,22 +34,89 @@ #:use-module (scheme base) #:use-module (srfi srfi-1) #:use-module (system foreign) - #:use-module (yammer ffi)) + #:use-module (yammer ffi) + #:export (start)) -;; Add this config dir to load path -(add-to-load-path - (string-append - (if (getenv "XDG_CONFIG_HOME") - (getenv "XDG_CONFIG_HOME") - (string-append (getenv "HOME") "/.config")) - "/yammer")) -(load-from-path "config.scm") +(define fd #f) +(define pa-simple #f) + +(define using-fftw? #t) +(define using-pulse? #t) +(define source "/tmp/mpd.fifo") +(define source-type 'mpd) +(define bitrate 44100) +(define sample-factor 2) +(define fps 20) +(define resolution 1) +(define scale 1) +(define color #xff99c8ff) +(define bgcolor #x2e2016ff) +(define queue-size 1) +(define fft #f) +(define interpolation 0) +(define smoothing-mode 'none) +(define moving-average-block-size 24) +(define exponential-factor 0.5) ;; Define widely used constants in relation to config values (define recip-fps (/ 1 fps)) (define sample-size (exact (* 4 (round (* sample-factor (* (/ bitrate 4) recip-fps)))))) +(define (start config:using-fftw? config:using-pulse? config:source + config:source-type config:bitrate config:sample-factor config:fps + config:resolution config:scale config:color config:bgcolor + config:queue-size config:fft config:interpolation + config:smoothing-mode config:moving-average-block-size + config:exponential-factor) + (set! using-fftw? config:using-fftw?) + (set! using-pulse? config:using-pulse?) + (set! source config:source) + (set! source-type config:source-type) + (set! bitrate config:bitrate) + (set! sample-factor config:sample-factor) + (set! fps config:fps) + (set! resolution config:resolution) + (set! scale config:scale) + (set! color config:color) + (set! bgcolor config:bgcolor) + (set! queue-size config:queue-size) + (set! fft config:fft) + (set! interpolation config:interpolation) + (set! smoothing-mode config:smoothing-mode) + (set! moving-average-block-size config:moving-average-block-size) + (set! exponential-factor config:exponential-factor) + + (set! recip-fps (/ 1 fps)) + (set! sample-size + (exact (* 4 (round (* sample-factor (* (/ bitrate 4) recip-fps)))))) + + ;; Initially open the MPD FIFO or connect to pulseaudio + (cond + ((eq? source-type 'mpd) + (set! fd (open-fifo source))) + ((eq? source-type 'pulse) + (set! pa-simple (make-pa-simple bitrate source pulse-latency)))) + + (sdl-init '(video events)) ;; Initialize SDL2 + (set! window (make-window #:title "Yammer")) ;; Create window + (set-window-resizable! window #t) ;; Allow window resizing + (set! renderer (make-renderer window)) ;; Create renderer from window + + (lp renderer fft) ;; Run the loop + + (delete-renderer! renderer) ;; Free renderer on close + (close-window! window) ;; Close window + (sdl-quit) ;; Quit SDL2 + (cond + ((eq? source-type 'mpd) + (close-port fd)) + ((eq? source-type 'pulse) + (pa_simple_free pa-simple))) + + ;; Free FFT plan if FFT is enabled + (if (and fft using-fftw?) (monitor (fftw_destroy_plan plan)))) + ;; Plan definition (if using fft) (define plan #f) (if (and fft using-fftw?) @@ -246,31 +310,3 @@ (smooth (map cadr plst) smoothing-mode))) (draw ren plst))))) (touch sleep-future))) - -;; Initially open the MPD FIFO -(define fd #f) -(define pa-simple #f) -(cond - ((eq? source-type 'mpd) - (set! fd (open-fifo source))) - ((eq? source-type 'pulse) - (set! pa-simple (make-pa-simple bitrate source pulse-latency)))) - -(sdl-init '(video events)) ;; Initialize SDL2 -(set! window (make-window #:title "Yammer")) ;; Create window -(set-window-resizable! window #t) ;; Allow window resizing -(set! renderer (make-renderer window)) ;; Create renderer from window - -(lp renderer fft) ;; Run the loop - -(delete-renderer! renderer) ;; Free renderer on close -(close-window! window) ;; Close window -(sdl-quit) ;; Quit SDL2 -(cond - ((eq? source-type 'mpd) - (close-port fd)) - ((eq? source-type 'pulse) - (pa_simple_free pa-simple))) - -;; Free FFT plan if FFT is enabled -(if (and fft using-fftw?) (monitor (fftw_destroy_plan plan))) diff --git a/yammer/ffi.scm b/src/guile/yammer/ffi.scm similarity index 100% rename from yammer/ffi.scm rename to src/guile/yammer/ffi.scm diff --git a/yammer b/yammer new file mode 100755 index 0000000..cc4abb1 --- /dev/null +++ b/yammer @@ -0,0 +1,3 @@ +#!/usr/bin/env -S guile +!# +(define using-fftw? #t) (define using-pulse? #t) (define source "/tmp/mpd.fifo") (define source-type 'mpd) (define bitrate 44100) (define sample-factor 2) (define fps 20) (define resolution 1) (define scale 1) (define color #xff99c8ff) (define bgcolor #x2e2016ff) (define queue-size 1) (define fft #f) (define interpolation 0) (define smoothing-mode 'none) (define moving-average-block-size 24) (define exponential-factor 0.5) (set! %load-extensions (quote (".scm"))) (add-to-load-path (string-append (if (getenv "XDG_CONFIG_HOME") (getenv "XDG_CONFIG_HOME") (string-append (getenv "HOME") "/.config")) "/yammer")) (load-from-path "config") (use-modules (yammer)) (start using-fftw? using-pulse? source source-type bitrate sample-factor fps resolution scale color bgcolor queue-size fft interpolation smoothing-mode moving-average-block-size exponential-factor)