Tôi cố gắng để triển khai phiên bản đơn giản nhất của Karplus-Strong algorithm sử dụng Euterpea:phản hồi Đệ quy trong Karplus-Strong Algo - mũi tên
Mã của tôi: 0,7 giây của tiếng ồn trắng bật
burst :: AudSF() Double
burst = proc() -> do
burstEnv <- envLineSeg [1,1,0,0] [0.7, 0, 9.3] -<()
noise <- noiseWhite 42 -<()
outA -< burstEnv * noise
phần có vấn đề:
karplus :: AudSF Double Double
karplus = proc input -> do
rec filtered <- filterLowPass -< (delayed, 2000)
delayed <- delayLine 0.7 -< filtered + input
outA -< filtered + input
test1 chức năng nên tạo một file 10 giây với một vài chu kỳ:
test1 = outFile "test1.wav" 10 $ burst >>> karplus
Theo như tôi biết vòng phản hồi nên chạy vào và cứ tiếp tục.
Vấn đề là đầu vào chỉ bị trễ và được lọc một lần. Nó không được đưa vào vòng lặp nữa.
Tôi nghi ngờ rằng vấn đề nằm trong sự đánh giá lười biếng không hiểu biết hoặc giá trị của tôi.
Đánh giá lười biếng có thể ảnh hưởng đến việc chương trình bị kẹt trong một vòng lặp vô hạn , nhưng nó không thể thay đổi một chương trình thực hiện thành công một thứ vào một chương trình thực hiện thành công một chương trình khác. Là chương trình bị mắc kẹt, hoặc chỉ là sai? – dfeuer
@dfeuer nó sai. Đầu ra singal không được đưa vào vòng lặp. – Lovaz
Nếu nó tạo ra kết quả sai, bạn có thể loại trừ sự lười biếng là nguyên nhân. – dfeuer