Audio 如何在Racket/gui中重复播放歌曲?

Audio 如何在Racket/gui中重复播放歌曲?,audio,scheme,slideshow,racket,wav,Audio,Scheme,Slideshow,Racket,Wav,我正在用racket制作幻灯片,希望在幻灯片后面的循环中播放一首短歌。我目前使用的是(播放声音),但在歌曲接近尾声时,球拍会因segfault而崩溃,总是在不同的幻灯片上。如果我在没有声音代码的情况下运行节目,它不会出现故障 我认为这首歌的结尾会导致racket/gui崩溃,而循环可能会阻止这种情况的发生。在节目的主要功能中播放歌曲 (define (run) (play-sound "path" #t) (slide (...) (run)) 使歌曲连续中断,仅在重复之前播放前两秒左右

我正在用racket制作幻灯片,希望在幻灯片后面的循环中播放一首短歌。我目前使用的是
(播放声音)
,但在歌曲接近尾声时,球拍会因segfault而崩溃,总是在不同的幻灯片上。如果我在没有声音代码的情况下运行节目,它不会出现故障

我认为这首歌的结尾会导致racket/gui崩溃,而循环可能会阻止这种情况的发生。在节目的主要功能中播放歌曲

(define (run)
 (play-sound "path" #t)
 (slide (...)
 (run))

使歌曲连续中断,仅在重复之前播放前两秒左右。我现在有了主功能之外的播放声音线,但它确实在接近尾声时崩溃了,有时在最后。我试着增加DrRacket的记忆力,但没用。非常感谢您的建议。

您可能对RSound软件包感兴趣(参见)。与您当前的方法相比,此软件包既有优点也有缺点。最明显的缺点是需要将歌曲转换为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)

赛格断层?如果尚未升级,请升级。如果您运行最新版本,请提交错误报告。什么操作系统?(并且一定要按照@soegaard所说的去做)除非
(幻灯片…
在声音结束时正好结束,否则它将重复播放,并在同一时间从不同的起点一次又一次播放相同的片段。也许您应该使用
async?=>#f
在一个过程中,并将其作为一个单独的线程启动?我确实升级了Dr.racket,并且我使用的是windows 8.1 x64。故障确实停止了,非常感谢。现在我正在做音频循环@西尔维斯特,我该怎么办?关于线程的racket文档是毫无帮助的。我的歌大约是2:20,我有十张幻灯片,每张幻灯片大约15秒后会暂停。我提到的剪切立即发生,当我开始第一张幻灯片时,无论我在哪张幻灯片上,儿子都会在继续重新开始之前播放第一秒或两秒。然后,这首歌只有在我停止表演时才能完全播放。