Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Lv2: Do not duplicate mono plugins #7387

Open
wants to merge 14 commits into
base: master
Choose a base branch
from

Conversation

JohannesLorenz
Copy link
Contributor

@JohannesLorenz JohannesLorenz commented Jul 21, 2024

This merges Lv2ControlBase and Lv2Proc into 1 class, as discussed in Discord.

The PR is preparation for adding L/R Routing, as proposed by @messmerd .

It already should be reviewed:

  1. Since the code was almost only moved between files, a code review over the whole PR seems overkill to me. The only interesting part is the Lv2Proc.cpp diff, as there, we now add together channel inputs and duplicate channel outputs for mono plugins, instead of duplicating processors.
  2. Testing should be versatile - in theory, anything Lv2 related could have gone wrong (but yet unlikely, due to copy and paste).

@JohannesLorenz JohannesLorenz added needs code review A functional code review is currently required for this PR needs testing This pull request needs more testing labels Jul 21, 2024
Copy link
Member

@messmerd messmerd left a comment

Choose a reason for hiding this comment

The reason will be displayed to describe this comment to others. Learn more.

Quick look over review

include/ModelGroupView.h Outdated Show resolved Hide resolved
src/core/ModelGroup.cpp Outdated Show resolved Hide resolved
src/core/ModelGroup.cpp Outdated Show resolved Hide resolved
include/ModelGroup.h Outdated Show resolved Hide resolved
include/ModelGroup.h Outdated Show resolved Hide resolved
include/ModelGroup.h Outdated Show resolved Hide resolved
include/ModelGroupView.h Outdated Show resolved Hide resolved
@JohannesLorenz JohannesLorenz removed the needs code review A functional code review is currently required for this PR label Jul 23, 2024
@messmerd
Copy link
Member

Are there any mono Lv2 plugins you'd recommend testing this with?

@JohannesLorenz
Copy link
Contributor Author

Are there any mono Lv2 plugins you'd recommend testing this with?

Any (though, for regression checks, testing stereo plugins will not harm). The following have a lot/only mono:

  • CALF
  • blop
  • fomp
  • blablack
  • guitarix (at least some)
  • LSP (there are mono variants of each effect)
Detailled list of mono plugins

http://calf.sourceforge.net/plugins/Analyzer
http://calf.sourceforge.net/plugins/BassEnhancer
http://calf.sourceforge.net/plugins/CompensationDelay
http://calf.sourceforge.net/plugins/Compressor
http://calf.sourceforge.net/plugins/Crusher
http://calf.sourceforge.net/plugins/Deesser
http://calf.sourceforge.net/plugins/Emphasis
http://calf.sourceforge.net/plugins/EnvelopeFilter
http://calf.sourceforge.net/plugins/Equalizer12Band
http://calf.sourceforge.net/plugins/Equalizer30Band
http://calf.sourceforge.net/plugins/Equalizer5Band
http://calf.sourceforge.net/plugins/Equalizer8Band
http://calf.sourceforge.net/plugins/Exciter
http://calf.sourceforge.net/plugins/Filter
http://calf.sourceforge.net/plugins/Filterclavier
http://calf.sourceforge.net/plugins/Flanger
http://calf.sourceforge.net/plugins/Gate
http://calf.sourceforge.net/plugins/HaasEnhancer
http://calf.sourceforge.net/plugins/Limiter
http://calf.sourceforge.net/plugins/MonoCompressor
http://calf.sourceforge.net/plugins/MonoInput
http://calf.sourceforge.net/plugins/MultiChorus
http://calf.sourceforge.net/plugins/MultiSpread
http://calf.sourceforge.net/plugins/MultibandCompressor
http://calf.sourceforge.net/plugins/MultibandEnhancer
http://calf.sourceforge.net/plugins/MultibandGate
http://calf.sourceforge.net/plugins/MultibandLimiter
http://calf.sourceforge.net/plugins/Phaser
http://calf.sourceforge.net/plugins/Pitch
http://calf.sourceforge.net/plugins/Pulsator
http://calf.sourceforge.net/plugins/Reverb
http://calf.sourceforge.net/plugins/ReverseDelay
http://calf.sourceforge.net/plugins/RingModulator
http://calf.sourceforge.net/plugins/RotarySpeaker
http://calf.sourceforge.net/plugins/Saturator
http://calf.sourceforge.net/plugins/SidechainCompressor
http://calf.sourceforge.net/plugins/SidechainGate
http://calf.sourceforge.net/plugins/SidechainLimiter
http://calf.sourceforge.net/plugins/StereoTools
http://calf.sourceforge.net/plugins/TapeSimulator
http://calf.sourceforge.net/plugins/TransientDesigner
http://calf.sourceforge.net/plugins/VintageDelay
http://calf.sourceforge.net/plugins/Vinyl
http://calf.sourceforge.net/plugins/XOver2Band
http://calf.sourceforge.net/plugins/XOver3Band
http://calf.sourceforge.net/plugins/XOver4Band
http://distrho.sf.net/plugins/Kars
http://distrho.sf.net/plugins/MaBitcrush
http://distrho.sf.net/plugins/MaFreeverb
http://distrho.sf.net/plugins/MaPitchshift
http://distrho.sf.net/plugins/Nekobi
http://distrho.sf.net/plugins/glBars
http://drobilla.net/plugins/blop/amp
http://drobilla.net/plugins/blop/lp4pole
http://drobilla.net/plugins/blop/pulse
http://drobilla.net/plugins/blop/random
http://drobilla.net/plugins/blop/sawtooth
http://drobilla.net/plugins/blop/square
http://drobilla.net/plugins/blop/sync_pulse
http://drobilla.net/plugins/blop/sync_square
http://drobilla.net/plugins/blop/tracker
http://drobilla.net/plugins/blop/triangle
http://drobilla.net/plugins/fomp/autowah
http://drobilla.net/plugins/fomp/cs_chorus1
http://drobilla.net/plugins/fomp/cs_chorus2
http://drobilla.net/plugins/fomp/cs_phaser1
http://drobilla.net/plugins/fomp/cs_phaser1_lfo
http://drobilla.net/plugins/fomp/mvchpf1
http://drobilla.net/plugins/fomp/mvclpf1
http://drobilla.net/plugins/fomp/mvclpf2
http://drobilla.net/plugins/fomp/mvclpf3
http://drobilla.net/plugins/fomp/mvclpf4
http://drobilla.net/plugins/fomp/parametric1
http://drobilla.net/plugins/fomp/pulse_vco
http://drobilla.net/plugins/fomp/rec_vco
http://drobilla.net/plugins/fomp/saw_vco
http://drobilla.net/plugins/fomp/triple_chorus
http://gareus.org/oss/lv2/b_whirl#extended
http://gareus.org/oss/lv2/b_whirl#simple
http://gareus.org/oss/lv2/darc#mono
http://gareus.org/oss/lv2/dpl#mono
http://gareus.org/oss/lv2/fat1
http://gareus.org/oss/lv2/fat1#microtonal
http://gareus.org/oss/lv2/fat1#scales
http://gareus.org/oss/lv2/fil4#mono
http://gareus.org/oss/lv2/meters#BBCmono
http://gareus.org/oss/lv2/meters#DINmono
http://gareus.org/oss/lv2/meters#EBUmono
http://gareus.org/oss/lv2/meters#K12mono
http://gareus.org/oss/lv2/meters#K14mono
http://gareus.org/oss/lv2/meters#K20mono
http://gareus.org/oss/lv2/meters#NORmono
http://gareus.org/oss/lv2/meters#SigDistHist
http://gareus.org/oss/lv2/meters#TPnRMSmono
http://gareus.org/oss/lv2/meters#VUmono
http://gareus.org/oss/lv2/meters#bitmeter
http://gareus.org/oss/lv2/meters#dBTPmono
http://gareus.org/oss/lv2/meters#dr14mono
http://gareus.org/oss/lv2/meters#spectr30mono
http://gareus.org/oss/lv2/nodelay
http://gareus.org/oss/lv2/nodelay#mega
http://gareus.org/oss/lv2/nodelay#micro
http://gareus.org/oss/lv2/onsettrigger#bassdrum_mono
http://gareus.org/oss/lv2/phaserotate
http://gareus.org/oss/lv2/sisco#Mono
http://gareus.org/oss/lv2/spectra#Mono
http://gareus.org/oss/lv2/testsignal
http://gareus.org/oss/lv2/tuna#one
http://gareus.org/oss/lv2/tuna#two
http://gareus.org/oss/lv2/zeroconvolv#CfgMono
http://gareus.org/oss/lv2/zeroconvolv#CfgMonoToStereo
http://gareus.org/oss/lv2/zeroconvolv#Mono
http://gareus.org/oss/lv2/zeroconvolv#MonoToStereo
http://github.com/blablack/ams-lv2/dynamicwaves2_4
http://github.com/blablack/ams-lv2/dynamicwaves2_6
http://github.com/blablack/ams-lv2/dynamicwaves2_8
http://github.com/blablack/ams-lv2/dynamicwaves_4
http://github.com/blablack/ams-lv2/dynamicwaves_6
http://github.com/blablack/ams-lv2/dynamicwaves_8
http://github.com/blablack/ams-lv2/fftvocoder
http://github.com/blablack/ams-lv2/mixer_2ch
http://github.com/blablack/ams-lv2/mixer_4ch
http://github.com/blablack/ams-lv2/mixer_8ch
http://github.com/blablack/ams-lv2/mooglpf
http://github.com/blablack/ams-lv2/ringmodulator
http://github.com/blablack/ams-lv2/vcaexp
http://github.com/blablack/ams-lv2/vcalin
http://github.com/blablack/ams-lv2/vcf
http://github.com/blablack/ams-lv2/vco2
http://github.com/blablack/ams-lv2/vco3
http://github.com/blablack/ams-lv2/vcorgan2_4
http://github.com/blablack/ams-lv2/vcorgan2_6
http://github.com/blablack/ams-lv2/vcorgan2_8
http://github.com/blablack/ams-lv2/vcorgan_4
http://github.com/blablack/ams-lv2/vcorgan_6
http://github.com/blablack/ams-lv2/vcorgan_8
http://github.com/blablack/ams-lv2/vcpanning
http://github.com/blablack/deteriorate-lv2/downsampler_mono
http://github.com/blablack/deteriorate-lv2/granulator_mono
http://guitarix.sourceforge.net/plugins/gx_AxisFace_#_AxisFace_
http://guitarix.sourceforge.net/plugins/gx_CreamMachine_#_CreamMachine_
http://guitarix.sourceforge.net/plugins/gx_DOP250_#_DOP250_
http://guitarix.sourceforge.net/plugins/gx_Heathkit_#_Heathkit_
http://guitarix.sourceforge.net/plugins/gx_KnightFuzz_#_KnightFuzz_
http://guitarix.sourceforge.net/plugins/gx_MicroAmp_#_MicroAmp_
http://guitarix.sourceforge.net/plugins/gx_SunFace_#_SunFace_
http://guitarix.sourceforge.net/plugins/gx_TubeDistortion_#_TubeDistortion_
http://guitarix.sourceforge.net/plugins/gx_aclipper_#_aclipper_
http://guitarix.sourceforge.net/plugins/gx_alembic#alembic
http://guitarix.sourceforge.net/plugins/gx_amp#GUITARIX
http://guitarix.sourceforge.net/plugins/gx_ampegsvt_#_ampegsvt_
http://guitarix.sourceforge.net/plugins/gx_bajatubedriver_#_bajatubedriver_
http://guitarix.sourceforge.net/plugins/gx_barkgraphiceq_#_barkgraphiceq_
http://guitarix.sourceforge.net/plugins/gx_blueamp_#_blueamp_
http://guitarix.sourceforge.net/plugins/gx_bmp_#_bmp_
http://guitarix.sourceforge.net/plugins/gx_boobtube_#_boobtube_
http://guitarix.sourceforge.net/plugins/gx_bossds1_#_bossds1_
http://guitarix.sourceforge.net/plugins/gx_bottlerocket_#_bottlerocket_
http://guitarix.sourceforge.net/plugins/gx_cabinet#CABINET
http://guitarix.sourceforge.net/plugins/gx_clubdrive_#_clubdrive_
http://guitarix.sourceforge.net/plugins/gx_colwah_#_colwah_
http://guitarix.sourceforge.net/plugins/gx_compressor#_compressor
http://guitarix.sourceforge.net/plugins/gx_cstb_#_cstb_
http://guitarix.sourceforge.net/plugins/gx_detune_#_detune_
http://guitarix.sourceforge.net/plugins/gx_digital_delay_#_digital_delay_
http://guitarix.sourceforge.net/plugins/gx_duck_delay_#_duck_delay_
http://guitarix.sourceforge.net/plugins/gx_epic_#_epic_
http://guitarix.sourceforge.net/plugins/gx_eternity_#_eternity_
http://guitarix.sourceforge.net/plugins/gx_expander#_expander
http://guitarix.sourceforge.net/plugins/gx_flanger#_flanger
http://guitarix.sourceforge.net/plugins/gx_fumaster_#_fumaster_
http://guitarix.sourceforge.net/plugins/gx_fuzz_#fuzz_
http://guitarix.sourceforge.net/plugins/gx_fuzzface_#_fuzzface_
http://guitarix.sourceforge.net/plugins/gx_fuzzfacefm_#_fuzzfacefm_
http://guitarix.sourceforge.net/plugins/gx_gcb_95_#_gcb_95_
http://guitarix.sourceforge.net/plugins/gx_graphiceq_#_graphiceq_
http://guitarix.sourceforge.net/plugins/gx_guvnor_#_guvnor_
http://guitarix.sourceforge.net/plugins/gx_hfb_#_hfb_
http://guitarix.sourceforge.net/plugins/gx_hogsfoot_#_hogsfoot_
http://guitarix.sourceforge.net/plugins/gx_hornet_#_hornet_
http://guitarix.sourceforge.net/plugins/gx_hotbox_#_hotbox_
http://guitarix.sourceforge.net/plugins/gx_hyperion_#_hyperion_
http://guitarix.sourceforge.net/plugins/gx_jcm800pre_#_jcm800pre_
http://guitarix.sourceforge.net/plugins/gx_liquiddrive_#_liquiddrive_
http://guitarix.sourceforge.net/plugins/gx_livelooper_#_livelooper_
http://guitarix.sourceforge.net/plugins/gx_luna_#_luna_
http://guitarix.sourceforge.net/plugins/gx_maestro_fz1b_#_maestro_fz1b_
http://guitarix.sourceforge.net/plugins/gx_maestro_fz1s_#_maestro_fz1s_
http://guitarix.sourceforge.net/plugins/gx_mbcompressor_#_mbcompressor_
http://guitarix.sourceforge.net/plugins/gx_mbdelay_#_mbdelay_
http://guitarix.sourceforge.net/plugins/gx_mbdistortion_#_mbdistortion_
http://guitarix.sourceforge.net/plugins/gx_mbecho_#_mbecho_
http://guitarix.sourceforge.net/plugins/gx_mbreverb_#_mbreverb_
http://guitarix.sourceforge.net/plugins/gx_mole_#_mole_
http://guitarix.sourceforge.net/plugins/gx_muff_#_muff_
http://guitarix.sourceforge.net/plugins/gx_mxrdist_#_mxrdist_
http://guitarix.sourceforge.net/plugins/gx_oc_2_#_oc_2_
http://guitarix.sourceforge.net/plugins/gx_phaser#_phaser
http://guitarix.sourceforge.net/plugins/gx_plexi_#_plexi_
http://guitarix.sourceforge.net/plugins/gx_quack_#_quack_
http://guitarix.sourceforge.net/plugins/gx_rangem_#_rangem_
http://guitarix.sourceforge.net/plugins/gx_redeye#bigchump
http://guitarix.sourceforge.net/plugins/gx_redeye#chump
http://guitarix.sourceforge.net/plugins/gx_redeye#vibrochump
http://guitarix.sourceforge.net/plugins/gx_room_simulator_#_room_simulator_
http://guitarix.sourceforge.net/plugins/gx_saturate_#_saturate_
http://guitarix.sourceforge.net/plugins/gx_scream_#_scream_
http://guitarix.sourceforge.net/plugins/gx_sd1sim_#_sd1sim_
http://guitarix.sourceforge.net/plugins/gx_sd2lead_#_sd2lead_
http://guitarix.sourceforge.net/plugins/gx_sfp_#_sfp_
http://guitarix.sourceforge.net/plugins/gx_shakatube_#_shakatube_
http://guitarix.sourceforge.net/plugins/gx_sloopyblue_#_sloopyblue_
http://guitarix.sourceforge.net/plugins/gx_slowgear_#_slowgear_
http://guitarix.sourceforge.net/plugins/gx_studiopre#studiopre
http://guitarix.sourceforge.net/plugins/gx_supersonic_#_supersonic_
http://guitarix.sourceforge.net/plugins/gx_susta_#_susta_
http://guitarix.sourceforge.net/plugins/gx_switched_tremolo_#_switched_tremolo_
http://guitarix.sourceforge.net/plugins/gx_timray_#_timray_
http://guitarix.sourceforge.net/plugins/gx_tonemachine_#_tonemachine_
http://guitarix.sourceforge.net/plugins/gx_tremolo#_tremolo
http://guitarix.sourceforge.net/plugins/gx_uvox_#_uvox_
http://guitarix.sourceforge.net/plugins/gx_valvecaster_#_valvecaster_
http://guitarix.sourceforge.net/plugins/gx_vfm_#_vfm_
http://guitarix.sourceforge.net/plugins/gx_vmk2d_#_vmk2d_
http://guitarix.sourceforge.net/plugins/gx_voodoo_#_voodoo_
http://guitarix.sourceforge.net/plugins/gx_voxbass_#_voxbass_
http://guitarix.sourceforge.net/plugins/gx_vstb_#_vstb_
http://guitarix.sourceforge.net/plugins/gx_w20#w20
http://guitarix.sourceforge.net/plugins/gxautowah#autowah
http://guitarix.sourceforge.net/plugins/gxautowah#wah
http://guitarix.sourceforge.net/plugins/gxbooster#booster
http://guitarix.sourceforge.net/plugins/gxechocat#echocat
http://guitarix.sourceforge.net/plugins/gxmetal_amp#metal_amp
http://guitarix.sourceforge.net/plugins/gxmetal_head#metal_head
http://guitarix.sourceforge.net/plugins/gxtape#tape
http://guitarix.sourceforge.net/plugins/gxtilttone#tilttone
http://guitarix.sourceforge.net/plugins/gxts9#ts9sim
http://guitarix.sourceforge.net/plugins/gxtubedelay#tubedelay
http://guitarix.sourceforge.net/plugins/gxtubetremelo#tubetremelo
http://guitarix.sourceforge.net/plugins/gxtubevibrato#tubevibrato
http://guitarix.sourceforge.net/plugins/gxtuner#tuner
http://kxstudio.sf.net/carla/plugins/audiogain
http://lsp-plug.in/plugins/lv2/ab_tester_x2_mono
http://lsp-plug.in/plugins/lv2/ab_tester_x4_mono
http://lsp-plug.in/plugins/lv2/ab_tester_x8_mono
http://lsp-plug.in/plugins/lv2/art_delay_mono
http://lsp-plug.in/plugins/lv2/autogain_mono
http://lsp-plug.in/plugins/lv2/beat_breather_mono
http://lsp-plug.in/plugins/lv2/chorus_mono
http://lsp-plug.in/plugins/lv2/clipper_mono
http://lsp-plug.in/plugins/lv2/comp_delay_mono
http://lsp-plug.in/plugins/lv2/compressor_mono
http://lsp-plug.in/plugins/lv2/crossover_mono
http://lsp-plug.in/plugins/lv2/dyna_processor_mono
http://lsp-plug.in/plugins/lv2/expander_mono
http://lsp-plug.in/plugins/lv2/filter_mono
http://lsp-plug.in/plugins/lv2/flanger_mono
http://lsp-plug.in/plugins/lv2/gate_mono
http://lsp-plug.in/plugins/lv2/gott_compressor_mono
http://lsp-plug.in/plugins/lv2/graph_equalizer_x16_mono
http://lsp-plug.in/plugins/lv2/graph_equalizer_x32_mono
http://lsp-plug.in/plugins/lv2/impulse_responses_mono
http://lsp-plug.in/plugins/lv2/impulse_reverb_mono
http://lsp-plug.in/plugins/lv2/latency_meter
http://lsp-plug.in/plugins/lv2/limiter_mono
http://lsp-plug.in/plugins/lv2/loud_comp_mono
http://lsp-plug.in/plugins/lv2/mb_clipper_mono
http://lsp-plug.in/plugins/lv2/mb_compressor_mono
http://lsp-plug.in/plugins/lv2/mb_dyna_processor_mono
http://lsp-plug.in/plugins/lv2/mb_expander_mono
http://lsp-plug.in/plugins/lv2/mb_gate_mono
http://lsp-plug.in/plugins/lv2/mb_limiter_mono
http://lsp-plug.in/plugins/lv2/mixer_x16_mono
http://lsp-plug.in/plugins/lv2/mixer_x4_mono
http://lsp-plug.in/plugins/lv2/mixer_x8_mono
http://lsp-plug.in/plugins/lv2/noise_generator_x1
http://lsp-plug.in/plugins/lv2/oscillator_mono
http://lsp-plug.in/plugins/lv2/para_equalizer_x16_mono
http://lsp-plug.in/plugins/lv2/para_equalizer_x32_mono
http://lsp-plug.in/plugins/lv2/para_equalizer_x8_mono
http://lsp-plug.in/plugins/lv2/profiler_mono
http://lsp-plug.in/plugins/lv2/room_builder_mono
http://lsp-plug.in/plugins/lv2/sampler_mono
http://lsp-plug.in/plugins/lv2/sc_autogain_mono
http://lsp-plug.in/plugins/lv2/sc_compressor_mono
http://lsp-plug.in/plugins/lv2/sc_dyna_processor_mono
http://lsp-plug.in/plugins/lv2/sc_expander_mono
http://lsp-plug.in/plugins/lv2/sc_gate_mono
http://lsp-plug.in/plugins/lv2/sc_gott_compressor_mono
http://lsp-plug.in/plugins/lv2/sc_limiter_mono
http://lsp-plug.in/plugins/lv2/sc_mb_compressor_mono
http://lsp-plug.in/plugins/lv2/sc_mb_dyna_processor_mono
http://lsp-plug.in/plugins/lv2/sc_mb_expander_mono
http://lsp-plug.in/plugins/lv2/sc_mb_gate_mono
http://lsp-plug.in/plugins/lv2/sc_mb_limiter_mono
http://lsp-plug.in/plugins/lv2/slap_delay_mono
http://lsp-plug.in/plugins/lv2/spectrum_analyzer_x1
http://lsp-plug.in/plugins/lv2/surge_filter_mono
http://lsp-plug.in/plugins/lv2/trigger_midi_mono
http://lsp-plug.in/plugins/lv2/trigger_mono
http://open-music-kontrollers.ch/lv2/mephisto#audio_1x1
http://www.niallmoody.com/ndcplugs/cycleshifter.htm
https://bsutherland.github.io/JuceOPLVSTi/
https://github.com/asb2m10/dexed
https://github.com/klangfreund/SpectrumAnalyser
https://github.com/kronihias/ambix/ambix_encoder
urn:zamaudio:ZaMultiComp
urn:zamaudio:ZamAutoSat
urn:zamaudio:ZamComp
urn:zamaudio:ZamDelay
urn:zamaudio:ZamDynamicEQ
urn:zamaudio:ZamEQ2
urn:zamaudio:ZamGEQ31
urn:zamaudio:ZamGate
urn:zamaudio:ZamGrains
urn:zamaudio:ZamNoise
urn:zamaudio:ZamPhono
urn:zamaudio:ZamTube

@JohannesLorenz
Copy link
Contributor Author

This is very likely buggy for mono plugins. From looking at the code, it looks like in that for mono plugins, inPorts().m_right and outPorts().m_right will be nullptr, so it will only read on left side and only write on left side.

@JohannesLorenz
Copy link
Contributor Author

@messmerd Can you please review my enum, which I want to use for input and output Combo Boxes? Most should be correct (according to Discord). For the option "PC Output, Stereo Plugin:" in "Left", I was not 100% sure if the right plugin port should be averaged with the left or be discarded, but I assumed the latter.

enum LR
{
	// PC (=Pin Connector) mapping:
	// For a Stereo Plugin, this means the Left->Left and Right->Right bits are set,
	// For a Mono Plugin, this means all (both) bits are set.
	// This translates as follows:
	// PC Input/Output, Stereo Plugin: Forward stereo normally
	// PC Input, Mono Plugin: Average both LMMS ports to plugin input
	// PC Output, Mono Plugin: Duplicate output to both LMMS ports
	Dual,
	// For a Stereo Plugin, this means only the Left->Left bit is set,
	// For a Mono Plugin, this means only the Left->Mono bit is being set.
	// This translates as follows:
	// PC Input, Stereo Plugin: Forward left LMMS port to left plugin port,
	//     Fill right plugin port with zeroes
	// PC Input, Mono Plugin: Forward left to mono plugin input,
	//     Do not use/touch right
	// PC Output, Stereo Plugin: Forward left output to LMMS port,
	//     Right LMMS output port keeps values from right LMMS input port
	//     (This means the right plugin output is being discarded)
	// PC Output, Mono Plugin: Forward output to left LMMS port,
	//     Right LMMS output port keeps values from right LMMS input port
	Left,
	// Symmetrical to Left
	Right
};

@JohannesLorenz
Copy link
Contributor Author

Btw, another possibility would be, for Mono plugins, only allow Dual for now. This would still cover all current use cases.

@messmerd
Copy link
Member

@JohannesLorenz It sounds like what you're considering implementing is just another form of L/R routing. We're planning on eventually using pin connectors instead, so I wouldn't want you to waste work on a 2nd L/R routing implementation that's just going to be replaced. If you add any sort of L/R routing functionality, we'd need an upgrade routine when it is replaced with the pin connector.

For now, I think you should do this unconditionally without offering any ComboBox to the user:

  • For mono-input plugins, downmix LMMS's stereo audio to plugin's mono input
  • For mono-output plugins, upmix plugin's mono output to LMMS's stereo
  • For mono-input/mono-output plugins, do both

These are the same defaults for mono plugins that the pin connector uses.

@JohannesLorenz
Copy link
Contributor Author

Status: This is waiting for #7459 .

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
needs testing This pull request needs more testing
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants