Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (defpackage wv-player
- (:use #:cl #:cl-oss #:bitreader #:wv)
- (:export #:play-wv))
- (in-package #:wv-player)
- (defun play-wv (file)
- (with-open-file (in file :element-type '(unsigned-byte 8))
- (let ((reader (make-reader-from-stream in)))
- (restore-sync reader)
- (let* ((reader-position (reader-position reader))
- (first-block (read-wv-block reader))
- (channels (block-channels first-block))
- (samples (wv::block-block-samples first-block))
- (out-buf (make-array (* samples channels) :element-type '(signed-byte 32))))
- (with-dsp-device (out dsp-device-output
- :sample-format
- (let ((bps (block-bps first-block)))
- (cond
- ((= bps 16) +afmt-s16-le+)
- ((= bps 8) +afmt-s8+)
- (t (error "Unsupported sample format"))))
- :channels channels
- :sample-rate (block-samplerate first-block))
- (reader-position reader reader-position)
- (handler-case
- (loop while t do
- (write-sequence
- (utils:mixchannels out-buf
- (decode-wv-block (read-wv-block reader)))
- out))
- (bitreader-eof () ())))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement