kokoon Posted October 9, 2005 Report Share Posted October 9, 2005 so i've built the box to a stage when i can tweak the filters with an encoder. i have one 6581 and one 8580. and now some questions. they're all regarding the LP filter. i'm using the latest SID version (midibox_sid_v1_7_303beta9)1. the 6581 filter has such a low range! it's almost unusable. from the samples off the http://www.prophet64.com/ tb-303 emulator i'd say the filter is capable of pretty serious resonating but not from the midibox. is there anything that can be done software-wise? apparently the 303 version of the SID application "changes the filters behaviour" and that's why i'm asking. i've tried a ton of different filter caps and ended up using the original ones from the c64.2. the 8580 filter isn't completely smooth.towards the low-end there are some weird "steps" (i can look the precise value) that make the filter feel non-analogue. anyone else noticed this? can this be fixed? how did the guys from http://www.prophet64.com/ achieve such great filter sounds?3. am i talking nonsense? Quote Link to comment Share on other sites More sharing options...
tarzan boy Posted October 10, 2005 Report Share Posted October 10, 2005 have you tried with the sid v1.7a? I had that on my only working sid board until a few days ago and i didn't have any complaints at all about the range of the thing. In fact if anything i thought it was much better than the prophet64; both in signal-to-noise and in my ability to change things (filters obviously only being one small part of this...) plus it was such a HUGE pain to load p64 into my c64s, since i only have a tape drive... I havent tried the 303beta9 that i've uploaded yet because everything is offline while i make my optimized psu, but i really want to try these new algorithms. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 10, 2005 Report Share Posted October 10, 2005 The secret behind Prophet64 is, that it only provides a reduced parameter set, which is required to produce a TB303-like sound... and nothing else. Therefore it might seem that sounds are possible which were not possible before, but this is not true! You just only need to get a feeling about the mighty MBSID engine ;-)In general the filter behaviour is device specific. Note that this is an analog circuit, depending on the revision number and the age of the SID it sounds different.Fine control: you could assign one or two envelopes to the filter, set depth to +30 or so, then use cutoff as "coarse controller", and the "sustain" as "fine controller". Play some short notes and modify the "delay" parameter - do you hear the difference? :)However, once you select the tb303 algorithm in the v1.7303beta9 version, you will notice a reduced, but fine controlable cutoff range. Thats one of the main differences. Then load one of the TB303 examples from the patches/ directory into JSynthLib, check especially the envelope settings, they are giving you a lot of hints, what is important for TB303-like sounds.As mentioned many times before, I will write a detailed TB303 tutorial! Just give me some days to realize the new CEM filter circuit as an additional demonstration which powerful sounds are possible with external extensionsBest Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 10, 2005 Author Report Share Posted October 10, 2005 thanks alot for the detailed reply.so - if i understood this correctly - the "cutoff" setting doesn't reach to the max cutoff value because it needs to leave some for both the potential envelopes? if so then what about LFOs? so what you're saying is that for the filter to reach the max i'd have to put some envelopes on the filter and modify it positively?i know the filters are device-specific but i'm almost certain that no c64 had filters with such low filters range.what about the stepiness of the 8580 filters? you know what i mean by that? Quote Link to comment Share on other sites More sharing options...
TK. Posted October 10, 2005 Report Share Posted October 10, 2005 The envelope trick I described above was the solution to avoid the stepiness, please try it out to understand what I mean.Don't forget to set CBM8580_FILTER_SWITCH to 1 (in main.asm) when you are using the 8580, or just upload the prepared *_8580_*.syx/*_8580_*.hex file, where this is already done.Of course, it also works with LFOs. By default, you can reach the max cutoff value with the cutoff CC, there is no additional headroom for modulation sources. The modulation sources just give you the possibility to finetune the cutoff when the ENV/LFO depth is low.Reg. your 6581: I guess that this is a bad chip, the behaviour cannot be improved by software or hardware modifications.Or you don't know yet, that the 8580 filter has a different (much better) characteristic compared to 6581Therefore I didn't give you a comment to this problem - this has been discussed several times, and it's not clear to me if you've read these postings or notBest Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 10, 2005 Author Report Share Posted October 10, 2005 The envelope trick I described above was the solution to avoid the stepiness, please try it out to understand what I mean.okay i get it now. so you're aware that the cutoff parameter curve isn't completely smooth?Don't forget to set CBM8580_FILTER_SWITCH to 1 (in main.asm) when you are using the 8580, or just upload the prepared *_8580_*.syx/*_8580_*.hex file, where this is already done.i know that. could you decribe a bit what that flag does? change the curve?Reg. your 6581: I guess that this is a bad chip, the behaviour cannot be improved by software or hardware modifications.i'm talking about 3 different 6581 chips. their filters sound nothing like 2-pole (12dB) filters.Or you don't know yet, that the 8580 filter has a different (much better) characteristic compared to 6581Therefore I didn't give you a comment to this problem - this has been discussed several times, and it's not clear to me if you've read these postings or noti've probably read absolutely everything on the subject of SID filters here on ucapps and midibox.org and i've also read some other sites. but from the ucapps MBSID page i got the idea that you feel the 6581 filter is better than 8580 filter. i know those tables and samples were updated later but it doesn't say that the 8580 filter is now better.actually what i wanted to know is whether the cutoff parameter reaches from min to max of the actual SID filter cutoff value. now that i know that i can conclude that the prophet64 wouldn't sound any better filter-wise than MBSID does. right?i guess the next step from MBSID will be an external filter. i'm thinking something like you did (a moog ladder) or maybe a WASP filter. that wasp sound is fantastic.don't get me wrong - i don't want to start a fuss or anything - i hugely respect everything you've done and am building my MBSID with great confidence in its powers. it was just that the samples on the prophet64 site got me thinking that MBSID doesn't use all the headroom of the filter. by the way - i do know how a substractive synth's soundpath looks like and i've built quite a few in reaktor and pd so i have pretty good idea how this works - but just in theory. i haven't done anything like this in assembler and i understand that there are many limitations/ tricks needed. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 10, 2005 Report Share Posted October 10, 2005 okay i get it now. so you're aware that the cutoff parameter curve isn't completely smooth?yes, it's a SID specific problem, that the cutoff parameter is not lineari know that. could you decribe a bit what that flag does? change the curve?yes, it compensates the non-linearity by re-using the exponent table which is also used to map the oscillator frequency. This works well for the upper frequency range, but not so well for the lower range. But the envelope trick can be used if sweeps within this range are desired.And again: another possibility is the use of the TB303 option, which reduces the cutoff to the lower range, so that you won't notice stepiness anymore in the range you are mainly using for these types of soundi'm talking about 3 different 6581 chips. their filters sound nothing like 2-pole (12dB) filters.yes, especially the resonance doesn't really worki've probably read absolutely everything on the subject of SID filters here on ucapps and midibox.org and i've also read some other sites. but from the ucapps MBSID page i got the idea that you feel the 6581 filter is better than 8580 filter. i know those tables and samples were updated later but it doesn't say that the 8580 filter is now better.the 8580 filter is definitely better for TB303-like sounds, the 6581 is better for soft sounds, I will make this clear in the TB303 tutorialactually what i wanted to know is whether the cutoff parameter reaches from min to max of the actual SID filter cutoff value. now that i know that i can conclude that the prophet64 wouldn't sound any better filter-wise than MBSID does. right?Ok, again a complete statement to avoid any confusion:Yes, if no modulation source is assigned to the filter, and if the TB303 option is not enabled, you can sweep the cutoff over the whole range with CC#46 - sometimes it sounds steppy because of the 7bit resolution of this CC, but this can be fixed by using modulation sources for fine control.don't get me wrong - i don't want to start a fuss or anything - i hugely respect everything you've done and am building my MBSID with great confidence in its powers. it was just that the samples on the prophet64 site got me thinking that MBSID doesn't use all the headroom of the filter. by the way - i do know how a substractive synth's soundpath looks like and i've built quite a few in reaktor and pd so i have pretty good idea how this works - but just in theory. i haven't done anything like this in assembler and i understand that there are many limitations/ tricks needed.Most samples of the Prophet64 side are made with the 8580, when you are activating the TB303 SE option you can realize very similar sounds, because it changes the way how the filter is controledBest Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 10, 2005 Author Report Share Posted October 10, 2005 TK thanks alot for your time. Quote Link to comment Share on other sites More sharing options...
Jurbo Posted October 15, 2005 Report Share Posted October 15, 2005 Kokoon, you are right about the blocky behaviour of the 8580 filter in the lower end - a fast sweep causes a metallic boinging sound and a slow sweep goes in audible steps. It's one of the reasons I switched from 2x8580 to 8580/6581configuration. The 6581 filter seems to go through the cutoff range smoother, and the 6581 filter doesn't turn the sound completely off in the lowest values like the 8580 filter does. Then again, the 8580 filter is more pronounced and effective with a better resonance, so there is good and bad in both chip types. :) Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 15, 2005 Author Report Share Posted October 15, 2005 yeah absolutely there are pluses and minuses with both. that's why i'm doing a 2 + 2 configuration. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 15, 2005 Report Share Posted October 15, 2005 Good news: in the meantime I found a solution to overcome this rough CC resolution: I've implemented an interpolation algorithm for the filter, which is just an envelope generator with dynamic attack/decay rate. The rate can be determined by measuring the time between two changes, and the difference between the two values - very simple.I found out, that such an interpolation is a *must* once a filter with high resonance is controlled, therefore I've created an example with the CEM3378 to demonstrate the difference.-> http://www.midibox.org/midibox_sid/mbsid_filter_interpolation.mp31st part: filter sweep without interpolation2nd part: filter sweep with interpolation3rd part: same like 1, but with delay Fx4th part: same like 2, but with delay FxThe graphical representation of the CC sweep:(interpolation can be disabled with Sound Engine Option 2 - for the guys who like this typical 8bit effect ;-))Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
Jurbo Posted October 15, 2005 Report Share Posted October 15, 2005 Wow, that Thorsten sure has an ace up his sleeve for every situation! 8) Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 15, 2005 Author Report Share Posted October 15, 2005 that's fantastic! that's a software feature right? is there a SID application version with this already released?thanks alot Thorsten!!! Quote Link to comment Share on other sites More sharing options...
TK. Posted October 15, 2005 Report Share Posted October 15, 2005 Yes, it's a software feature. Currently it only works for the AOUT and 6581. For the 8580 I have to add a second interpolation routine, since the output curve is different. Before the next release I have to solve two things: the second interpolation (I will rewrite the routine, so that it can use two different parameter sets), and the filter keytracking issue (it works fine, but there is no place anymore within the Sysex data structure to store this parameter, currently I'm using the ENV2 curve value to control the tracking - I have to find a compatible solution - somehow)Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 15, 2005 Report Share Posted October 15, 2005 Reg. the keytracking issue: maybe the best solution is to make MIDI sync a global parameter which is not stored in the patch. In addition, the wavetable rate should also be global if it is synced via MIDI. This frees one value in the SysEx dump which can be used for filter keytracking :)Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 16, 2005 Report Share Posted October 16, 2005 I've finally managed to find a solution without compatibility problems: the keytracking value is stored within the same value which contains the SusKey flagI've also added the second interpolation - unfortunately it turned out that it doesn't help that much in the low-range of a 8580 filter, because a small change increases the cut-off so much, that it can be notified as a "stepiness effect". Sorry - no chance to improve this :-/However, the new beta version is located here:http://www.ucapps.de/mios/midibox_sid_v1_7_303beta10.zipAdditional changes: the MBHP_AOUT_LC outputs a 12bit filter value and a 4bit resonance value. 4bit is enough for the TB303 emulation which just increases the resonance on an accented note - finetuning can be done with an external trimmer (pot)Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 23, 2005 Author Report Share Posted October 23, 2005 you could do one thing - i once programmed this (not in asm) but i'm not sure if i'll be able to describe it in english:make interpolation speed variable - dependent on the input change speed. that would mean if you turn the encoder slowly then changing physical values can take even 50ms per unit which should probably be enough.i'm sorry if you already considered this and concluded it's too heavy resource-wise.another thought - why should the entire cutoff freq range be used? for my taste the bottom ~10 units are unusable. maybe we could change this ourselves? along with the mapping function that now causes the "stepiness effect"?i'm sorry i'm making such a big deal out of it but smooth filter sweeps are the most important thing for me :) ofcourse if nothing can be done then so be it. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 23, 2005 Report Share Posted October 23, 2005 you could do one thing - i once programmed this (not in asm) but i'm not sure if i'll be able to describe it in english:make interpolation speed variable - dependent on the input change speed. that would mean if you turn the encoder slowly then changing physical values can take even 50ms per unit which should probably be enough.i'm sorry if you already considered this and concluded it's too heavy resource-wise.the speed is already variable, the speed is determined by measuring the time between the last and the current change Maybe I should highlight again, that the 8580 resolution and non-linearity problem is NOT a software problem!another thought - why should the entire cutoff freq range be used? for my taste the bottom ~10 units are unusable. maybe we could change this ourselves? along with the mapping function that now causes the "stepiness effect"?this special 8580 stepiness within the low range (and not the one I fixed via interpolation) is caused by the 8580 hardware implementation, it cannot be improved via software, no way - really - it's unsolvable!i'm sorry i'm making such a big deal out of it but smooth filter sweeps are the most important thing for me :) ofcourse if nothing can be done then so be it.at least the 6581 and AOUT filter curves are very smooth now :)Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 23, 2005 Author Report Share Posted October 23, 2005 so it's actually impossible to get the filter over that range without the "step" by any means even outside mbsid? if so - i didn't know that and then i'm really sorry about the whining about the software. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 23, 2005 Report Share Posted October 23, 2005 so it's actually impossible to get the filter over that range without the "step" by any means even outside mbsid?thats what I told you one week ago ;-)If it helps: the SID provides a 11bit register for filter cutoff frequency, this means a range from 0x000-0x7ff is available. Sounds perfect, but the "internal" filter control curve of the 8580 is not linear, and the change from 0x000 to 0x001 is hearable! In order to linearize the curve (requirement for proper ENV/LFO modulation), 0x000 is mapped to a certain range. When you are incrementing the CutOff CC by +8 or so, and when you are hearing the first step, the CutOff register has been switched to 0x001 (this mapping is, what you are switching on with the 8580 filter flag). Values over 0x008 don't cause this steppiness effect anymore, in addition, higher CC# cause bigger changes in the filter cutoff register, but these changes are very smooth (no steppiness) - especially, since MBSID provides interpolationi didn't know that and then i'm really sorry about the whining about the software.Nearly every 6 months a guy like you blames about ostensible software imperfections, so this is nothing new to me. This should also explain, why I'm reacting a little bit shirty in the meantime...Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
TK. Posted October 23, 2005 Report Share Posted October 23, 2005 Since you know about programming - here the mapping CC->SID Filter value when the 8580 Filter flag is set:CC | SID_FC 858000 | 000001 | 000002 | 000003 | 000004 | 000005 | 000006 | 000007 | 000008 | 000109 | 00010A | 00010B | 00010C | 00010D | 00010E | 00010F | 000210 | 000211 | 000212 | 000213 | 000214 | 000315 | 000316 | 000317 | 000318 | 000419 | 00041A | 00041B | 00051C | 00051D | 00051E | 00061F | 000620 | 000721 | 000722 | 000823 | 000824 | 000925 | 000926 | 000A27 | 000B28 | 000B29 | 000C2A | 000D2B | 000E2C | 000F2D | 00102E | 00112F | 001230 | 001331 | 001432 | 001533 | 001734 | 001835 | 001A36 | 001B37 | 001D38 | 001F39 | 00213A | 00233B | 00253C | 00273D | 002A3E | 002C3F | 002F40 | 003241 | 003542 | 003843 | 003C44 | 003F45 | 004346 | 004747 | 004B48 | 005049 | 00554A | 005A4B | 005F4C | 00654D | 006B4E | 00724F | 007950 | 008051 | 008852 | 009053 | 009854 | 00A255 | 00AB56 | 00B657 | 00C058 | 00CC59 | 00D85A | 00E55B | 00F35C | 01015D | 01115E | 01215F | 013260 | 014561 | 015862 | 016D63 | 018264 | 019A65 | 01B266 | 01CC67 | 01E768 | 020469 | 02236A | 02446B | 02666C | 028B6D | 02B26E | 02DB6F | 030670 | 033571 | 036572 | 039973 | 03D074 | 040A75 | 044876 | 048977 | 04CE78 | 051779 | 05657A | 05B77B | 060E7C | 066B7D | 06CC7E | 07347F | 07A2[/code] [code]CC | SID_FC 658100 | 000001 | 001002 | 002003 | 003004 | 004005 | 005006 | 006007 | 007008 | 008009 | 00900A | 00A00B | 00B00C | 00C00D | 00D00E | 00E00F | 00F010 | 010011 | 011012 | 012013 | 013014 | 014015 | 015016 | 016017 | 017018 | 018019 | 01901A | 01A01B | 01B01C | 01C01D | 01D01E | 01E01F | 01F020 | 020021 | 021022 | 022023 | 023024 | 024025 | 025026 | 026027 | 027028 | 028029 | 02902A | 02A02B | 02B02C | 02C02D | 02D02E | 02E02F | 02F030 | 030031 | 031032 | 032033 | 033034 | 034035 | 035036 | 036037 | 037038 | 038039 | 03903A | 03A03B | 03B03C | 03C03D | 03D03E | 03E03F | 03F040 | 040041 | 041042 | 042043 | 043044 | 044045 | 045046 | 046047 | 047048 | 048049 | 04904A | 04A04B | 04B04C | 04C04D | 04D04E | 04E04F | 04F050 | 050051 | 051052 | 052053 | 053054 | 054055 | 055056 | 056057 | 057058 | 058059 | 05905A | 05A05B | 05B05C | 05C05D | 05D05E | 05E05F | 05F060 | 060061 | 061062 | 062063 | 063064 | 064065 | 065066 | 066067 | 067068 | 068069 | 06906A | 06A06B | 06B06C | 06C06D | 06D06E | 06E06F | 06F070 | 070071 | 071072 | 072073 | 073074 | 074075 | 075076 | 076077 | 077078 | 078079 | 07907A | 07A07B | 07B07C | 07C07D | 07D07E | 07E07F | 07F0the interpolation smooths down the changes, but as you can see in the 8580 table, there is not that much headroom at the lower CC rangeBest Regards, Thorsten.FAQMARKER Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 24, 2005 Author Report Share Posted October 24, 2005 wow i never realized that the bottom cutoff settings of 8580 even don't make a difference at all :) now it's all clear to me haha.one more question - is that mapping table hard-coded or is there a exponential mapping function of some sort? i always thought the SID filter register would be 7bit (yeah i know you couldn't have interpolation that way ;) i'm thinking maybe it would be nice (certainly for me) to have a few filter cutoff modes (low, med and high freq)... Quote Link to comment Share on other sites More sharing options...
TK. Posted October 24, 2005 Report Share Posted October 24, 2005 Just open "sid_sw.inc" and search for "SIDSW_Filter_CBM8580", you will find the code which gets the mapped value from SID_FRQ_TABLE. This table is located in sid_frq_table.inc, and is normaly used for the MIDI Note->Oscillator Frequency calculation. So, it's not a good idea to change this one. Duplicating this table is also not possible, since it takes 256 bytes - this is ca. the amount of memory which is still free in the application. So, you could downstrip the MBSID application, means: remove features which are not used. But this is not trivialPlease understand that I cannot provide the exact informations, how to do this for certain functions, it would always result into a lot of effort at my side to find out the possibilities which save 20..30 bytes per function - it already took a lot of effort to put all this TB303 stuff into a project which was already out of memory. In between 2 weekends I rewrote the whole control surface handler, just to save ca. 500 bytes (I'm proud that it still works like before without any bug). And this memory was filled by the new code.Another way would to wait for a full functional PIC18F4620 (like I). It provides an internal 64k flash, which means, that you could store 128 different filter tables in there (or some additional features ;-))Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
kokoon Posted October 25, 2005 Author Report Share Posted October 25, 2005 wow so you actually use the pitch -> freq logarythmic conversion for this? how on earth did you think of this? not that it doesn't work well :)i think i'll stop bothering you now. i understand the resources are very tight and no one should expect you to rewrite anything. you saved 500 bytes ascii bytes or binary? either way that's quite nice.i can't wait for this tb-303 howto though - is the functionality finished or do plan to add antything else before releasing it (along with the documentation)? Quote Link to comment Share on other sites More sharing options...
TK. Posted October 25, 2005 Report Share Posted October 25, 2005 Re-using this existing table was the idea of Jess D. Skov-Nielsen :)TB303 mode: implementation is finished, I don't plan more features for the next official release.Currently I'm a little bit out of ideas for demo sequences. I also don't have a clear plan, in which form the tutorial could be useful and wouldn't produce even more questions. Maybe it makes sense to start the tutorial in the Wiki as some kind of living document which gives a sufficient overview about the parameters at the beginning, and detailed infos once people really want to know about this - is anybody interested in creating TB303 demos?Best Regards, Thorsten. Quote Link to comment Share on other sites More sharing options...
Recommended Posts
Join the conversation
You can post now and register later. If you have an account, sign in now to post with your account.