Ich versuche, die einfachste Version von Karplus-Strong algorithm mit Euterpea zu implementieren:rekursive Feedback in Karplus-Strong Algo - Pfeile
Mein Code: 0,7 Sekunden von weißem Rauschen platzen
burst :: AudSF() Double
burst = proc() -> do
burstEnv <- envLineSeg [1,1,0,0] [0.7, 0, 9.3] -<()
noise <- noiseWhite 42 -<()
outA -< burstEnv * noise
problematischer Teil:
karplus :: AudSF Double Double
karplus = proc input -> do
rec filtered <- filterLowPass -< (delayed, 2000)
delayed <- delayLine 0.7 -< filtered + input
outA -< filtered + input
test1 Funktion sollte eine Datei von 10 Sekunden mit wenigen Zyklen erstellen:
test1 = outFile "test1.wav" 10 $ burst >>> karplus
Soweit ich die Rückkopplungsschleife wissen sollte und so weiter laufen.
Das Problem ist der Eingang wird nur verzögert und einmal gefiltert. Es wird nicht wieder in die Schleife gespeist.
Ich vermute, dass das Problem darin liegt, dass ich keine faule Bewertung oder Wertüberschreitung verstehe.
Lazy Evaluation kann beeinflussen, ob ein Programm in einer Endlosschleife steckenbleibt , aber es kann kein Programm ändern, das erfolgreich eine Sache in ein Programm einführt, das erfolgreich ein anderes tut. Ist das Programm blockiert oder einfach falsch? – dfeuer
@dfeuer es ist falsch. Das Ausgangssignal wird nicht in die Schleife eingespeist. – Lovaz
Wenn es falsche Ausgabe produziert, können Sie Faulheit als die Ursache ausschließen. – dfeuer