Impulse Tracker and Resonant Filters Wanna know how to get resonant filters working in IT? Read on. Implementation -------------- So far, resonant filters have only been coded into the MMX drivers - so any soundcard which has an MMX driver for IT will support resonant filters. Of course, this means that your computer has to have MMX before you can run them. To hear resonant filtering, you'll first need to select "Filtered" mixing on Shift-F5. Do NOT write to me about non MMX resonant filtering. Resonant filters CANNOT be included with hardware GUS / Interwave drivers. The reason is because these chips do not support resonant filtering in their mixing algorithms. The AWE 32 driver has *approximate* support to IT's software resonant filtering. Songs written using resonant filters on the AWE32 will not sound exactly the same with other drivers. The diskwriter has all resonant filtering code, of course. (No MMX required) Note that the only external player to have resonant filtering implemented is MikIT. If you use any other player to play your songs that use resonant filtering (including earlier versions of IT), they will not be played correctly. First note ---------- If you do use filtering in your songs, you probably should embed your MIDI Output configuration into the .IT file. This makes the file slightly bigger, but it ensures that your song will be played correctly on any filter-capable driver on any computer. This is selected by turning the "Embed MIDI Data" on the MIDI screen (Shift-F1) to "on". Simple filters -------------- For most users, this is all that you will need to know. The default configuration for IT (copy ITMIDI.CFG to your IT directory) will recognise Z00->Z7F as set filter cutoff frequency and Z80->Z8F as set filter resonance. Z00 is the lowest filter cutoff, Z7F is the highest filter cutoff Z80 is the least resonance, Z8F is the highest resonance If you wish to reconfigure the resonant filters or perhaps create some extra shortcuts, then read below! How the drivers recognise filters --------------------------------- The drivers know what to filter by intercepting MIDI messages. This does NOT mean that filters will require any sort of MIDI equipment, just that the mechanism to instruct the driver to filter a particular note within IT itself is made via the MIDI interface. The instructions that the drivers understand so far are: F0 F0 00 - Set filter cutoff frequency to F0 F0 01 - Set Q factor (resonance) of filter to In each of these cases, is between 00 and 7Fh. Values above 7Fh are ignored. Note that if filter cutoff is set to 7F and Q is set to 0, then no filters are applied. How to tell the drivers these Instructions ------------------------------------------ OK.. so how can we tell the drivers these instructions? For a full explanation, check MIDI.TXT - a short explanation is provided here. First of all, go to the MIDI Output configuration screen in IT. Do this by pressing Shift-F1, then clicking on the "MIDI Output Configuration" button. You will see several MIDI configurations, then SF0->SFF then Z80-ZFF (that bottom window is scrollable). Using Z80 to ZFF ---------------- Z80->ZFF are the easiest to explain.. so I'll explain them first. If you type in "F0 F0 01 3F" next to Z80 (make sure that you have the letters in upper case), then whenever you use Z80 in a pattern, "F0 F0 01 3F" will be sent to the driver. If you refer back to what instructions the driver understands, you'll see that this means "Set filter resonance to 3F". A few more examples: Z81 = F0 F0 00 40 - set filter cutoff frequency to 40h Z82 = F0 F0 01 20 - set filter resonance to 20h Z83 = F0 F0 00 10 - set filter cutoff frequency to 10h Using SF0->SFF -------------- SF0->SFF are slightly more difficult to explain.. but hopefully a few examples will make their usage clear. When you use Z00 to Z7F in a pattern, they do not directly translate in the same way as the Z80->ZFF do. Instead, they set a variable internally called 'z' that gets substituted into one of the SFx commands. Example 1 - If you set SF0 = F0 F0 00 z (on the MIDI Output configuration) Then using Z01 will cause "F0 F0 00 01" to be sent. Z01 = F0 F0 00 01 - Set filter cutoff frequency to 1, as above. Z10 = F0 F0 00 10 - Set filter cutoff frequency to 10h Z30 = F0 F0 00 30 - Set filter cutoff frequency to 30h Z50 = F0 F0 00 50 - Set filter cutoff frequency to 50h Example 2 - If you define: SF0 = F0 F0 00 z SF1 = F0 F0 01 z Then: SF0 - Set Zxx to use SF0 Z30 = F0 F0 00 30 - Set filter cutoff frequency to 30h Z50 = F0 F0 00 50 - Set filter cutoff frequency to 50h SF1 - Set Zxx to use SF1 Z20 = F0 F0 01 20 - Set filter resonance to 20h Z3F = F0 F0 01 3F - Set filter resonance to 3Fh Z50 = F0 F0 01 50 - Set filter resonance to 50h SF0 - Set Zxx to use SF0 Z30 = F0 F0 00 30 - Set filter cutoff frequency to 30h Z10 = F0 F0 00 10 - Set filter cutoff frequency to 10h SF1 - Set Zxx to use SF1 Z20 = F0 F0 00 20 - Set filter resonance to 20h Z30 = F0 F0 00 30 - Set filter resonance to 30h Note that the default startup configuration for each channel is SF0, so the first SF0 in example 2 is unnecessary. Resetting the Filters --------------------- Since the filters are driver related (and IT.EXE really doesn't know about their existance), they are not reset automatically when you stop/play a song. If a MIDI Reset (FFh), MIDI Start (FAh) or MIDI Stop (FCh) message is received, then the driver will reset all of it's internal tables. The default configuration will send both MIDI Reset and MIDI Stop commands. Final Notes ----------- Umm.. Enjoy :) - Jeffrey Lim