AtlatestRepositorysigil-audio

sigil-audio / tree / testtest-ogg-encode.sgl

1;;; Test OGG Vorbis encoding
2;;;
3;;; Generates a sine wave, encodes to .ogg, then verifies the file
4;;; can be read back.
5
6(import (sigil core)
7 (sigil math)
8 (sigil audio))
9
10(define pi 3.14159265358979)
12;; Generate a 1-second 440Hz sine wave (mono, 44100Hz)
13(define sample-rate 44100)
14(define num-samples sample-rate) ;; 1 second
15(define frequency 440.0)
17(display "Generating mono sine wave... ")
18(define samples
19 (let ((v (make-vector num-samples 0.0)))
20 (let loop ((i 0))
21 (when (< i num-samples)
22 (vector-set! v i (* 0.8 (sin (* 2.0 pi frequency (/ i sample-rate)))))
23 (loop (+ i 1))))
24 v))
25(display "OK\n")
27;; Convert to float32 bytevector
28(display "Converting to float buffer... ")
29(define buffer (make-float-buffer samples))
30(display (string-append (number->string (bytevector-length buffer)) " bytes\n"))
32;; Write OGG file using keyword API
33(define output-path "/tmp/test-sigil-ogg-encode.ogg")
34(display (string-append "Encoding mono to " output-path "... "))
35(define result (write-ogg output-path buffer
36 sample-rate: sample-rate
37 channels: 1
38 quality: 0.4))
39(if result
40 (display "OK\n")
41 (begin (display "FAILED\n") (exit 1)))
43;; Verify we can decode the file we just wrote
44(display "Verifying: loading encoded file back... ")
45(define loaded (load-sound output-path))
46(if loaded
47 (display "OK\n")
48 (begin (display "FAILED - could not decode written file\n") (exit 1)))
50;; Test stereo encoding with defaults (sample-rate: 44100, channels: 2, quality: 0.4)
51(display "\nGenerating stereo sine wave... ")
52(define stereo-samples
53 (let ((v (make-vector (* num-samples 2) 0.0)))
54 (let loop ((i 0))
55 (when (< i num-samples)
56 (let ((s (* 0.8 (sin (* 2.0 pi frequency (/ i sample-rate))))))
57 (vector-set! v (* i 2) s)
58 (vector-set! v (+ (* i 2) 1)
59 (* 0.8 (sin (* 2.0 pi (* frequency 1.5) (/ i sample-rate))))))
60 (loop (+ i 1))))
61 v))
62(display "OK\n")
64(define stereo-buffer (make-float-buffer stereo-samples))
65(define stereo-path "/tmp/test-sigil-ogg-encode-stereo.ogg")
66(display (string-append "Encoding stereo to " stereo-path "... "))
67;; Use defaults for stereo (channels: 2 is default)
68(define stereo-result (write-ogg stereo-path stereo-buffer
69 sample-rate: sample-rate))
70(if stereo-result
71 (display "OK\n")
72 (begin (display "FAILED\n") (exit 1)))
74;; Verify stereo file decodes
75(display "Verifying: loading stereo file back... ")
76(define stereo-loaded (load-sound stereo-path))
77(if stereo-loaded
78 (display "OK\n")
79 (begin (display "FAILED - could not decode stereo file\n") (exit 1)))
81(display "\nAll tests passed!\n")