annotate src/scheme/old/audio.scm @ 8:5e3cbbf173aa tip

Reorganise some more
author samer
date Fri, 05 Apr 2019 22:41:58 +0100
parents bf79fb79ee13
children
rev   line source
samer@0 1 ;(import "javax.sound.sampled.*")
samer@0 2
samer@0 3 ;;; getting mixers
samer@0 4 (define (get-mixers) (vector->list (javax.sound.sampled.AudioSystem.getMixerInfo)))
samer@0 5 (define (pr-mixers) (print (get-mixers)))
samer@0 6 (define (mixer mi) (javax.sound.sampled.AudioSystem.getMixer mi))
samer@0 7 (define (mixer-n n) (mixer (list-ref (get-mixers) n)))
samer@0 8 (define (default-mixer) (mixer-n (Shell.getInt "mixer" 1)))
samer@0 9
samer@0 10
samer@0 11
samer@0 12 ;;; formats
samer@0 13 (define (mono rate) (multi 1 rate))
samer@0 14 (define (stereo rate) (multi 2 rate))
samer@0 15 (define (multi chans rate) (format 16 chans rate))
samer@0 16 (define (format bits chans rate) (javax.sound.sampled.AudioFormat. (.floatValue rate) bits chans #t #f))
samer@0 17
samer@0 18 ;;; construct line info from given format
samer@0 19 (define (target format)
samer@0 20 (javax.sound.sampled.DataLine$Info.
samer@0 21 javax.sound.sampled.TargetDataLine.class format))
samer@0 22
samer@0 23 (define (source format)
samer@0 24 (javax.sound.sampled.DataLine$Info.
samer@0 25 javax.sound.sampled.SourceDataLine.class format))
samer@0 26
samer@0 27 ;;; these two just return the first target/source line info respectively
samer@0 28 ;;; (define (target-info m) (vector-ref (.getTargetLineInfo m) 0))
samer@0 29 ;;; (define (source-info m) (vector-ref (.getSourceLineInfo m) 0))
samer@0 30
samer@0 31 ;;; getting line from info and optional mixer
samer@0 32 (define-method (line info) (javax.sound.sampled.AudioSystem.getLine info))
samer@0 33 (define-method (line mixer info) (.getLine mixer info))
samer@0 34
samer@0 35 ;;; these two just return the mixer's first target/source line respectively
samer@0 36 (define (target-line m) (line m (vector-ref (.getTargetLineInfo m) 0)))
samer@0 37 (define (source-line m) (line m (vector-ref (.getSourceLineInfo m) 0)))
samer@0 38
samer@0 39 (define _src samer.audio.LineSource.)
samer@0 40 (define _snk samer.audio.LineSink.)
samer@0 41 (define (_op1 l) (.open l) l)
samer@0 42 (define (_op2 l fmt) (.open l fmt) l)
samer@0 43
samer@0 44 (define-method (linesrc) (_op1 (_src)))
samer@0 45 (define-method (linesrc fmt) (_op1 (_src (line (target fmt)))))
samer@0 46 (define-method (linesrc m fmt) (_op2 (_src (target-line m)) fmt))
samer@0 47 (define-method (linesnk fmt) (_op1 (_snk (line (source fmt)))))
samer@0 48 (define-method (linesnk m fmt) (_op2 (_snk (source-line m)) fmt))
samer@0 49
samer@0 50 ;; to do: buffer size?
samer@0 51 ;; integrate with LineSource.defaultLine and VLine.defaultFormat
samer@0 52 ;; specify default mixer in user.props
samer@0 53
samer@0 54 (define (display-mixer m)
samer@0 55 (print "\n **************************** \n")
samer@0 56 (print (.getMixerInfo m))
samer@0 57 ; (print "\n---controls:") (print(.getControls m))
samer@0 58 (print "\n---source line info:") (print(.getSourceLineInfo m))
samer@0 59 (print "\n---target line info:") (print(.getTargetLineInfo m))
samer@0 60 ; (print "\n---source lines:") (print(.getSourceLines m))
samer@0 61 ; (print "\n---target lines:") (print(.getTargetLines m))
samer@0 62 #null
samer@0 63 )
samer@0 64
samer@0 65 ;; default line in
samer@0 66 (define-method (linein size step) (linein (linesrc) size step))
samer@0 67
samer@0 68
samer@0 69 ;;; Format conversion
samer@0 70 (define (convert format stream)
samer@0 71 (javax.sound.sampled.AudioSystem.getAudioInputStream format stream))
samer@0 72
samer@0 73 ;;; get audio input stream from file object
samer@0 74 (define-method (astream (f java.io.File))
samer@0 75 (javax.sound.sampled.AudioSystem.getAudioInputStream f))
samer@0 76
samer@0 77 ;;; get audio input stream from named file
samer@0 78 (define-method (astream (fn String)) (astream (java.io.File. fn)))
samer@0 79