【问题标题】:Playing a sine-wave signal using rsound使用 rsound 播放正弦波信号
【发布时间】:2016-01-18 19:17:45
【问题描述】:

我在阅读了 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
> 

“正弦波”不是一个函数吗?它不是以频率为参数吗?

【问题讨论】:

  • 如果你在标题中提到这是rsound的问题,也许会更清楚?
  • 这是一个很好的问题,我很高兴你找到了答案(我认为文档中的某个地方有示例代码)。我也知道这会让很多人感到困惑;如果您有更好的错误消息的想法,我很乐意听到。

标签: audio lisp racket


【解决方案1】:

我阅读了更多 rsound 的文档并阅读了有关 networks 的内容。显然,您需要创建一个包含输入信号和输出信号的网络,该网络输出到类似 signal-play 的东西。

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

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

(signal-play sunet)

(sleep 3)

(stop)

并用两个信号来创建一个强力弦:

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

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

【讨论】:

    【解决方案2】:

    这比我预期的要难。原来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)
    

    【讨论】:

    • @john-clements ?有什么想法吗?
    • 这可行:#lang racket (require rsound) (define s (network () [out &lt;= sine-wave 880])) (signal-play s)
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-01-28
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-04-22
    相关资源
    最近更新 更多