使用rsound播放正弦波信号

时间:2016-01-18 19:17:45

标签: audio lisp racket

我在阅读了Racket中的rsound文档后编写了这段代码:

#lang racket
(provide (all-defined-out))
(require rsound)


(define (sunet)
  (sine-wave 880))

(signal-play sunet)

(stop)

我在880 Hz频率上使用“正弦波”功能并将其存储到“sunet”功能中。然后我在它上面应用了“信号播放”功能,它将信号作为声音播放。我收到了这个错误:

application: not a procedure;
 expected a procedure that can be applied to arguments
  given: #<network/s>
  arguments.:
   880
> 

“正弦波”不是一种功能而不是以频率为参数吗?

2 个答案:

答案 0 :(得分:3)

我阅读了更多 rsound 的文档,并阅读了有关 networks 的内容。显然,您需要使用输入信号和输出信号创建一个网络,该输出信号可以显示为 signal-play

这就是我昨天需要的代码:

(define sunet
  (network ()
       [A5 <= sine-wave 880]
       [out = A5]))

(signal-play sunet)

(sleep 3)

(stop)

用两个信号创建一个powerchord:

(define sunet
  (network ()
       [E2 <= sine-wave 82]
       [B2 <= sine-wave 123]
       [out = (+ E2 B2)]))
(signal-play sunet)
(sleep 3)
(stop)

所以,我刚刚回答了我自己的问题。

答案 1 :(得分:0)

这比我预期的要难。结果sine-wave不是一个功能,而是一个网络。以下将发挥正弦波。

    #lang racket
    (require rsound)

    (define s (network ()
                 [a <= sine-wave 880]
                 [out = a]))
    (signal-play s)

我不知道为什么以下更简单的程序不起作用:

    #lang racket
    (require rsound)

    (define s (network ()
                 [out = sine-wave 880]))
    (signal-play s)