#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)) ) )