There is a serious bug in H6 filter [SOLVED]

Using Windows 10, 64bit.
There’s a bug in Halion 6 in it’s parameter reporting. I’ve been having several issues creating in the macro editor and I’ve finally pinpointed where the issue resides. The issue is that H6 is not updating the filter shape to match the filter type. No matter what filter type you choose all filter shapes are present. This causes synchronous graphical errors in the Marco page due to animations and other graphical elements not syncing up with the actual filter shape. This also causes the “show value” option in the macro page to display the wrong filter shape when it is connected to the filter shape if it uses a different filter type. To see the issue proceed with this set of instructions…

  1. Open HALION. The default preset “Hexagon” should load.
  2. Click the OPEN NEW WINDOW button and select “Macro Page Designer Extended”.
  3. In the PROGRAM TREE expand the “Anima” layer and select the synth ZONE.
  4. Scroll down in the PARAMETER LIST until you see the “Filter” folder. Expand that and you see “Type” and filter “ShapeA” parameters.
  5. Scroll down in the SOUND Editor (This is the docked bottom right tab) until you see the FILTER section.
  6. Using either the PARAMETER LIST or SOUND Editor change the Filter Type to “Waldorf”. Both the SOUND Editor and PARAMETER LIST will show this change.
  7. Click the value drop down for ShapeA of the PARAMETER LIST.
  8. Click the value drop down for filter shape A of the SOUOND Editor.

They will display two different sets of filter options. Scrolling your mouse wheel over the PARAMETER LIST value for ShapeA will cause the SOUND Editor to match and display the wrong filter shapes for this filter type as well. This becomes a problem especially when we want to tie this parameter to an Animation, fader, etc etc in the Macro Page. Although I want to use the Waldorf Filter type, the Macro element will respond to the PARAMETER LIST value which causes the element to display the wrong info and respond incorrectly.

Hi abject39,
I’m able to reproduce it here. Its now in our Defect-Tracking-System and listed as Bug-ID “HALLY-6987”.
I hope we can provide a fix for it soon.

Thanks for your report and please accept my apologies for any inconvenience caused.
Gerrit Junge

Thank you!

Sorry for not getting back to this sooner.

This works as designed. The parameter list shows the parameters as they are defined and how they are accessible from other scripts or from other parts of the program, e.g. automation or quick controls. The shape parameter has some values that do not work with all filter types, but that is similar to other parameters not having an effect depending on other parameters.

The filter shape is a bit special because it has some UI support for convenience: in a combo box popup only the shapes sensible or the current filter types are shown. This also applies to macro pages. Other values are still accessible through automation or MIDI controller, though.

If you want to customize the accessible shapes, you have to write a small script defining a parameter with the valid options and forward changes to the zones. Here is an example that also shows how to switch the definition dynamically:

-- MIDI module for restricted usage of filter types and shapes for zones of the same layer

-- definition to map parameters of this module to zone parameters
filterDefinition = {
	-- classic
	{ zoneType = 1, shapes = { { "LP24", 0}, { "LP12", 2 }, { "LP6", 3 }, { "HP24", 10 }, { "HP12", 12 }, { "HP6", 13 } } },
	-- waldorf
	{ zoneType = 8, shapes = { { "LP24", 0}, { "LP12", 2 }, { "HP24", 10 }, { "HP12", 12 }, { "Comb+", 28 }, { "Comb-", 29 } } },
}

-- (re)define the filter shape parameter
function defineFilterShape()
	local names = {}
	for i,n in ipairs(filterDefinition[FilterType].shapes) do
		names[i] = n[1]
	end
	defineParameter("FilterShape", "Filter Shape", 1, names, function() onFilterShapeChanged() end)
end

-- update zones with the mapped filter and shape parameter values
function onFilterTypeChanged()
	local zones = this.parent:findZones(true) -- all zones in same layer
	local ztype = filterDefinition[FilterType].zoneType -- map to HALion Filter type
	local zshape = filterDefinition[FilterType].shapes[FilterShape][2]
	for _,z in ipairs(zones) do
		z:setParameter("Filter.Type", ztype)
		z:setParameter("Filter.ShapeA", zshape)
	end
	-- update shape names
	defineFilterShape()
end

-- update zones with the mapped shape parameter values
function onFilterShapeChanged()
	local zones = this.parent:findZones(true) -- all zones in same layer
	local zshape = filterDefinition[FilterType].shapes[FilterShape][2]
	for _,z in ipairs(zones) do
		z:setParameter("Filter.ShapeA", zshape)
	end
end

-- define parameters
defineParameter("FilterType", "Filter Type", 1, { "Classic", "Waldorf" }, function() onFilterTypeChanged() end)
defineFilterShape()

I hope this helps.

Thank you for the follow up. You said that only the shapes sensible to filter type are show up in a pop up. My question is if this behavior is override-able? I really like the “fatness” parameter that comes with the waldorf filter type and I also like that it is the only filter type with Comb filtering. But I really wish it had more than 13 filter shapes like classic does. Is there an actual way to combine elements of each filter or is that impossible? I assume it is impossible as the waldorf filter shapes do not self oscillate like the classic ones do.

Is there an actual way to combine elements of each filter or is that impossible?

The waldorf filter only features the displayed shapes. What you can do is to present the full list of filter shapes to the user, but not the type, and then switch type and shape internally selecting your favorite filter for the given shape.

Only problem with that is that as soon as I switch to a filter type outside of Waldorf I lose the fatness parameter for that type. It’s ok. Hopefully down the road the filter types converge a little more. It would be great to see those comb filters and fatness control make it to the other types or even the ability to have two truly independent filters besides just the offset we have now.