我正在使用球拍制作幻灯片,并希望在幻灯片放映后的循环播放短歌。我目前正在使用(play-sound)
,但是Racket在歌曲结束时遇到了段错误,总是在不同的幻灯片上。如果我在没有声音代码的情况下运行该节目,则不会发生段错误。
我认为歌曲的结尾会导致racket / gui崩溃,循环可能会阻止这种情况发生。在节目的主要功能中播放歌曲
(define (run)
(play-sound "path" #t)
(slide (...)
(run))
使歌曲连续剪切,只在前两秒左右播放,然后再重复播放。我现在在主要功能之外有播放声音线,但它确实在最后崩溃,有时在最后。我试过增加DrRacket的记忆力,但它没有帮助。任何建议都表示赞赏。
答案 0 :(得分:1)
您可能对RSound包感兴趣(参见http://pkgs.racket-lang.org)。与现有方法相比,该软件包具有优点和缺点。最明显的缺点是它需要您将歌曲转换为WAV。这是一些代码:
#lang racket
(require rsound)
(define ishmael (rs-read "/Users/clements/Desktop/call-me-ishmael.wav"))
(define LEAD-TIME (* 1/10 44100))
(define (play-forever sound)
(define p (make-pstream))
(define len (rs-frames sound))
(let loop ([t 0])
(pstream-queue p sound (+ t LEAD-TIME))
(define next-t (+ t len))
(sleep (* 1/44100 (- next-t (pstream-current-frame p))))
(loop next-t)))
(play-forever ishmael)