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)
sineWave は、指定された周波数とサンプル レートで正弦波の Int16 サンプルの無限リストを生成するために作成した関数です。
このコードをデバッグすると、オーディオ出力コードを putStrLn に置き換えると、関数からの最初のサンプルであるすべて 0 が出力されます。
オーディオ出力関数を使用してこのリストを反復処理するにはどうすればよいですか? 再帰やマップは使えないと思います。
編集:コードコピーミス