Я пишу аудиопрограмму в Haskell, используя Portaudio. У меня есть функция, которая генерирует список образцов, которые я хотел играть, и я пытаюсь воспроизвести их, используя следующий фрагмент кода внутри основной:Итерации над списком в haskell?
curSamps <- return (chunk 1 (sineWave 440 44100))
forever $ do
Right numSampsAvail <- getStreamWriteAvailable paStream
Right NoError <- writeStream paStream curSamps numSampsAvail
curSamps <- return (drop numSampsAvail curSamps)
синусоиды функции Я создал для генерации бесконечный список образцов Int16 синусоиды с заданной частотой и частотой дискретизации.
Когда я отлаживаю этот код, заменяя код вывода звука на putStrLn, он печатает все 0s, что является первым образцом функции.
Как я могу перебирать этот список с помощью функций вывода звука? Я не думаю, что могу использовать рекурсию или карту.
Edit: Код копирование ошибка
почему вы думаете, что не можете использовать карту? –
Каковы значения различных подвыражений? То есть что требуется 10 (sineWave 440 44100), возьмите 10 (кусок 1 (sineWave 440 44100)) и т. д.? –
@Edward Amsden: Кстати, пожалуйста, оставьте комментарий в своем предыдущем вопросе http://stackoverflow.com/questions/2223866/haskell-audio-output-on-os-x, описывающий, был ли установлен portaudio с использованием macports или нет. что может быть полезно для других, таких как я, когда я переключаюсь на снежного барса. thanks :) – yairchu