【发布时间】:2011-01-15 19:44:15
【问题描述】:
我正在使用 Portaudio 在 Haskell 中编写一个音频程序。我有一个函数可以生成我想播放的样本列表,我正在尝试在 main 中使用以下 sn-p 播放它们:
curSamps <- return (chunk 1 (sineWave 440 44100))
forever $ do
Right numSampsAvail <- getStreamWriteAvailable paStream
Right NoError <- writeStream paStream curSamps numSampsAvail
curSamps <- return (drop numSampsAvail curSamps)
sineWave 是我创建的一个函数,用于以指定的频率和采样率生成无限的 Int16 正弦波样本列表。
当我调试此代码时,通过将音频输出代码替换为 putStrLn,它会打印全 0,这是该函数的第一个样本。
如何使用音频输出函数遍历此列表?我不认为我可以使用递归或映射。
编辑:代码复制错误
【问题讨论】:
-
为什么你认为你不能使用地图?
-
不同子表达式的值是多少? IE。什么是 take 10(sineWave 440 44100),take 10(chunk 1 (sineWave 440 44100))等等?
-
@Edward Amsden:顺便说一句,请在您之前的问题stackoverflow.com/questions/2223866/… 中留下评论,描述您是否使用 macports 安装了 portaudio。这可能对其他人有用,例如当我切换到雪豹时。谢谢:)
标签: haskell functional-programming portaudio