我正在尝试使用Racket Rsound播放声音。我在play.rkt
中有一个使用racket play.rkt
运行的简单程序。
使用GUI库中的play-sound
播放声音,正如我期望的那样:
#lang racket/base
(module+ main
(require racket/gui/base)
(play-sound "/media/tamayo/ExtraDrive1/Dropbox/fclooper/poc/sample.wav" #t))
输出:
$ racket play.rkt
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
#t ;; plays audio correctly
但是使用RSound不会播放任何音频:
#lang racket/base
(module+ main
(require rsound)
(play (rs-read "/media/tamayo/ExtraDrive1/Dropbox/fclooper/poc/sample.wav")))
除了最后一行是"played sound"
而不是#t
,输出与上面相同。
当我直接从球拍REPL中运行相同的代码时,它也可以正确播放音频:
$ racket
Welcome to Racket v7.3.
> (require rsound)
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.rear
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.center_lfe
ALSA lib pcm.c:2495:(snd_pcm_open_noupdate) Unknown PCM cards.pcm.side
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
ALSA lib pcm_route.c:867:(find_matching_chmap) Found no matching channel map
Cannot connect to server socket err = No such file or directory
Cannot connect to server request channel
jack server is not running or cannot be started
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
JackShmReadWritePtr::~JackShmReadWritePtr - Init not done for -1, skipping unlock
> (play (rs-read "/media/tamayo/ExtraDrive1/Dropbox/fclooper/poc/sample.wav"))
"played sound" ;; <-- and it does.
>
因此REPL知道如何通过RSound正确播放音频,并且racket
可以使用(play-sound ...)
播放,但是我的程序失败了。为什么?
Ubuntu 18.04
$ racket --version
Welcome to Racket v7.3.
$ uname -a
Linux toast 5.0.0-23-generic #24~18.04.1-Ubuntu SMP Mon Jul 29 16:12:28 UTC 2019 x86_64 x86_64 x86_64 GNU/Linux
根据the documentation for play,该功能不能在子模块main
中使用。
您可以使用类似的功能:
#lang racket/base
(play (rs-read "/media/tamayo/ExtraDrive1/Dropbox/fclooper/poc/sample.wav"))