I don't see some parameters from FAUST to Scriptnode
-
Some parameters of my code in FAUST are not displayed in Scriptnode. Here is an example
import("stdfaust.lib"); declare name "Stereo Voice Harmonizer"; declare version "0.4"; declare description "Stereo voice harmonizer with formant preservation"; // Voice controls pitch1 = vgroup("Voice 1", hslider("Pitch[unit:semitones]", -12, -12, 12, 1)); pitch2 = vgroup("Voice 2", hslider("Pitch[unit:semitones]", -7, -12, 12, 1)); pitch3 = vgroup("Voice 3", hslider("Pitch[unit:semitones]", -5, -12, 12, 1)); level1 = vgroup("Voice 1", hslider("Level[style:knob]", 0.8, 0, 1, 0.01)); level2 = vgroup("Voice 2", hslider("Level[style:knob]", 0.8, 0, 1, 0.01)); level3 = vgroup("Voice 3", hslider("Level[style:knob]", 0.8, 0, 1, 0.01)); // Essential controls wetLevel = vgroup("Mix", hslider("Wet[style:knob]", 0.6, 0, 1, 0.01)); formantPreserve = vgroup("Formant", hslider("Preserve[style:knob]", 0.7, 0, 1, 0.01)); presence = vgroup("EQ", hslider("Presence[style:knob]", 0.5, 0, 1, 0.01)); // Phase vocoder windowSize = 2048; hopSize = 512; // Basic EQ simpleEQ = _ : fi.lowpass(2, 10000) : fi.peak_eq(1.0 + presence, 2500, 0.7); // Formant preservation using parallel filters - too basic :( formantBands = fi.filterbank(3, (800, 2500)); // Extract spectral envelope spectralEnvelope = _ : formantBands : par(i, 3, abs : si.smooth(0.997)) :> _; // Improved formant preservation formantProcess(x) = x : (_ <: _, (spectralEnvelope : *(formantPreserve)) ) :> *; // Enhanced voice with better formant handling voice(pitch, level) = _ : formantProcess : ef.transpose(windowSize, hopSize, pitch) : simpleEQ : *(level); // Process three voices for one channel processChannel = _ <: ( *(1-wetLevel), (voice(pitch1, level1) + voice(pitch2, level2) + voice(pitch3, level3)) * wetLevel ) :> _; // Main stereo process process = si.bus(2) : (processChannel, processChannel);
In HISE:
HiseSnippet 1901.3ocuX0sbaabEFPxPpB0soYlN45czUfJzzDjhhxRsw1RhrQSijoCUTyLY5nYIvRycH.VTrKoDcldWunOV8UoOAsWz6cO6Oj.PjikLmj.MhD6dN624rme2kj6DjjPR3M7DZZJQXYYuYuLV.gyYYV1tWMKkXY+Tm9yRDiNcDllXc9YV1+VmKvbAICom5jYoXNmDZYau4eRNg8NOwR87ee4I3HbR.IeJKqqYz.x2Pioh7Y68p+LMJpKNjbEMt.26+pyCXImxhXS.8YSm5Vo3fw32QtDKYaCGquFyGYYumyKZ0xGGNr8P+l9uXP3v.Ry10OX+1MvsNb3v1082uYX6g6CJ4VcBoBVVeAVP3.nmvBm0eD61Ds.tlxoChHxA9V8AIqm15zQznvEFGNXpdRAS0lZS0u24BZHcw74lremh.JeEEMZ1a7wTI+OAUxtfJ8DsJ84N8CxnohbJR84W6bdB3AGhAeSQUQyqk8+x4TFvPhnVLdLoaFLXwB7Nnd8pH3iJGObRRffxRPrjKYBxaR7p39it6392cQ2mzvgqjlTLYrnHR1JIKCGx9XKzKYR7.RVUzTbzDxBFgseYa5VONaZfdWWfQVx4ITwaRIlwcYQgRak78k8.VFyF712c9YXAV5TLyA7kRxDTo5XeFYJjFncQ63bFgOVvRgDgk7ePjCKbRDVTNbRlnYH.1iR9PoiJgSEyJlH9IDiU+iFi8XUwO2oGUDLZ053FqPGAK0OG5nIy723zY3PRfHWAehS2uecSCq+ImF5ZRCAYJE9SMCQc+d+Ul.9OcxC1SyHo3LxUrdQ3YdbbbZD4aAcrJZPDKXbe56IKmgjpUgSjb3ELBmjPh3qShzV+DUbx5aYSDzj2cAVjQuyx14xIw8g55AjSMZGLm8FxbH835xwx3h9PSJ0fO.OFh9xw1Fh9yIVH86Rh3VV1Xk6v7tk81Za+Y7z4ScMIiKCNs21odM3OqWGEwt8TVbJ0D1BNE0b8XQyRGwRnAxozbLW0ecLaBHUi9C8jtBSijw48mvgJGguIoOvrpQnLN6RVH71VcwAfgcVOrXjLeQV6ABNIY0BVDjVRWyiSjVXcKvRLHwcdyRsoCTyXo8P1pzdSIcsAQq.RIrsyP7Dtvpjx7TPYxH0zTVkXmupGRhEp4AyXFAI8aHE8NNmFAHedn00xXNoX+ZbVLXh4jLURbQt+LY.SObFHenQDe9ZTAaElFziEif2uflXXzQ5fst.e2hw9v39BRpLAxx9Kjzq+B8S61Gr+gMZcXCkWvw4u.GNxrNU8p+2G9v+4kV+jKnsc9FxTRTIQYNgzJE01NOyuQIgskiZhbooktFbUE46Ct2qJB9V4fmK8b3yanjKA0bu5e+9+wK6OlbqNNpHmRY65zKivUY.ez81OuhOa5pDe+aklkqvYuiH3VkClrJE.aeuPxm5bN+ZI0.7BeFTA3DFabLVU6Y8NEvuDUJiwAYraBzE+katekZFHgJQkguCbHeXLx2Z58sXwvQYuIHnLTKsvFq6BattKb+0cgsV2Edv5tv1q6BO7gWn7lFudhfEq6eA4O85nBBss6jfgd0pCZXQf18gvQY0m3PFqtXlDxccg9UpP9gTYy8Mjeo0juPW5+44kpqExSmexYqMZusCMNkkI71kKBU7VKhNX2JG65FRBhfSxfjHg1ExgyHLj5BgHCbumjs6wK3apt6LZ2501uvzPWLkRqHYPYpBkQKPAAY0iPCYYw3Dg7HTxzekEA.x84O2H14I.toxh.9n+HZ56xXSR81US2e2pnQ7HZHbMjcU0O+gIv8ANhSfKvxRH7+Jv.TD17g5+JvVUAWikfqwiBt1qDslKgVyGEZstOZtQxlLOvdU0H5G3hYQjiFmvFHgpdsCgO.TjuVWgkBpGXe9o.0CrIejPI8ucfyrjHn3nbe7sDgBfBx3B5cEwG5yuD5GbezMAUyaoT.stZJkbKFtVB112G1TSGxB304sKAEvvRP0ZU6+divbHChE.GQKC4dKMIjcqrkIfei56e3wtiXolws7anWzIXNM.04stbp7VFcdKP7FzQHWD7LjVCNGr7vfdxPo5vSEfVom4LlRviug727fCef9Rz7sVUTiVxe7.X2azxtqHAEMgCc+PvcdvQQf2Bp8H6FidFRvXnAJU7Hu4tgSvIgbPMAgpYb.NYrWypHuCkhRJvEgD2IxfyGffyjG.uEgHIPz.zO1c9LcLSX11kDwQRMxiVEAXiGHGyo03wLlXjW8ZvQ4p.ViuBciVVmGC2.aJIbkkfxCgT2Ox6tJf.uCPz6FzevXsuop9aukzsiP64cuXvJUbUBeOyFMYj7mcKzTUTUJb.QH+M6lqN.CgQfY1UwhmpBSUjJGrRImdIMEcjZRxvZfFkvSYbhWdjEDqpCophT3Uwv9hfI8v87zhwDmZPVLJiPzJLWJU3poP4Y8YXbM2l0bjFk9A1IOCb9OadlckpZaVgMkuYW4WA8kJhnBDaXH1XUDaZH1Dbr6glKB2hd4KfKpg35NPFcbttBJIDeLXBjrHyR7JuEphJOtxwVV+eHqpgzF
-
@Mighty23 as you see HISE ignores the Faust vgroup construct, so try removing it from your faust code and renaming the hsliders pitch1, pitch2, pitch3 etc.
-
@Lindon like this:
import("stdfaust.lib"); declare name "Stereo Voice Harmonizer"; declare version "0.4"; declare description "Stereo voice harmonizer with formant preservation"; // Voice controls pitch1 = hslider("Pitch1", -12, -12, 12, 1); pitch2 = hslider("Pitch2", -7, -12, 12, 1); pitch3 = hslider("Pitch3", -5, -12, 12, 1); level1 = hslider("Level1", 0.8, 0, 1, 0.01); level2 = hslider("Level2", 0.8, 0, 1, 0.01); level3 = hslider("Level3", 0.8, 0, 1, 0.01); // Essential controls wetLevel = hslider("Wet", 0.6, 0, 1, 0.01); formantPreserve = hslider("Preserve", 0.7, 0, 1, 0.01); presence = hslider("Presence", 0.5, 0, 1, 0.01); // Phase vocoder windowSize = 2048; hopSize = 512; // Basic EQ simpleEQ = _ : fi.lowpass(2, 10000) : fi.peak_eq(1.0 + presence, 2500, 0.7); // Formant preservation using parallel filters - too basic :( formantBands = fi.filterbank(3, (800, 2500)); // Extract spectral envelope spectralEnvelope = _ : formantBands : par(i, 3, abs : si.smooth(0.997)) :> _; // Improved formant preservation formantProcess(x) = x : (_ <: _, (spectralEnvelope : *(formantPreserve)) ) :> *; // Enhanced voice with better formant handling voice(pitch, level) = _ : formantProcess : ef.transpose(windowSize, hopSize, pitch) : simpleEQ : *(level); // Process three voices for one channel processChannel = _ <: ( *(1-wetLevel), (voice(pitch1, level1) + voice(pitch2, level2) + voice(pitch3, level3)) * wetLevel ) :> _; // Main stereo process process = si.bus(2) : (processChannel, processChannel);
-
@Lindon It was so obvious. Thank you for your help, it really gave me a breakthrough.
-
-
@Mighty23 nice effect by the way - did you write the faust code?
-
@Lindon I'm running some tests for a vocal harmonizer, exploring different solutions. I still don't think I'm quite there yet, but I really appreciate the help.
Like many, I rely on AI to assist me. Personally, I prefer Claude over chatGPT.
I believe that, for now, without proper 'guidance,' they tend to oversimplify the structure of what you ask for. They first need to be supplied with solid documentation and, ideally, an already working example of what you're trying to achieve -
@Mighty23 so you are using AI(Claude/ChatGPT) to generate Faust code for you?
-
@Lindon Yes, I use it as a support tool to explore different solutions in Faust, but not primarily to generate code directly. In my experience, using it to generate code from scratch can often be much more time-consuming. Instead, I focus on:
- Analyzing and better understanding the documentation
- Discussing various approaches and strategies
- Reviewing the logic of my code
- Getting suggestions for potential optimizations
-
@Mighty23 wow it really seems to be working for you - love to see what you come up with at the end...
-
@Lindon said in I don't see some parameters from FAUST to Scriptnode:
Claude
Which prompt you entered on claude ?
-
@Mighty23 as you see HISE ignores the Faust vgroup construct,
what do you mean here ?
-
@sletz
In the Faust environment you can name sliders(for example) the same as long as they are in a vgroup.... in the HISE environment you cant have two sliders with the same name, no matter where they are, or how they are grouped :Two hsliders both called "mySlider" results in only one of them showing up in the interface...
as you can see in the original post,:
pitch1 = vgroup("Voice 1", hslider("Pitch[unit:semitones]", -12, -12, 12, 1)); pitch2 = vgroup("Voice 2", hslider("Pitch[unit:semitones]", -7, -12, 12, 1)); pitch3 = vgroup("Voice 3", hslider("Pitch[unit:semitones]", -5, -12, 12, 1));
gets one just one knob called Pitch
-
@sletz meanwhile if you are here...could you look at this:
https://forum.hise.audio/topic/11165/more-than-one-faust-node-one-not-compiling-and-running-properly
-
OK then the HISE architecture machinery could possibly use "shortname", which can be generated to uniquely name same "labels" in different groups. See: https://faustdoc.grame.fr/manual/architectures/#dsp-json-description
@Christoph-Hart would this make sense ?
-
@sletz said in I don't see some parameters from FAUST to Scriptnode:
OK then the HISE architecture machinery could possibly use "shortname", which can be generated to uniquely name same "labels" in different groups. See: https://faustdoc.grame.fr/manual/architectures/#dsp-json-description
@Christoph-Hart would this make sense ?
Im not sure its that big a deal really - once you know it then you can work with it.
-
@sletz sure but then you cannot simply copy/paste Faust code and be sure it will work this can surely be improved.
-
@DabDab said in I don't see some parameters from FAUST to Scriptnode:
Which prompt you entered on claude ?
Provide prompts that clearly outline your goal and your level of expertise. Guide the AI to steer clear of common pitfalls by specifying the libraries and functions you intend to use upfront. Keep in mind that the most frequent AI errors are related to signal routing rather than syntax. Therefore, describe the 'sequential composition' you aim to achieve, even if it seems like a minor or obvious detail to you.
Have it tackle one step at a time, avoiding the assignment of multiple tasks simultaneously. Once your questions are clarified or you've obtained a portion of code that satisfies you, start a new chat and move on to the next (sub)task. -
@Mighty23 said in I don't see some parameters from FAUST to Scriptnode:
Provide prompts that clearly outline your goal and your level of expertise. Guide the AI to steer clear of common pitfalls by specifying the libraries and functions you intend to use upfront. Keep in mind that the most frequent AI errors are related to signal routing rather than syntax. Therefore, describe the 'sequential composition' you aim to achieve, even if it seems like a minor or obvious detail to you.
Have it tackle one step at a time, avoiding the assignment of multiple tasks simultaneously. Once your questions are clarified or you've obtained a portion of code that satisfies you, start a new chat and move on to the next (sub)task.Nice. I am using FAUST for the past 5-6 years. But I am curious to implement it with AI.