Theoretically we could have 6 SIDcogs running at once, one cog mixing it down to two stereo channels and the last cog controlling it all.
That's 18 channels and whould be enough for a decent synthesizer.
@Oldbitcollector
Personally I love the drum sounds generated on the C64.
But if you are talking about natural sounding drums, it's not going to be easy.
The SID isn't about creating natural sounding sounds at all.
The Paula chip in the Amiga was great for natural sounds thanks to being sample based.
Have a look at www.youtube.com/watch?v=nTz5iwmtkrs
Everything you hear is from that little sound chip created in 1985... (My PC/Console friends were SOOOOO jealous back then)
Look at first post.
I've uploaded a beta version of my SID dumper, so you guys can dump your own *.sid tunes to *.dmp files.
It basically is a SID player with the ability to "dump" SID register data into "dump files".
It features:
- Code by me [noparse];)[/noparse]
- SID emulation.
- 6502 emulation. The first ever seekable CPU emulation. (Yes, SEEKABLE. Try the slider in the player tab)
- Nice GUI
- Platform independent... but only a Windows version is available for now. (Is there any mac guy willing to compile a mac version?)
Instructions:
1. Add some sid files to the playlist (SID player tab)
2. Select some of the tunes
3. Go to the SID dumper tab.
4. Select a path to dump to.
4. Set "Dump end point" to something like 00:03:00 ( 3 minutes )
5. Press the button labeled "Start dumping"
BTW, Look at the "SID dump player" code at the top for an example on how to playback *.dmp files from a SD card using SIDcog.
You can also download Jeff Ledgers "SID player" to playback dumps.
Oldbitcollector said...
Missing file from SidDumper: qtgui4.dll
OBC
That's odd. Second time today, someone was missing a qtgui.dll file,
and the other time was on a social forum not a technical one.
I always wondered why Windows can't compile only the pieces from dll files that they need into a single complete exe.
Even if dlls do something with global variables, there could be just an array of global variables for them.
There are a lot of people in this forum that have not got a SD card connected to the prop or they simply are to lazy to bother testing SIDcog.
So here is a medley of 12 C64 tunes recorded directly from a propeller running SIDcog. www.mongofiles.com/file/16540/SIDcogMedley.mp3
I've just found SIDcog, and it looks to be a very useful platform for building music synthesizers. I hope you will pursue the ability to combine waveforms in each cog. This would be a powerful addition for those of us who want to use SIDcog for music synthesis rather than playing existing files.
Unfortunately, I don't have practical experience with Propeller programming yet (due to a terrible lack of time ...), so I cannot interpret your source code, but maybe you could briefly explain what method you used to implement the filters? I had thought that decent filtering is impossible on a processor that does not even have a hardware multiplier ... But it would be very useful for some synthesizer projects I have in mind for the future.
Also, can I find documentation on the logarithmic envelope function somewhere?
Oldbitcollector said...
Any chance that steel drums could be done with SIDcog?
If no samples are used, I think FM ist the best method for steel drums, so this would be a job for Ariba's phantastic 20-voice FM MIDI synth for the Propeller. I can't imagine a SID doing it realistically. (On the other hand, I could neither imagine a 20-voice FM synth nor a SID emulation for the Propeller, so don't count on my imagination here ...)
Michael OBannon said...
I've just found SIDcog, and it looks to be a very useful platform for building music synthesizers. I hope you will pursue the ability to combine waveforms in each cog. This would be a powerful addition for those of us who want to use SIDcog for music synthesis rather than playing existing files.
For a stand-alone synth, it could be an option to reduce the number of SID voices per cog - then you could improve the emulation and still have lots of voices when using several cogs.
Michael OBannon said...
Johannes,
I've just found SIDcog, and it looks to be a very useful platform for building music synthesizers. I hope you will pursue the ability to combine waveforms in each cog. This would be a powerful addition for those of us who want to use SIDcog for music synthesis rather than playing existing files.
Thanks again,
Michael
Are you talking about the combined waveforms found in the real SID? Or are you talking combining waveforms by either "anding" or "adding" them together?
Real SID combining is almost impossible with known algorithms, but it can be done with a lookup table and a lot of hub ram.
laserjones said...
Very impressive work - thanks for sharing this!
No, thank YOU for being interested in my work [noparse];)[/noparse]
laserjones said...
I had thought that decent filtering is impossible on a processor that does not even have a hardware multiplier
I use a subroutine for multiplication. It takes a lot of extra cycles but it works thanks to the relatively fast processor speed (20 mips per cog).
SIDcog uses 187.200 32 bit multiplications per second.
I can give you the "pseudo code" for the filter emulation if you want to.
It's probably the simplest way of doing a 6db/octave multi-mode filter, just 32 PASM instruction ( well a lot more if you count the multiplication subroutine calls )
laserjones said...
I can't imagine a SID doing a steel drum realistically
Maybe by using two oscillators and ring modulate and/or synchronize one oscillators with the other. (the famous C64 musician Tim Follin did a lot of strange sounds this way)
laserjones said...
For a stand-alone synth, it could be an option to reduce the number of SID voices per cog - then you could improve the emulation and still have lots of voices when using several cogs.
Well, 31Khz is a little bit low for real hifi sound generation but it's still enough in most cases. Next step is 62Khz and would require more than one cog and it would also require to rename SIDcog [noparse]:)[/noparse]
Ahle2 said...
I can give you the "pseudo code" for the filter emulation if you want to.
That would be great - also for the envelope decay function, if possible. A reference to some online description of the methods would also be sufficient.
filter_H = Highpass filtered sample
filter_B = Bandpass filtered sample
filter_L = Lowpass filtered sample
filter_freq = Cutoff frequency ( a value between 0 - 1, max freq = sample_rate/2 )
filter_resonance = Resonance amount ( a value between 0 - 1 )
input_sample = The incoming sample
If you for an instance want a bandpass filtered sample use: output_sample = filter_B
If you for an instance want a bandpass reject filter use: output_sample = filter_L + filter_H
The logarithmic envelope decay function works like this
Ahle2 said...
The pseudo code for the multi mode 6db/octave filter looks like this!
It's THAT easy??? I can't believe it ... How can a filter work if it processes each sample completely independently of the others? I would have thought that the function would need to include at least the previous sample as well, and probably even more, as with only one sample (or very few samples), the system does not gain any information about the frequency of the signal - and frequencies is what the filter affects. Or did I misunderstand the pseudo code somehow?
EDIT: Oops, wait ... Filter_B and Filter_L in the first line result from the previous iteration of the routine, right? Then I understand that it can indeed work this way.
Post Edited (laserjones) : 1/30/2010 10:57:53 PM GMT
@laserjones
Yes, it's that simple [noparse]:)[/noparse]
@Chris Micro
Wow, that's a really cool looking project I must admit.
@Forrest
It's really not up to me to make the announcement.
I've been suggesting to Jeff and Nick to make a Quiz here on the forum and the winner will win a SIDstick.
@Ahle2:
Thank you for this object: I have enjoyed the sound demo's.
The code is wonderfully annotated.
I too have been fascinated to see the simplicity of the bandpass filtering.
For a different application, I have been researching how to do a 50-5000Hz bandpass filter.
Is it really only a matter of experimenting with the setCutoff values below?
A new version of SIDcog is available. Have a look at the top.
Changes:
- Combined waveform support.
- Fixed the annoying clicking sound that occured every now and then when playing triangle waveforms.
- Improved envelope handling.
- Partly implemented support for resonance value changes Thanks to Ariba [noparse]:)[/noparse]
- A lot of small improvements and bugfixes
What hardware is required on the prop for the audio output? Do you just use an RC network or is more required?
Can it input to a stereo/TV?
How many cogs does it use for the sound generation? (Obviously I haven't looked at the code).
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔ Links to other interesting threads:
>> Do you just use an RC network or is more required?
yes, pin 10 and 11 are the outputs
Hi Ahle,
your emulator is really great. I just tested it and the sound is fantastic, much better than the sound of my Atmega32 SID.
I tried to run the SID-Dumper, but it seems there is a Problem with the Qt4gui.dll. Is there a version conflict? Is it possible to get the source code of the SID-Dumper?
@Cluso99
It uses one cog, that's why it's called SIDcog (and not SIDcogs)
You can run it on any propeller based platform that has got at least one sound channel output through a RS network.
To play SID dumps you need a SD card connected and some dumps to play back.
@Chris Micro
Thanks for the great words.
I just love the look of the Atmega32 connected with a couple of wires, batteries, headphone and nothing else... that thing looks so cool.
Did you try to download the QT4gui.dll from the link provided?
>>Did you try to download the QT4gui.dll from the link provided?
Yes, but when I run the dumper, it reports some missing function inside the dll.
Could there be some version conflict because on my computer qt is installed? Or does the version of QT4gui.dll provided in you link does not longer fit to your program ?
Yes, it seems to be some kind of conflict.
I know for a fact that the dll file in the archive works. If you put it in the same folder as the exe file, it should "override" any dll files in system32.
I dabble in chiptune music, and am also interested in synths of all kinds. After considering buying a hardsid, and realizing it was going to cost more than I wanted to spend I went searching for alternatives and found the sidstick, and then this thread.
First I want to say awesome work! I'm always impressed by projects like this because I have a brain that can't fathom how to even begin something like this.
I have a few questions, and please excuse the noobishness if they sound crazy. I'm not a programmer, and only marginally understand hardware stuff.
Would it be possible to add a midi clock signal to the sidcog, so that a midi port could be added to something like the sidstick. Then, that would send the clock signal out while a sid played so that sids could be synced with other gear. Or midi in, to play sids using an external clock signal?
My other question is a hardware one. Would it be possible to mod the sidstick so that a real sid chip could be added instead of the sidcog?
From the hardware side, yes you could add a simple Midi interface, but because of
the design you might need to add a extra chip socket with some I/O pins bent out so that
you can easily access them.
There is a midi object for the Propeller that is available. All that is lacking is some
software glue between it and the sidCOG software which really shouldn't be that
big a deal.
Everyone with a propeller connected to a speaker and a PC running Windows should be able to run this.
Propeller:
Run SIDcog_SerialSlave on the propeller.
(If necessary, change RX pin, TX pin and sound pins )
PC:
Run SIDcog_SerialPlayer on your Windows machine.
In the Settings tab, enter the right COM-port number.
In the SID player tab, add some SID tunes from the SID folder in the archive.
Click on a tune and press the play button.
If everything is okey, you should hear some SWEEEET music coming from your Propeller.
@JonnyMac
Have a look at the "Direct control tab" [noparse]:)[/noparse]
@Cluso99
No, I didn't enter SIDcog in the Prop contest. [noparse]:([/noparse]
@tenfold
It should be possible to make a dedicated PCB the size of the propstick that could hold a real SID-chip.
The SID-chip is VERY, VERY hungry though and the battery wouldn't last more than a couple of minutes.
Comments
A lot of peope have built their own synths with real SID chips. Have a look at these.
www.youtube.com/watch?v=lnTh4e0b-ic&feature=related
www.youtube.com/watch?v=lQlHboNGzMU
And here is music making on the C64 with the help of the MSSIAH cartridge and a Commodore 1350 mouse.
www.youtube.com/watch?v=1r-yMTLVW1U
Theoretically we could have 6 SIDcogs running at once, one cog mixing it down to two stereo channels and the last cog controlling it all.
That's 18 channels and whould be enough for a decent synthesizer.
@Oldbitcollector
Personally I love the drum sounds generated on the C64.
But if you are talking about natural sounding drums, it's not going to be easy.
The SID isn't about creating natural sounding sounds at all.
The Paula chip in the Amiga was great for natural sounds thanks to being sample based.
Have a look at www.youtube.com/watch?v=nTz5iwmtkrs
Everything you hear is from that little sound chip created in 1985... (My PC/Console friends were SOOOOO jealous back then)
I've uploaded a beta version of my SID dumper, so you guys can dump your own *.sid tunes to *.dmp files.
It basically is a SID player with the ability to "dump" SID register data into "dump files".
It features:
- Code by me [noparse];)[/noparse]
- SID emulation.
- 6502 emulation. The first ever seekable CPU emulation. (Yes, SEEKABLE. Try the slider in the player tab)
- Nice GUI
- Platform independent... but only a Windows version is available for now. (Is there any mac guy willing to compile a mac version?)
Instructions:
1. Add some sid files to the playlist (SID player tab)
2. Select some of the tunes
3. Go to the SID dumper tab.
4. Select a path to dump to.
4. Set "Dump end point" to something like 00:03:00 ( 3 minutes )
5. Press the button labeled "Start dumping"
BTW, Look at the "SID dump player" code at the top for an example on how to playback *.dmp files from a SD card using SIDcog.
You can also download Jeff Ledgers "SID player" to playback dumps.
Post Edited (Ahle2) : 1/13/2010 12:42:56 AM GMT
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
and the other time was on a social forum not a technical one.
I always wondered why Windows can't compile only the pieces from dll files that they need into a single complete exe.
Even if dlls do something with global variables, there could be just an array of global variables for them.
Post Edited (VIRAND) : 1/12/2010 11:16:08 PM GMT
You can download it here.... just copy the QtGui4.dll file.
So here is a medley of 12 C64 tunes recorded directly from a propeller running SIDcog.
www.mongofiles.com/file/16540/SIDcogMedley.mp3
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBlade,·RamBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: CPUs Z80 etc; Micros Altair etc;· Terminals·VT100 etc; (Index) ZiCog (Z80) , MoCog (6809)
· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBladeProp is: www.bluemagic.biz/cluso.htm
I've just found SIDcog, and it looks to be a very useful platform for building music synthesizers. I hope you will pursue the ability to combine waveforms in each cog. This would be a powerful addition for those of us who want to use SIDcog for music synthesis rather than playing existing files.
Thanks again,
Michael
Unfortunately, I don't have practical experience with Propeller programming yet (due to a terrible lack of time ...), so I cannot interpret your source code, but maybe you could briefly explain what method you used to implement the filters? I had thought that decent filtering is impossible on a processor that does not even have a hardware multiplier ... But it would be very useful for some synthesizer projects I have in mind for the future.
Also, can I find documentation on the logarithmic envelope function somewhere?
If no samples are used, I think FM ist the best method for steel drums, so this would be a job for Ariba's phantastic 20-voice FM MIDI synth for the Propeller. I can't imagine a SID doing it realistically. (On the other hand, I could neither imagine a 20-voice FM synth nor a SID emulation for the Propeller, so don't count on my imagination here ...)
For a stand-alone synth, it could be an option to reduce the number of SID voices per cog - then you could improve the emulation and still have lots of voices when using several cogs.
Real SID combining is almost impossible with known algorithms, but it can be done with a lookup table and a lot of hub ram.
No, thank YOU for being interested in my work [noparse];)[/noparse]
I use a subroutine for multiplication. It takes a lot of extra cycles but it works thanks to the relatively fast processor speed (20 mips per cog).
SIDcog uses 187.200 32 bit multiplications per second.
I can give you the "pseudo code" for the filter emulation if you want to.
It's probably the simplest way of doing a 6db/octave multi-mode filter, just 32 PASM instruction ( well a lot more if you count the multiplication subroutine calls )
Maybe by using two oscillators and ring modulate and/or synchronize one oscillators with the other. (the famous C64 musician Tim Follin did a lot of strange sounds this way)
Well, 31Khz is a little bit low for real hifi sound generation but it's still enough in most cases. Next step is 62Khz and would require more than one cog and it would also require to rename SIDcog [noparse]:)[/noparse]
Thanks again,
Joerg
filter_H = Highpass filtered sample
filter_B = Bandpass filtered sample
filter_L = Lowpass filtered sample
filter_freq = Cutoff frequency ( a value between 0 - 1, max freq = sample_rate/2 )
filter_resonance = Resonance amount ( a value between 0 - 1 )
input_sample = The incoming sample
If you for an instance want a bandpass filtered sample use: output_sample = filter_B
If you for an instance want a bandpass reject filter use: output_sample = filter_L + filter_H
The logarithmic envelope decay function works like this
Post Edited (Ahle2) : 1/30/2010 3:39:36 PM GMT
When are you going to announce the board I just saw on Gadget Gangster?
very nice project. I like the way you wrote the code: very well structured.
I made a SID-Emulator too some time ago.
Here it is AtmegaSID
EDIT: Oops, wait ... Filter_B and Filter_L in the first line result from the previous iteration of the routine, right? Then I understand that it can indeed work this way.
Post Edited (laserjones) : 1/30/2010 10:57:53 PM GMT
Yes, it's that simple [noparse]:)[/noparse]
@Chris Micro
Wow, that's a really cool looking project I must admit.
@Forrest
It's really not up to me to make the announcement.
I've been suggesting to Jeff and Nick to make a Quiz here on the forum and the winner will win a SIDstick.
Thank you for this object: I have enjoyed the sound demo's.
The code is wonderfully annotated.
I too have been fascinated to see the simplicity of the bandpass filtering.
For a different application, I have been researching how to do a 50-5000Hz bandpass filter.
Is it really only a matter of experimenting with the setCutoff values below?
Regards,
T o n y
Changes:
- Combined waveform support.
- Fixed the annoying clicking sound that occured every now and then when playing triangle waveforms.
- Improved envelope handling.
- Partly implemented support for resonance value changes Thanks to Ariba [noparse]:)[/noparse]
- A lot of small improvements and bugfixes
A new version of SID Dumper is also available.
Changes:
- Improved 6502 emulation
- Improved SID emulation
@TonyWaite
Thanks [noparse]:)[/noparse]
Yes.
Post Edited (Ahle2) : 2/4/2010 3:36:46 PM GMT
It was recorded directly from the SIDstick (gadgetgangster.com/find-a-project/56?projectnum=236)
(You will have to rename "SIDcog_v080_Demonstration.mp3_" to "SIDcog_v080_Demonstration.mp3")
Enjoy!
Just a nice little clip from the El Jugador from Gadgetgangster.com.
How is this SIDcog releated you might ask?
Well, SIDcog is the sound core used in the SID player at the beginning.
What hardware is required on the prop for the audio output? Do you just use an RC network or is more required?
Can it input to a stereo/TV?
How many cogs does it use for the sound generation? (Obviously I haven't looked at the code).
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBlade,·RamBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: CPUs Z80 etc; Micros Altair etc;· Terminals·VT100 etc; (Index) ZiCog (Z80) , MoCog (6809)·
· Prop OS: SphinxOS·, PropDos , PropCmd··· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBlade Props: www.cluso.bluemagic.biz
yes, pin 10 and 11 are the outputs
Hi Ahle,
your emulator is really great. I just tested it and the sound is fantastic, much better than the sound of my Atmega32 SID.
I tried to run the SID-Dumper, but it seems there is a Problem with the Qt4gui.dll. Is there a version conflict? Is it possible to get the source code of the SID-Dumper?
It uses one cog, that's why it's called SIDcog (and not SIDcogs)
You can run it on any propeller based platform that has got at least one sound channel output through a RS network.
To play SID dumps you need a SD card connected and some dumps to play back.
@Chris Micro
Thanks for the great words.
I just love the look of the Atmega32 connected with a couple of wires, batteries, headphone and nothing else... that thing looks so cool.
Did you try to download the QT4gui.dll from the link provided?
Yes, but when I run the dumper, it reports some missing function inside the dll.
Could there be some version conflict because on my computer qt is installed? Or does the version of QT4gui.dll provided in you link does not longer fit to your program ?
I know for a fact that the dll file in the archive works. If you put it in the same folder as the exe file, it should "override" any dll files in system32.
First I want to say awesome work! I'm always impressed by projects like this because I have a brain that can't fathom how to even begin something like this.
I have a few questions, and please excuse the noobishness if they sound crazy. I'm not a programmer, and only marginally understand hardware stuff.
Would it be possible to add a midi clock signal to the sidcog, so that a midi port could be added to something like the sidstick. Then, that would send the clock signal out while a sid played so that sids could be synced with other gear. Or midi in, to play sids using an external clock signal?
My other question is a hardware one. Would it be possible to mod the sidstick so that a real sid chip could be added instead of the sidcog?
Thanks for your help, and again, awesome work!
the design you might need to add a extra chip socket with some I/O pins bent out so that
you can easily access them.
There is a midi object for the Propeller that is available. All that is lacking is some
software glue between it and the sidCOG software which really shouldn't be that
big a deal.
So yes, doable...
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
Links to other interesting threads:
· Home of the MultiBladeProps: TriBlade,·RamBlade,·SixBlade, website
· Single Board Computer:·3 Propeller ICs·and a·TriBladeProp board (ZiCog Z80 Emulator)
· Prop Tools under Development or Completed (Index)
· Emulators: CPUs Z80 etc; Micros Altair etc;· Terminals·VT100 etc; (Index) ZiCog (Z80) , MoCog (6809)·
· Prop OS: SphinxOS·, PropDos , PropCmd··· Search the Propeller forums·(uses advanced Google search)
My cruising website is: ·www.bluemagic.biz·· MultiBlade Props: www.cluso.bluemagic.biz
www.mongofiles.com/file/18079/SIDcog_SerialPlayer.7z
Everyone with a propeller connected to a speaker and a PC running Windows should be able to run this.
Propeller:
Run SIDcog_SerialSlave on the propeller.
(If necessary, change RX pin, TX pin and sound pins )
PC:
Run SIDcog_SerialPlayer on your Windows machine.
In the Settings tab, enter the right COM-port number.
In the SID player tab, add some SID tunes from the SID folder in the archive.
Click on a tune and press the play button.
If everything is okey, you should hear some SWEEEET music coming from your Propeller.
@JonnyMac
Have a look at the "Direct control tab" [noparse]:)[/noparse]
@Cluso99
No, I didn't enter SIDcog in the Prop contest. [noparse]:([/noparse]
@tenfold
It should be possible to make a dedicated PCB the size of the propstick that could hold a real SID-chip.
The SID-chip is VERY, VERY hungry though and the battery wouldn't last more than a couple of minutes.
Post Edited (Ahle2) : 3/1/2010 10:52:17 PM GMT
You know this would make a neat add-on board using that new Propeller Backpack board.
How many voices could we generate with something like this?
OBC
▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔▔
New to the Propeller?
Visit the: The Propeller Pages @ Warranty Void.