view src/scheme/old/audio.scm @ 5:b67a33c44de7

Remove some crap, etc
author samer
date Fri, 05 Apr 2019 21:34:25 +0100
parents bf79fb79ee13
children
line wrap: on
line source
;(import "javax.sound.sampled.*")

;;; getting mixers
(define (get-mixers)	(vector->list (javax.sound.sampled.AudioSystem.getMixerInfo)))
(define (pr-mixers) (print (get-mixers)))
(define (mixer mi) (javax.sound.sampled.AudioSystem.getMixer mi))
(define (mixer-n n) (mixer (list-ref (get-mixers) n)))
(define (default-mixer) (mixer-n (Shell.getInt "mixer" 1)))



;;; formats
(define (mono rate) (multi 1 rate))
(define (stereo rate) (multi 2 rate))
(define (multi chans rate) (format 16 chans rate))
(define (format bits chans rate) (javax.sound.sampled.AudioFormat. (.floatValue rate) bits chans #t #f))

;;; construct line info from given format
(define (target format)
	(javax.sound.sampled.DataLine$Info.
		javax.sound.sampled.TargetDataLine.class format))

(define (source format)
	(javax.sound.sampled.DataLine$Info.
		javax.sound.sampled.SourceDataLine.class format))

;;; these two just return the first target/source line info respectively
;;; (define (target-info m) (vector-ref (.getTargetLineInfo m) 0))
;;; (define (source-info m) (vector-ref (.getSourceLineInfo m) 0))

;;; getting line from info and optional mixer
(define-method (line info) (javax.sound.sampled.AudioSystem.getLine info))
(define-method (line mixer info) (.getLine mixer info))

;;; these two just return the mixer's first target/source line respectively
(define (target-line m) (line m (vector-ref (.getTargetLineInfo m) 0)))
(define (source-line m) (line m (vector-ref (.getSourceLineInfo m) 0)))

(define _src samer.audio.LineSource.)
(define _snk samer.audio.LineSink.)
(define (_op1 l) (.open l) l)
(define (_op2 l fmt) (.open l fmt) l)

(define-method (linesrc) 					(_op1 (_src)))
(define-method (linesrc fmt) 			(_op1 (_src (line (target fmt)))))
(define-method (linesrc m fmt)		(_op2 (_src (target-line m)) fmt))
(define-method (linesnk fmt) 			(_op1 (_snk (line (source fmt)))))
(define-method (linesnk m fmt)		(_op2 (_snk (source-line m)) fmt))

;; to do: buffer size?
;; integrate with LineSource.defaultLine and VLine.defaultFormat
;; specify default mixer in user.props

(define (display-mixer m)
	(print "\n **************************** \n")
	(print (.getMixerInfo m))
;	(print "\n---controls:") (print(.getControls m))
	(print "\n---source line info:") (print(.getSourceLineInfo m))
	(print "\n---target line info:") (print(.getTargetLineInfo m))
;	(print "\n---source lines:") 		(print(.getSourceLines m))
;	(print "\n---target lines:") 		(print(.getTargetLines m))
	#null
)

;; default line in
(define-method (linein size step) (linein (linesrc) size step))


;;; Format conversion
(define (convert format stream)
	(javax.sound.sampled.AudioSystem.getAudioInputStream format stream))

;;; get audio input stream from file object
(define-method (astream (f java.io.File)) 
	(javax.sound.sampled.AudioSystem.getAudioInputStream f))

;;; get audio input stream from named file
(define-method (astream (fn String))  (astream (java.io.File. fn)))