2
我在Racket中編寫了這個程序,它從一組15個音符中生成32個隨機音符,然後播放它們。每個音符的持續時間應該是0.25秒。當我運行它時會產生延遲,從而使旋律聽起來很不錯。使用rsound的球拍延遲
它如何正常運行?
這是程序:
所有的#lang racket
(provide (all-defined-out))
(require rsound)
(require rsound/piano-tones)
(define-syntax-rule (note y x)
(begin
(play (piano-tone y))
(sleep x)
(stop)))
(define (random-element list)
(list-ref list (random (length list))))
(define-syntax-rule (random-note)
(note (random-element '(40 42 43 45 47 48 50 52 54 55 57 59 60 62 64)) 0.25))
(for ([i 32])
(random-note))
謝謝!但現在我有一個不同的問題。我將其轉換爲可執行文件,並在所有for循環運行之前退出。我可以爲所有要播放的音符做些什麼? –
發生什麼事情最有可能的是,make-pstream正在發生在另一個線程中,並且主線程在它退出之前並沒有等待它完成。解決這個問題的最簡單方法可能是在歌曲末尾添加一個「pstream-queue-callback」,指示節目何時可以結束。我會用這個來回答這個問題。 –
(此外,您可以只是「睡覺」,但可能會在您的程序完成播放之前完成。 –