Advertisement
Guest User

Untitled

a guest
Feb 22nd, 2015
241
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Lisp 1.43 KB | None | 0 0
  1. (defpackage wv-player
  2.   (:use #:cl #:cl-oss #:bitreader #:wv)
  3.   (:export #:play-wv))
  4. (in-package #:wv-player)
  5.  
  6. (defun play-wv (file)
  7.   (with-open-file (in file :element-type '(unsigned-byte 8))
  8.     (let ((reader (make-reader-from-stream in)))
  9.       (restore-sync reader)
  10.       (let* ((reader-position (reader-position reader))
  11.              (first-block (read-wv-block reader))
  12.              (channels (block-channels first-block))
  13.              (samples (wv::block-block-samples first-block))
  14.              (out-buf (make-array (* samples channels) :element-type '(signed-byte 32))))
  15.         (with-dsp-device (out dsp-device-output
  16.                               :sample-format
  17.                               (let ((bps (block-bps first-block)))
  18.                                 (cond
  19.                                   ((= bps 16) +afmt-s16-le+)
  20.                                   ((= bps 8)  +afmt-s8+)
  21.                                   (t (error "Unsupported sample format"))))
  22.                               :channels channels
  23.                               :sample-rate (block-samplerate first-block))
  24.           (reader-position reader reader-position)
  25.  
  26.           (handler-case
  27.               (loop while t do
  28.                    (write-sequence
  29.                     (utils:mixchannels out-buf
  30.                                        (decode-wv-block (read-wv-block reader)))
  31.                     out))
  32.             (bitreader-eof () ())))))))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement