| Hi all,
Csound neophyte here. I'm trying to implement single oscillator FM,
where the output of the oscillator modulates the frequency of the
oscillator. According to The Computer Music Tutorial by Curtis Roads,
the result should be a waveform that approaches the spectrum of a
sawtooth with increasing feedback indexes (in a range from 0 to 2).
Unfortunately, my attempts at producing this in Csound have not been
unsuccessful. At very low indexes, the output is just like a sine wave.
With slightly higher indexes, it produces a buzzier waveform that dips
in pitch with as the index increases. Increase the index just a little
bit more, and the output sounds like my modem channeling the spirit of
Pharoah Sanders; a very cool, chaotic sound, but not what I was trying
to do. (Although I will undoubtedly be using this sound a great deal in
the future, as I love sounds that break into chaotic subharmonics.
Anyone else out there own an Octave Cat? :)
Does anyone have any advice? Is there a way of modulating the phase of
an oscillator in Csound, as opposed to the frequency? This would
probably solve the problem, but I am not sure what unit generator to
use. As it stands, it definitely sounds like there is no real
through-zero FM happening, as in the Yamaha FM implementation. The
pitch ends up going down to zero, and then just stopping (i.e. silence),
before reappearing in some totally weird place.
Thanks,
Sean Costello
P.S. Here's my orchestra and a sample score.
; FeedbackFM.orc
; An unsuccessful attempt at implementing
; feedback FM, by Sean Costello.
; (Unsuccessful in the sense of not doing what
; I intended it to do. It still sounds pretty
; cool to me.)
sr = 22050
kr = 2205
ksmps = 10
nchnls = 1
instr 1
aosc1 init 0
idur1 = p3 ; overall duration of note
ifreq1 = p4 ; main frequency
iamp1 = p5 * 4000 ; overall amplitude of note
iattack1 = p6
; attack of AD-style envelope for overall amplitude.
iamp2 = p7 ; feedback FM index
iattack2 = p8
; attack of AD-style envelope for feedback amplitude.
; kamp1 controls overall amplitude of note
kamp1 linseg .0001, iattack1, iamp1, (idur1 - iattack1), .0001
; kamp2 controls amplitude of feedback
kamp2 linseg .0001, iattack2, iamp2, (idur1 - iattack2), .0001
; I divided iamp2 by 10, just to get the feedback in a useable range.
aosc1 oscili kamp1, ifreq1 + (aosc1 * iamp2/10), 1
out aosc1
endin
; Feedback FM.sco by Sean Costello
; a3 at different FM index levels.
f1 0 16384 10 1
i1 0 5 220 1 2 .2 2
i1 5 5 220 1 2 .7 2
i1 10 5 220 1 2 1.2 2
i1 15 5 220 1 2 4 2 |