无法使用Racket RSound取得声音

问题描述 投票:0回答:1

我正在尝试使用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
racket playback
1个回答
0
投票

根据the documentation for play,该功能不能在子模块main中使用。

您可以使用类似的功能:

#lang racket/base
(play (rs-read "/media/tamayo/ExtraDrive1/Dropbox/fclooper/poc/sample.wav"))
© www.soinside.com 2019 - 2024. All rights reserved.