|
Post by Neil on May 22, 2016 18:08:09 GMT
Hi, I've just installed beepcomp today and have been playing around a bit and got some great sounds out of it, nothing particularly tuneful as I'm no musician but a nice throwback to my Commodore64 days. I then remembered that the SID chip in the Commodore64 supported Ring Modulation between two of the channels/voices. This would produce some fantastic percussive ringing and clanging sounds. Is this something that can be done in software within Beepcomp or is it more of a hardware thing? Just a possible idea for you to think about.
|
|
|
Post by Hiro on May 23, 2016 5:33:36 GMT
Hi Neil, I am glad you are enjoying using the program! And thank you for sharing your ideas about a new feature. I hope you don't mind me moving your post to start a new thread to focus on this topic. I did watch some very cool videos showcasing music made with Commodore 64. I'm just now reading more about the SID chip and what it could do, and it sure seems to have been a groundbreaking synthesizer chip at the time it came out. I would love to explore this further. It would take me some time to learn more about the SID chip and the ring modulation effect, but it sure seems like an interesting challenge for me to take on Oh... I do recall seeing a ring modulation example program in "The Audio Programming Book," which I learned so many things from to build BeepComp. (I highly recommend this book to anyone who wants to get into audio programming!) So I'm sure the effect can be done within software
|
|
|
Post by Neil on May 23, 2016 20:19:15 GMT
Hiro,
I don't mind you moving my post, I should have started a new thread in the first place. I used to play around with ring modulation for ages, you could get some amazing sounds out of it. Sadly the SID chip only had three voices and you needed two of them to provide the inputs for the ring modulation so you were quite limited in the number of different sounds you could play simultaneously. You currently have 9 channels in Beepcomp plus of course the drums so theres quite a lot of scope to be really creative I guess. I presume CPU is the limiting factor on you being able to generate even more channels?
|
|
|
Post by Hiro on May 24, 2016 8:40:38 GMT
Hi Neil, I spent more time learning about ring modulation today. The mechanics of the effect actually seems very simple. And I imagine adding an extra oscillator channel just to use for ring modulation wouldn't be too much of a burden on the CPU. The nice thing is that by making a copy of a regular oscillator and designate is as a modulator you also get its entire waveform choices and effects - LFO, Astro, Fall/Rise - available within the modulator. This will give you lots of tools to play with! An alternate way to implement is to create a feature to turn any existing channel into a modulator channel to be routed to any other channel at will. You're right, by enabling any combinations of 9 available channels we can open up huge possibilities, but this might take lots of rewriting of the code On the other hand, adding one dedicated modulator channel doesn't seem too complicated. I even peeked into eBay to see how much you could get a Commodore64 for... I found a few tested ones around $100 - that's not too bad!
|
|
|
Post by Neil on May 24, 2016 18:19:58 GMT
Hi Hiro,
$100 for a Commodore64 sounds like a bit of a bargain to me. When new in 1980/81 it would have been $650-700 not that I know what the exchange rate was back then - guessing at 1.7 to the pound. It sounded pretty good too because the SID chip actually provided digital control to an analogue core. As my fading memory recollects it supported 4 waveforms, sine, square, saw and white noise and had 3 oscillators, though Commodore called them voices. As I said in earlier post it supported ring modulation by using oscillators 1 and 3 together and it even provided a couple of analogue to digital converters from which you could read the value from a particular pair of memory addresses. With a clock rate of 1Mhz and using Basic you were never going to get a particularly high sample rate but you could read and plot slow changing voltages in the range of 1V, might have been peak to peak but can't fully remember - it was 36 years ago... Quite a revolutionary machine at the time.
It sounds like you have a plan in mind for Implementing ring modulation as a new feature? Seems reasonable having a dedicated oscillator for modulation and using all the waveforms available. Like you said, an interesting challenge!
|
|
|
Post by Hiro on May 25, 2016 23:34:07 GMT
Hi Neil, I actually found quite a few C64s that haven't been tested under $100... but getting one of these would be a gamble. But maybe these would be perfect for people who can fix hardware. Yes, it would be an interesting challenge and experiment for me... especially when from what I am reading the logic of the effect is so simple as just multiplying two oscillator inputs. But I don't know what will come out. I don't know if it'll be close to what the SID chip does. If it comes out to be something useful, you are welcome to provide me with feedback to help me refine it! Any others experienced with C64s are also welcome I'll get started with my experiments as soon as I find the time, so I'll let you know of my progress
|
|
|
Post by Hiro on May 26, 2016 13:39:08 GMT
Hi Neil, I'm done with my initial quick implementation, and the results I'm getting are pretty interesting, so I invite you (and anyone else who's curious) to test out this prototype version! sourceforge.net/p/beepcomp/code/ci/master/tree/beepcomp_ringmodtest.exe?format=rawYou can run it by moving the downloaded .exe file into the BeepComp folder inside your Program Files directory and double-clicking it. It might give you a warning, but go ahead and press "Run". Write for the ring modulator channel starting with @r, and inside the 'R' channel you can use pretty much anything you would use in a normal channel. I haven't done the rewrites for the export function yet, so you won't see any changes in your exported files. But you can test this out in the player for now. Hopefully this starter example is self-explanatory: // ring modulation test 1
@G
V1=10 VR=10 // set ring modulator's output level LOOP=OFF
@1
PRESET=BELL DECAYTIME=200
L8 RINGMOD=ON // this turns on ring modulation // works indepently for each channel CCCCCCCC
RINGMOD=OFF // this turns off ring modulation CCCCCCCC
// @R is used for ring modulator channel
@R // default waveform is triangle wave V10 // you can set output gain here as well L8 // let's feed random pitches
O4 E>D<<A>>E<Bb<D>F# // these get fed O4 G<C>F#<Bb>>A<Eb>C // these get ignored
The modulator channel inherits all the effects available for a regular channel, so you can play around with LFO, ASTRO, Fall and Rise effects... and BEEFUP can come in handy since the modulated signal tends to get its gain lowered: // ring modulation test 2
@1
V10 PRESET=BELL DECAYTIME=1200 WAVEFORM=2 BEEFUP=20
O4 L2 RINGMOD=ON C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C C
@R
V10 BEEFUP=20
LFO=OFF L2
ASTRO=6 O1 G > G > G > G > G > G > G > G
ASTRO=OFF FALLSPEED=3600 FALLWAIT=0 O1 G, > G, > G, > G, > G, > G, > G, > G,
RISERANGE=2400 RISESPEED=3600 O1 *G > *G > *G > *G > RISERANGE=4800 RISESPEED=4800 *G > *G > *G > *G
LFO=ON LFOWAIT=0 O1 LFORANGE=300 LFOSPEED=4 O1 G LFORANGE=600 LFOSPEED=4 O2 G LFORANGE=1200 LFOSPEED=4 O2 G LFORANGE=2400 LFOSPEED=4 O3 G LFORANGE=2400 LFOSPEED=8 O3 G LFORANGE=2400 LFOSPEED=12 O4 G LFORANGE=3600 LFOSPEED=16 O4 G LFORANGE=3600 LFOSPEED=24 O5 G
... Let me know what you think!
|
|
|
Post by Neil on May 26, 2016 19:35:47 GMT
Hiro,
Wow, you're a fast worker. I'm quite busy this next few days but I'll have done some testing for you by the end of next week if that's OK? If you have got a metallic clang or ringing sound like an old fashioned alarm clock thats slightly distorted then that's definitely the effect. I know you are trying to recreate the 8bit sound of the C64 but presumably you can get well beyond the 4 or 5 Khz that SID was capable of? If you can post your email address I will respond off forum.
|
|
|
Post by Hiro on May 27, 2016 0:56:07 GMT
Hi Neil, Don't worry, there's no rush! Maybe I was getting something close to the old fashioned alarm clock sound you mentioned, and I was also getting lots of spaceship-like sounds with LFO and pitch bends and these were real fun to play around with I have no idea if these are anything close to what the SID chip produces though... As I was working on this, the other way of implementing where any existing channel can be fed as the modulator into any other channel is actually a lot simpler than I thought initially. So I want to try this version, too. In this version, you will get a max of 4 independent oscillator pairs working separately so you'll get more flexibility. You're welcome to email me at beepcomp-at-hiromorozumi.com, or we can also keep our discussion here for any other people interested in this development to join in
|
|
|
Post by Hiro on May 27, 2016 5:15:30 GMT
Hi Neil, I'm done making the alternate version. I'm having fun with this! In this version, you can assign any of the nine channels as the modulator channel to be fed into any other channel. You can write at any time within your track RINGMOD=n to set up the channel n for the modulator channel. RINGMOD=0 or RINGMOD=OFF will turn off the modulation effect, turning the channel back into a normal music channel, and also freeing up the modulator channel, if it's not feeding into any other channel. The .exe file for the alternate version is here: sourceforge.net/p/beepcomp/code/ci/master/tree/beepcomp_ringmodtest_2.exe?format=rawOnce again, simply place this file beepcomp_ringmodtest_2.exe in the "BeepComp" folder inside the Program Files (or Program Files (x86)) directory and double-click it. Here is a test track source that uses two independent carrier/modulator pairs. I exported this track to an MP3 which you can listen to here: audioboom.com/boos/4621308-beepcomp-ring-modulation-test-3 // // ring modulation test 3 // // this new version can turn // any existing channel as the modulator channel // to feed into another channel //
@G
MASTERVOLUME=70
//////////// channel 1 - base 1 //////////// start with fast random blips
@1
V8 DEFAULTTONE RINGMOD=8 // gets modulated by channel 8 BEEFUP=5 O4 L16 CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC CCCC
RINGMOD=0 // turns off ring modulation // therefore this frees up channel 8
V5 CDEFGFED // this line is without modulation
//////////// channel 2 - base 2 //////////// let's mix a different tone texture
@2
V8 DEFAULTTONE
ATTACKTIME=3000 PEAKLEVEL=100 DECAYTIME=3000 SUSTAINLEVEL=0 BEEFUP=15
RINGMOD=9 // gets modulated by channel 9
O6 L1 : C~~
L16 :::: ::::
//////////// channel 8 modulates channel 1 //////////// feeding random pitches...
@8
V8 DEFAULTTONE BEEFUP=5
// the four lines below won't go into main mix
O5 E<C<A>>Bb<<F#>B>EA O4 C<F#>>D<Eb>D<<A>>G<A O5 F#<<C>G>Bb<A<<Eb>>Bb<G O4 C>B>D<Eb<F>G>G#<A O5 E<C<A>>Bb<<F#>B>EA O4 C<F#>>D<Eb>D<<A>>G<A O5 F#<<C>G>Bb<A<<Eb>>Bb<G O4 C>B>D<Eb<F>G>G#<A
// channel 1 deactivates ring modulation now // the following line goes into main mix
V5 O4 EFGABAGF
//////////// channel 9 modulates channel 2 //////////// feeding a tone with ASTRO + FALL
@9
V8 DEFAULTTONE BEEFUP=15
ASTRO=5 FALLSPEED=600 FALLWAIT=0
O5 L1 : C~,~
L16 :::: ::::
I hope we're coming up with something interesting enough
|
|
|
Post by Neil on Jun 5, 2016 8:46:06 GMT
Hi Hiro,
I've briefly played around with Ringmod Tests 1 and 2 and that is definitely the sort of effect you used to get with the C64, particularlry the more 'bell' type sound of Ringmod1. The sound produced by your second test is quite amazing. I'd say you've cracked ring modulation, it just needs a bit more time to test it more extensively. I'm going to try and do some some script changes ro modulate against LFO and each of the waveforms that you provide, I'm sure you'll get some very interesting results.
I will take a look at your latest executable and Ringmod3 over the next couple of days. This is really good stuff. One question for you, how would I get LFO frequency to vary slightly, say by +\- 10Hz around a centre frequency of f at a rate of r per second? To make a 'spring' sort of wobble.
Cheers
|
|
|
Post by Hiro on Jun 5, 2016 22:07:41 GMT
Hi Neil, Thank you for trying out these test versions! I'm glad to hear the result we're getting is close to the effect you got from the C64. This has been a great learning process for me. I have been getting quite amazing sounds in my experiments, too. I'm sure many other people will enjoy using ring modulation. Maybe it could also be used for creating sound effects for games or videos. You can control LFO parameters with commands LFO=ON/OFF, LFOSPEED=n (in Hz), LFOWAIT=n (milliseconds), LFORANGE=n (cents of an octave). Here is an example that changes the LFO frequency gradually from 2hz to 12hz: @1
DEFAULTTONE L1 O4 LFO=ON LFORANGE=200 LFOWAIT=0
LFOSPEED=2 C: LFOSPEED=4 C: LFOSPEED=6 C: LFOSPEED=8 C: LFOSPEED=10 C: LFOSPEED=12 C:
You can modulate another channel against this channel with command RINGMOD=n (n=modulator channel number). For example, adding this (using the second test .exe file) will set up channel 2 to be modulated by channel 1's output: @2
DEFAULTTONE BEEFUP=50 L1 O4 RINGMOD=1 F#: G: G#: A: Bb: B:
You can also try using the ASTRO effect (where the LFO waveform is square). I think I have enabled ring modulation in the export function in the second version I linked above - if not, the latest executable you can download here has the export enabled: sourceforge.net/p/beepcomp/code/ci/master/tree/beepcomp.exe?format=rawLet me know if you have any further questions! And any others interested in this development are welcome test-drive ring modulation
|
|