| |
Rub_0201
Registered: Apr 2019 Posts: 19 |
How to mute the voices of the SID?
Hi!
I want to remix my favorite SID tunes. A lot of them have nice rhythm, ideas and melody, but if I hear them more then 10 times in a loop, I get dizzy.
I want to bring more stillness and a different temper in them - making a remix.
My idea is to mute one or two of the voices of the SID and additionally fiddle around with some registers.
I did that with emulators like the C64debugger("24Hours Demo Remix" on YT) and the result is quite nice. Now I want to do it on the C64 itself.
As I am no SID programmer or musician, I have no clue how to do it on the real machine.
I understand fundamental assembly coding, but I am far from doing fancy stuff.
So I need your help! |
|
| |
Mixer
Registered: Apr 2008 Posts: 454 |
Well, there is no channel mute directly on SID, but you can do a buffered write to SID. F.ex turn the IO memory off, so that the register writes to SID go "under" the IO into RAM. Then you can copy the stuff you want to hear from "under" the IO on and write to SID only the stuff you wish to hear. You need to do this per each player call.
You can also alter the play routines to do SID register writes to some alternate location as a buffer and then to SID yourself. Using the RAM "under" is a more general solution. |
| |
Martin Piper
Registered: Nov 2007 Posts: 726 |
You could run the player in an emulator or even create your own instrumented 6502 emulation layer so capture the SID writes and then play back the SID writes later on.
Or you could try the rip SID functionality in my MusicStudio which allows instruments and drum sounds to be ripped from SID files. https://www.youtube.com/watch?v=HKkapWwicA4 |
| |
deetsay
Registered: Aug 2005 Posts: 43 |
I wrote this DJ software specifically because someone asked if muting channels would be possible :-).
DS/DJ-2000 mk1 Alpha
Song compatibility is not incredible, but most modern stuff works -- as long as there are no samples and the address doesn't collide with the player or the buffer. This works basically as Mixer wrote.
Hit 1/2/3 to mute channels. F to adjust filter (or was it shift-F) and use paddle 1 in port 1, or something. No register fiddling available beyond that I'm afraid. |
| |
Rub_0201
Registered: Apr 2019 Posts: 19 |
Wow, I will look in the tipps and the mixer software!
So it is like I guessed from looking at the SID registers: There is no muting implemented. Just everything on or off or in between.
As i am lazy and do want to have a general solution for all musicplay routines with just little adaptation:
What happens if I let the original music routine writes to the registers and after the RTS I call my muting/mixing routine to set e.g. the frequency of chanel 1 to something mute (0 ?) ? |
| |
spider-j
Registered: Oct 2004 Posts: 498 |
For completeness sake – in addition to what Mixer said – to just mute a voice it's usually enough to set the according control register to $00:
$D404 voice 1
$D40B voice 2
$D412 voice 3
EDIT: Oh, and no it doesn't work to let the music routine write to the SID registers and the modify them again. This will be audible.
proper way is:
set $01 to ie. $34
jsr music
copy $D400-$D418 elsewhere ("virtual" regs)
set $01 to ie. $35
modify the "virtual" regs
copy the "virtual" regs to SID registers |
| |
Rub_0201
Registered: Apr 2019 Posts: 19 |
Yeah - the audible clicks or what ever comes out may be a nice special effect ;-)
I go for the $01-deflector and a buffer for the clean mutness.
I am very excited to do the routine. This sounds like the right amount of coding and doable for me with your hints!
Thanks!!! |
| |
Rub_0201
Registered: Apr 2019 Posts: 19 |
Quote: For completeness sake – in addition to what Mixer said – to just mute a voice it's usually enough to set the according control register to $00:
$D404 voice 1
$D40B voice 2
$D412 voice 3
EDIT: Oh, and no it doesn't work to let the music routine write to the SID registers and the modify them again. This will be audible.
proper way is:
set $01 to ie. $34
jsr music
copy $D400-$D418 elsewhere ("virtual" regs)
set $01 to ie. $35
modify the "virtual" regs
copy the "virtual" regs to SID registers
Yeah, just did the dirty overwrite with 0 without shadow copy - sounds like getting grilled by a robot in Impossible Mission.
Nice effect.
With the 6581 it is really loud and eratic somehow; with the 8580 it is more gentle.
I use VICE, but the result should be quite the same on the real machine I guess.
Okay, now do it the full way. |
| |
Bansai
Registered: Feb 2023 Posts: 49 |
There is muting, but only for voice 3. See $D418 bit 7.
https://www.oxyron.de/html/registers_sid.html |
| |
aeeben
Registered: May 2002 Posts: 44 |
If you don't need the filter, you can mute voices 1-2 by routing them to filter (poke54295,1 / poke54295,2) and turning off all filter types (poke54296,15).
But Deetsay's DJ SID mixer is probably the way to go! :) |
| |
Stone
Registered: Oct 2006 Posts: 172 |
Some players have a lookup table for the voice offsets. Look for the byte sequence $00,$07,$0e. Then you can change whatever voice you want to mute by setting it to $19. This will redirect writes to read-only/unused registers. |
... 24 posts hidden. Click here to view all posts.... |
Previous - 1 | 2 | 3 | 4 - Next |