Author |
Message |
majutsu
Joined: Jun 18, 2006 Posts: 151 Location: New York
Audio files: 1
|
Posted: Sun Nov 05, 2006 12:08 pm Post subject:
problems with sync |
|
|
if sync 0 is frequency modulation, and vibrato is slow frequency modulation, why doesn't something like the following work in chuck?
Code: | SinOsc s => dac;
SinOsc lfo => s;
0 => s.sync;
440.0 => s.freq;
1.0 => lfo.freq;
10.0 => lfo.gain;
while(true) {
10::ms => now;
}
|
but something like the following works:
Code: | SinOsc s => dac;
SinOsc lfo => blackhole;
440.0 => s.freq;
1.0 => lfo.freq;
while(true) {
440 + (lfo.last() * 10) => s.freq;
10::ms => now;
}
|
Also, modulating the phase works fine,
Code: | SinOsc s => dac;
SinOsc lfo => s;
2 => s.sync;
440.0 => s.freq;
1.0 => lfo.freq;
10.0 => lfo.gain;
while(true) {
10::ms => now;
} |
leading me to believe that the frequency sync just does not work like i expect it to. Am I missing something in the concept of a frequency sync or is something wrong with sync function? It seems like only the phase sync actually works. (This is 1.2.7b btw)
Also, notice that phase shift is not a workaround, as the blackhole version (frequency mod vibrato) sounds better, cleaner and less 'phasy' than the phase sync. _________________ All phenomena are atoms in association and dissociation. |
|
Back to top
|
|
|
kijjaz
Joined: Sep 20, 2004 Posts: 765 Location: bangkok, thailand
Audio files: 4
|
Posted: Sun Nov 05, 2006 2:48 pm Post subject:
|
|
|
i thought sync == 1 is for phase mod and
sync == 2 is for simple FM...
is this what you're looking for?
- - -
i mainly use phasemod and FM.
and they still work fine for me.
phase mod..
i guess it turned out to be a waveshaper.
Code: | SinOsc smod => SinOsc s => dac;
1 => s.sync;
for(int i; i < 40000; i++) {
i / 10000.0 => smod.gain;
2 :: samp => now;
} |
FM..
it's just simple FM.
Code: | SinOsc smod => SinOsc s => dac;
2 => s.sync;
for(int i; i < 40000; i++) {
i / 4.0 => smod.gain;
2 :: samp => now;
} |
|
|
Back to top
|
|
|
majutsu
Joined: Jun 18, 2006 Posts: 151 Location: New York
Audio files: 1
|
Posted: Sun Nov 05, 2006 6:55 pm Post subject:
|
|
|
according to the manual, 0=FM, 1 is reserved, 2 = PM
Phase mod works, and is equivalent to FM synthesis in sounds.
But a true slow FM, a vibrato, does not work with sync 0 as it should.
Slow phase mod does not sound like vibrato.
something is wrong with sync. _________________ All phenomena are atoms in association and dissociation. |
|
Back to top
|
|
|
ian-s
Joined: Apr 01, 2004 Posts: 2669 Location: Auckland, New Zealand
Audio files: 42
G2 patch files: 626
|
Posted: Sun Nov 05, 2006 8:28 pm Post subject:
|
|
|
Using the term sync to refer to PM or FM has me scratching my head. |
|
Back to top
|
|
|
majutsu
Joined: Jun 18, 2006 Posts: 151 Location: New York
Audio files: 1
|
Posted: Sun Nov 05, 2006 8:41 pm Post subject:
|
|
|
sync 0 means input Modulates Frequency, hence FM
syn 2 means input Modulates Phase, hence PM
but the thing is this doesn't work right
I really need to route the output to an oscilloscope . . . hey i think i'll try to do this _________________ All phenomena are atoms in association and dissociation. |
|
Back to top
|
|
|
kijjaz
Joined: Sep 20, 2004 Posts: 765 Location: bangkok, thailand
Audio files: 4
|
Posted: Mon Nov 06, 2006 3:18 am Post subject:
|
|
|
according to
http://chuck.cs.princeton.edu/release/VERSIONS
new update for version: 1.2.0.7
Code: |
- (fixed) SinOsc/TriOsc/PulseOsc/SqrOsc/Phasor.sync now unified:
.sync == 0 : sync frequency to input
.sync == 1 : sync phase to input
.sync == 2 : fm synth |
so i guess you haven't checked out the page.
i was confused at first coz i read from the manual that came with chuck,
but the manual hasn't beed updated.
so i suggest you stick to the above page ^_^.
i've tested three of them.
they works fine.
so now you need sync == 1 for phasemod and sync == 2 for FM. |
|
Back to top
|
|
|
majutsu
Joined: Jun 18, 2006 Posts: 151 Location: New York
Audio files: 1
|
Posted: Mon Nov 06, 2006 6:43 am Post subject:
|
|
|
very interesting!
it certainly explains the buzzy sound of sync 2 !
but how is fm (sync 0) different than fm synth (sync 2)?
also sync 0 when modulated slowly doesn't produce vibrato as true input modulating frequency would.
so, something is still wrong with sync. i know they are still working on this, as your problems with sync were what motivated 1.2.7b I believe.
thanks for showing the page.
i could of course use blackhole, but i don't like it when features don't work for me. _________________ All phenomena are atoms in association and dissociation. |
|
Back to top
|
|
|
kijjaz
Joined: Sep 20, 2004 Posts: 765 Location: bangkok, thailand
Audio files: 4
|
Posted: Mon Nov 06, 2006 1:31 pm Post subject:
|
|
|
majutsu:
as i understand.. sync 0 is the same as setting freq of an oscillator.
but it uses the feeded signal as the freq.
so that..
Code: | // Step to SinOsc (sync the input signal to Frequency) to DAC
Step s1 => SinOsc s2 => dac;
// set sync type to Frequency (notice: not Frequency Modulation)
0 => s2.sync;
// feed signal with value 100, 200, 300, ... into s2, 1 second each.
for(1 => int i; i < 11; i++) {
i * 100 => s1.next;
second => now;
} |
.. is the same as ..
Code: | // simple SinOsc to DAC
SinOsc s2 => dac;
// set s2\s frequency to value 100, 200, 300, ...
for(1 => int i; i < 11; i++) {
i * 100 => s2.freq;
second => now;
} |
- - -
but FM (Sync number 2) is like adding the input value to freq.
so let's try this frist.. (using Sync number 0 to make a simple FM synth):
Code: | // use Step to set carrier signal's center frequency
Step sfreq => SinOsc s => dac;
// add modulation to s's frequency
SinOsc smod => s;
// the sum of sfreq and smod's output is gonna be s's frequency
0 => s.sync;
// set modulator frequency
300 => smod.freq;
// set carrier frequency
100 => sfreq.next;
// increase FM depth from 300 to 600 to 900 to ..., 1 second each
for(1 => int i; i < 11; i++) {
i * 300 => smod.gain;
second => now;
} |
but we can shorten the code by using sync number 2 to make simple FM:
Code: | // use smod to modulate the frequency of s
// but we can set s's center frequency now.
SinOsc smod => SinOsc s => dac;
2 => s.sync;
// set modulator frequency
300 => smod.freq;
// set carrier frequency
100 => s.freq;
// increase FM depth from 300 to 600 to 900 to ..., 1 second each
for(1 => int i; i < 11; i++) {
i * 300 => smod.gain;
second => now;
} |
those two codes above should sound the same.
using sync number 2 is more convenient in this way.
i love using sync 2 FM for this too
hehehe just for fun for now...
it's a self-Frequency-Modulating sine oscillator..
Code: | // SinOsc to DAC
SinOsc s => dac;
// Use s to self-modulate itself with FM sync
s => Gain FMdepth => s;
2 => s.sync;
4000 => s.freq;
for(0 => int i; i < 40000; i++) {
i => FMdepth.gain;
10::samp => now;
} |
- - -
bye for now. i guess sync'd be clear for you now, majutsu ^_^
nice sharing with you. |
|
Back to top
|
|
|
majutsu
Joined: Jun 18, 2006 Posts: 151 Location: New York
Audio files: 1
|
Posted: Mon Nov 06, 2006 3:01 pm Post subject:
|
|
|
well kijjaz, everything you say makes perfect sense in terms of my results, the scope results, etc.
i wish i would get some confirmation somewhere. The chuck list was unresponsive on this, and a previous thread on this was ignored. i am glad someone care about details and not just loosely slopping truth around
But your last post is dead on in terms of the playing i've done with the sync function. that's why, for example, an lfo of 10 hz at sync 0 makes no sound, because it's setting the frequecy to 10 - i.e. not audible. the manual, the language documentation, and the examples folder are all to the contrary on this. also, the english word sync should imply synchronization, not resetting, but programmers aren't notorious for human language communication skills
not only that, but it appears we've lost the very important function of phase sync according to your explanation?!? so the endless rising tone accomplished by phase shifting a bank of oscillators would be impossible in chuck in 1.2.7b.
again, your hypothesis is clear and fits all my available data. so i thank you there -- and i think you are right.
this really needs to be clarified though. the manual needs redone, and the examples folder, and probably something needs to be on the wiki too. the way things stand, people attempting synthesis are sure to feel chuck is unreliable as documented. also, the term "fm synth" for sync 2 is very unclear at this point. sin (wA + p) modifying w is fm mod, p is phase mod. both will sound the same for simple lfo, but if it's really phase mod, and you put the sound through a delay line (which i can tell you know is like multiplying by a complex number . . . ) you will have unforseen chaos, not of the pretty kind. . . .
very helpful interchange. i can tell you've looked at chuck closely, and i thank you. Very helpful points indeed
brian _________________ All phenomena are atoms in association and dissociation. |
|
Back to top
|
|
|
ge
Joined: Aug 13, 2006 Posts: 108 Location: Palo Alto, CA
|
Posted: Mon Nov 06, 2006 11:43 pm Post subject:
|
|
|
Hey all!
Sorry for the delay in a clear response and thanks to those who have investigated and tested this. We are currently in New Orleans for a conference (ICMC) and will devote time to this issue after we get back. This aspect is indeed poorly documented and also needs additional work in terms of implementation!
We shall refer back to this thread when we take another pass at .sync functionality. Sorry again for the delay in responding.
Best,
Ge! |
|
Back to top
|
|
|
kijjaz
Joined: Sep 20, 2004 Posts: 765 Location: bangkok, thailand
Audio files: 4
|
Posted: Tue Nov 07, 2006 1:19 am Post subject:
|
|
|
thanks again majutsu & also ge.
to test them all, i'd like to try simple vibrato & using phasemod also..
maybe this topic can grow into a place with more reference on using oscillator sync option hehe.
with vibrato, i usually use FM.
(for me sync 2 == FM isn't too confused..
coz we're Modulating the Frequency of the oscillator..
so the input signal is going to modulate the value of the center frequency set in .freq)
Code: | // Main Oscillator: Sine Wave Oscillator to DAC
SinOsc s => dac;
220 => s.freq;
// LFO: use a triangle wave osc to FM the main osc
TriOsc lfo => s;
2 => s.sync;
// LFO frequency = 4hz
4 => lfo.freq;
// change modulation depth to see if it has the vibrato we need..
for(0 => int i; i < 10; i++) {
i * 2 => lfo.gain;
second => now;
} |
now, i'm going to test the feature of PhaseMod
(i still haven't tested it with this simple way..
coz mainly i used it with other purposes.. and didn't test the simplest feature -_-"
i'm going to use p - a phasor.. to set the phase of s - the main sine wave oscillator
so now the .freq of s would not work. the value of s will be generated only from the phase sync.
Code: | // Main Oscillator: Sine Wave Oscillator to DAC
SinOsc s => dac;
// Phasor: use a phasor to set phase of the main osc
Phasor p => s;
1 => s.sync;
// run the main osc at different frequency by changing the phasor's frequency
for(0 => int i; i < 10; i++) {
i * 100 => p.freq;
second => now;
} |
now i'm gonna try applying another signal to phasemod with the main osc.
doing this simply create FM sound..
is this way the poppular way in Digital FM Synth?
Code: | // Main Oscillator: Sine Wave Oscillator to DAC
SinOsc s => dac;
// !! setting the frequency will have no meaning now. -_-"
10000 => s.freq;
// Phasor: use a phasor to set phase of the main osc
// set the main phasor frequency to 220hz
Phasor p => s;
1 => s.sync;
220 => p.freq;
// use another oscillator to modulate the phase of the main osc..
// this should create an FM-Sound with phase mod.
// try phase-modding with sine wave at 660hz
SinOsc smod => s;
660 => smod.freq;
// change the gain of smod, and we've got a phasemod FM synth sound ^_^
for(0 => int i; i < 10; i++) {
i * 0.2 => smod.gain;
second => now;
} |
what i've been using with PhaseMod is for waveshaping effect.
i feed the input signal into an oscillator..
for example, a sine wave oscillator.. with PhaseMod sync ..
this will perform waveshaping distortion with the input signal.
(if input signal is x,
the output signal would be sin(2 * pi * x) )
so we've got sin(2 * pi * x) as the waveshaping transfer function.)
with this, no matter how much signal we feed in,
the output would always be between -1 and 1.
when increasing the gain of the input,
we'll get one nice analog-sounding distortion.
Code: | // Main Oscillator: Sine Wave
SinOsc s;
// Connect main osc to Waveshaper (with Sine transfer function), and to DAC
s => SinOsc waveshaper => dac;
1 => waveshaper.sync;
// let's try a synth sound with falling frequency.
// and also a falling gain.
// i'll make the gain fall faster by pow10
// it's an attempt to create an analog bassdrum sound
// with a slight overdrive.
// change the 1.2 value to a higher / lower value to hear the different overdrive amount.
// at 0.5 and above, it'll start to clip and create a warm overdrive.
for(1 => int i; i < 10; i++) {
for(0 => int j; j < 1000; j++) {
i * 20 * (1000 - j) * 0.001 => s.freq;
Math.pow((1000 - j) * 0.001, 10) * 1.2 => s.gain;
ms => now;
}
} |
- - -
enough for today..
i'm going to have breakfast heheh ^_^
i'll share with you all more on the way i use sync. |
|
Back to top
|
|
|
kijjaz
Joined: Sep 20, 2004 Posts: 765 Location: bangkok, thailand
Audio files: 4
|
Posted: Tue Nov 07, 2006 2:34 am Post subject:
|
|
|
ahh.. done from breakfast ..
(breakfast at 3PM? -_-")
ge, i've been thinking about sync
and have some suggestions.
- now, using phasemod (sync == 1) make .freq disabled.
but i think it'd be more useful if it's enabled.
so we'll have the oscillator running at the specified .freq
but the index (for table look-up) can be modified with phasemod.
with this, it's like setting the offset of the index.. (am i right?)
- now, frequency sync (sync == 0) is just the same as FM with freq == 0
so i think sync == 0 is still not that important..
...
hmm i dunno.. but it still makes sense to me to have a frequency sync.
so it's up to the next version(s)
i've got no other ideas for now. |
|
Back to top
|
|
|
|