Jump to content

TK - ever considered the VCA leak "fix"?


kokoon
 Share

Recommended Posts

by stopping the OSCs?

i've made a simple patchin pd (pure data) for this - if no note is played then OSC1/2/3 is set to i think 16 (off)

but then the patch must have the OSCs set to what they need to be in the wavetable. still it's useful.

but if this was implemented in the application it could just automatically set OSCs back to what they're set in the patch when a note is played and the OSCs are stopped (to minimize popping artifacts).

i searched the forum and the only reply of yours i found was somehting along the lines that it's a unique SID "feature" and that it would be a shame to work around it... well the thing is that the triangle waveform has this really annoying high-pitched leaking that makes it useless for a "suboscillator" (but as a waveform with very little higher harmonics -almost sinus - it would be very appropriate). even if routed through the LPF the beeping noise is still annoyingly loud.

would that involve alot of extra code? i imagine not... if you think it's a good idea i might take a look at the code and try it myself... maybe only if you gave me a general pointer to what section it would be best put into.

how are others dealing with this issue? maybe any simple workarounds/fixes i didn't think of? (besides gating the entire signal)

Link to comment
Share on other sites

To the question "TK - ever considered the VCA leak "fix"? by stopping the OSCs?": yes, I've considered this, but there is no perfect solution, therefore I never spent effort for a workaround and prefered to work on other features. Even your solution is not perfect as you've already noticed, but if you can live with side effects, then you are free to give it a try.

So, the waveform has to be changed once the release time of the DCA has been passed. The release time can be derived from the SID_Vx_ENV_SR register (x=1..3). According to the SID datasheet, the highest release rate is 24 s (when the release value is 15). If your timer is part of the SID_SW timer (sid_sw.inc), then the delay counter must have a resolution of 15 bit (24 / 819.2E-6 = 29296).

Each voice needs its own delay counter. It can be preloaded in SIDSW_Note_GateClrReq, and decremented at the end of SIDSW_Note so long the gate bit is not set (can be determined with the SID_MODE_GATE_ACTIVE flag)

Once the delay counter has reached zero, the SID_SR handler in sid_sr.inc needs to be notified with a flag (for each voice seperately). If this flag is set, you can upload the new value into the control register with:


        movlw 0x<new-wave-value>
        movlw  0xe4            ; SID_V1_CTRL (note: reset line must stay 1)
        movwf  MIOS_PARAMETER1 ; address
        call    SID_SR_Write
[/code]

Value for SID_V2_CTRL: 0x0b

Value for SID_V3_CTRL: 0x0c

Coding of the control register: see SID datasheet

An alternative solution would be to add an external gate like proposed by KD:

http://www.midibox.org/forum/index.php?topic=4075.0

Best Regards, Thorsten.

Link to comment
Share on other sites

General hint: if the MBSID audio out is routed through a sequencer, then just insert a VST based evelope follower at the beginning of the Fx line - it helps you to eliminate the background noise completely so long no sound is played. And if it supports a lookahead function, the dynamic behaviour of the sounds won't be affected.

Best Regards, Thorsten.

Link to comment
Share on other sites

Join the conversation

You can post now and register later. If you have an account, sign in now to post with your account.

Guest
Reply to this topic...

×   Pasted as rich text.   Paste as plain text instead

  Only 75 emoji are allowed.

×   Your link has been automatically embedded.   Display as a link instead

×   Your previous content has been restored.   Clear editor

×   You cannot paste images directly. Upload or insert images from URL.

Loading...
 Share

×
×
  • Create New...