faust-带lfo波形切换和合成器波形切换的demo(音量lfo和音色波形切换,合成器音色波形切换)

import("stdfaust.lib");

// 0 1 2 3: sin,tri,saw,square
wave_shape = hslider("合成器波形选择[style:knob]",0,0,3,1);

// 0 1 2 3: sin,tri,saw,square
lfo_type = hslider("lfo波形选择[style:knob]",0,0,3,1);
volume_lfo_rate = hslider("lfo_rate",0,0,16,1);

// 切换音量lfo的波形类型
volume_lfo_osc = (os.osc(volume_lfo_rate), os.triangle(volume_lfo_rate), os.sawtooth(volume_lfo_rate), os.square(volume_lfo_rate)):ba.selectn(4,lfo_type);
// 切换振荡器的波形
process = (os.osc(440) * volume_lfo_osc, os.triangle(440) * volume_lfo_osc, os.sawtooth(440) * volume_lfo_osc, os.square(440) * volume_lfo_osc):ba.selectn(4,wave_shape);

 ai优化版

import("stdfaust.lib");

wave_shape = hslider("合成器波形选择[style:knob]",0,0,3,1);
lfo_type = hslider("lfo波形选择[style:knob]",0,0,3,1);
volume_lfo_rate = hslider("lfo_rate[style:knob]",1,0.1,20,0.1);
volume_lfo_depth = hslider("lfo_depth[style:knob]",0.5,0,1,0.01);

// 改进的LFO波形选择 - 确保所有波形都有合适的范围
volume_lfo_osc = (
    os.osc(volume_lfo_rate),                    // 正弦波: -1 to 1
    os.triangle(volume_lfo_rate),               // 三角波: -1 to 1
    os.sawtooth(volume_lfo_rate),               // 锯齿波: -1 to 1
    os.square(volume_lfo_rate)                  // 方波: -1 to 1
): ba.selectn(4,lfo_type);

// 将双极性信号转换为单极性,并应用深度控制
// 这样可以确保所有波形类型都有可听的效果
unipolar_lfo = (volume_lfo_osc + 1) / 2;  // 转换为0-1范围
modulated_lfo = (1 - volume_lfo_depth) + unipolar_lfo * volume_lfo_depth;

//final_mod_lfo = 
// 切换振荡器的波形
process = (
    os.osc(440),
    os.triangle(440),
    os.sawtooth(440),
    os.square(440)
): ba.selectn(4,wave_shape) * hgroup("volume_lfo_demo",modulated_lfo);

 

posted on 2025-11-04 11:36  小沙盒工作室  阅读(5)  评论(0)    收藏  举报