Skip to content
This repository was archived by the owner on Aug 13, 2025. It is now read-only.

Commit 252a960

Browse files
committed
fgsfds
1 parent c6bb09f commit 252a960

File tree

1 file changed

+12
-4
lines changed

1 file changed

+12
-4
lines changed

examples/spectrogram.lisp

Lines changed: 12 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -4,7 +4,7 @@
44
:title "Spectrogram"
55
:description "Live audio spectrogram using microphone input."
66
(trial-harmony:initialize-audio-backend NIL NIL :source T :mixers '() :start NIL)
7-
(let* ((visualizer (make-instance 'spectrogram-visualizer :framesize 2048 :frame-count 1024))
7+
(let* ((visualizer (make-instance 'spectrogram-visualizer :framesize 8192 :frame-count 1024))
88
(input (harmony:segment :input harmony:*server*))
99
(fft (make-instance 'mixed:fwd-fft :samplerate (harmony:samplerate harmony:*server*)
1010
:framesize (framesize visualizer)))
@@ -44,6 +44,7 @@
4444
(vertex-array :initform (// 'trial 'fullscreen-square))
4545
(spectrogram :accessor spectrogram)
4646
(framesize :initarg :framesize :initform 2048 :accessor framesize)
47+
(range :initarg :range :initform '(100 . 8000) :accessor range)
4748
(i :initform 0 :accessor i)
4849
(last-i :initform 0 :accessor last-i))
4950
(:inhibit-shaders (textured-entity :fragment-shader)))
@@ -66,13 +67,17 @@
6667
(stage (gradient visualizer) area))
6768

6869
(defmethod render :before ((visualizer spectrogram-visualizer) (program shader-program))
69-
(let ((i (i visualizer)))
70+
(let ((i (i visualizer))
71+
(spectrogram (spectrogram visualizer)))
7072
(setf (uniform program "gradient") (bind (gradient visualizer) 1))
7173
(setf (uniform program "spectrogram") (bind (texture visualizer) 0))
7274
;; FIXME: only update the actually changed partrs of the texture.
7375
(update-buffer-data (texture visualizer) T)
7476
(setf (last-i visualizer) i)
75-
(setf (uniform program "offset") (vec2 0 (/ i (length (spectrogram visualizer)))))))
77+
(let ((min-freq (aref spectrogram 0))
78+
(max-freq (aref (spectrogram visualizer) (- (framesize visualizer) 2))))
79+
;; TODO: compute the correct scaling and offset to view the range
80+
(setf (uniform program "offset") (vec2 0 (/ i (length spectrogram)))))))
7681

7782
(define-class-shader (spectrogram-visualizer :fragment-shader)
7883
"uniform sampler2D spectrogram;
@@ -82,8 +87,11 @@ in vec2 uv;
8287
out vec4 color;
8388
8489
void main(){
85-
vec2 pos = vec2(uv.y, uv.x)+offset;
90+
vec2 pos = vec2(pow(uv.y,2), uv.x)+offset;
8691
vec2 freqmag = texture(spectrogram, pos).rg;
92+
float freqp = textureOffset(spectrogram, pos, ivec2(2,0)).r;
8793
vec3 intensity = texture(gradient, vec2(freqmag.y, 0.5)).rgb;
94+
// Figure out lines
95+
if(1000*ceil(freqmag.x / 1000) <= freqp) intensity = vec3(1);
8896
color = vec4(intensity, 1);
8997
}")

0 commit comments

Comments
 (0)