56 lines
925 B
Racket
56 lines
925 B
Racket
#lang racket
|
|
|
|
(require racket/class
|
|
racket-audio
|
|
)
|
|
|
|
(provide player%)
|
|
|
|
(define player%
|
|
(class object%
|
|
|
|
(define pl #f)
|
|
(define state 'stopped)
|
|
(define track 0)
|
|
|
|
(define (player)
|
|
|
|
(define (state-machine)
|
|
(cond
|
|
((eq? state 'quit)
|
|
'done)
|
|
((eq? state 'stopped)
|
|
(sleep 0.25)
|
|
(state-machine))
|
|
((eq? state 'play)
|
|
(if (eq? pl #f)
|
|
(begin
|
|
(set! state 'stopped)
|
|
(state-machine))
|
|
(begin
|
|
(play-
|
|
|
|
)
|
|
|
|
(thread (λ ()
|
|
|
|
|
|
)
|
|
|
|
(define/public (play playlist)
|
|
(set! state 'stopped)
|
|
(set! pl playlist)
|
|
(set! track 0)
|
|
(set! state 'play)
|
|
)
|
|
|
|
(define/public (quit)
|
|
(set! state 'quit))
|
|
|
|
(super-new)
|
|
|
|
(begin
|
|
(player))
|
|
)
|
|
)
|