[Search for users] [Overall Top Noters] [List of all Conferences] [Download this site]

Conference napalm::commusic_v1

Title:* * Computer Music, MIDI, and Related Topics * *
Notice:Conference has been write-locked. Use new version.
Moderator:DYPSS1::SCHAFER
Created:Thu Feb 20 1986
Last Modified:Mon Aug 29 1994
Last Successful Update:Fri Jun 06 1997
Number of topics:2852
Total number of notes:33157

424.0. "DIY Editor for Yamaha DX100 - Help" by BARNUM::RHODES () Tue Jul 08 1986 13:50

    I recently acquired a DX100, and want to start writing some development
    tools to help me create custom voices.  
    
    One such tool that I have in mind, is a waveform "synthesizer" that
    plots the waveform resulting from a particular DX100/DX27/DX21 
    algorithym given the carrier/modulator frequency ratios and output 
    levels.  Of couse only one cycle of the output waveform would be 
    plotted, and a "plot" would consist of a pattern of character graphics.
    It should also be fairly easy to extend to the DX7 and TX7 series.
    
    What I need for this tool is the mathematical formula for Yamaha's
    FM algorithm describing the output function for a carrier modulated
    by a modulator.  
    
    Does anyone have this information, or know whether it is concealed
    Company information?  
    
    Has anyone else developed a tool like this, or any other related
    tool?
    
    Todd.
    
T.RTitleUserPersonal
Name
DateLines
424.2CANYON::MOELLERgeneric software nerdTue Jul 08 1986 14:367
    The latest (June) issue of Electronic Musician reviews a product
    from Hybrid Arts called 'DX Driod'. LIST price $245. It apparently
    will generate editable,saveable random patches for the entire DX
    product line. You may not want to reinvent the wheel... especially
    at that price...who pays list anymore?
    
    karl moeller
424.4Mod you laterJON::LOWLa Rochefoucauld never lived in the BronxTue Jul 08 1986 16:3211
    There was an article in KEYBOARD some time ago (I will look it up
    tonight) which had a PC-DOS BASIC program which plotted out the
    waveform resulting from FM synthesis.  I tried it on my Leading
    Edge model D - for simple combinations it was interesting (how to
    create sawtooth-like and squarewave-like waveforms), but for
    complex combinations of modulators and carriers, it was difficult
    to attach any "meaning" to the resulting waveform.
    
    But it is fun to try.
    David
    
424.5F(M) = ?BARNUM::RHODESTue Jul 08 1986 16:4322
    re: .2
    
    I will look into the DX Droid.  The tool I had in mind wouldn't
    actually create patches, just perform the FM math on sine waves
    stored in arrays, and plot the resulting (output) array.  Could
    be done on a VAX in PASCAL in less than a day if I knew the math.
    
    I have already written a program that accepts different frequency
    ratios as input, performs convolution on the two sine waves with 
    those frequency ratios, and plots the results.  I could salvage the 
    input and the plotting routines, and just substitute an FM algorithm 
    in place of the convolution algorithm.  
    
    This would allow the user to enter the freq ratio of the carrier, 
    the freq ratio of its modulator, and then plot the resulting waveform
    right before your very eyes.  A good program to start with.
    
    Simple with the math.  Difficult without.
    
    Todd.
    
    
424.6The case of the missing math continues...BARNUM::RHODESTue Jul 08 1986 18:5510
    Re: .4
    
    Sounds like it may contain what I am looking for.  Could you possibly
    send me a copy of the article via internal mail?  Mailstop is:
    
    MR01-2/G6
    
    Thanks,
    Todd Rhodes.
    
424.7Theory of FMHYDRA::AURENZScot Aurenz, Ltn2-2/h7, 226-6342Tue Jul 08 1986 22:58129
>    One such tool that I have in mind, is a waveform "synthesizer" that
>    plots the waveform resulting from a particular DX100/DX27/DX21 algorithm
>    
>    What I need for this tool is the mathematical formula for Yamaha's
>    FM algorithm describing the output function for a carrier modulated
>    by a modulator.  
    
	Below is a brief introduction to the mathematics of frequency 
	modulation, as you requested. At the same time though, I want 
	to note that the time-domain waveform actually gives you very 
	little insight as to what the sound is like, and hence has 
	relatively little value as an instrument-design tool.

	Furthermore, while FM is a well-known process needing only
	a few standard parameters to describe the output waveforms, 
	mapping the parameters used below onto Dx7 parameters
	(output level = 0..99, feedback = 1..7,	and so on) is 
	another matter entirely. Data on this is a bit harder to come by. 
	That which exists has been measured by individuals, and not 
	released by Yamaha. 

	My suggestion is that one's time is better spent trying to 
	understand the behavior of FM in general, rather than trying 
	to simulate a Dx7. Use the formulas to explore the effects of 
	varying different parameters. Understand the relationships 
	between them, and build	up a "heuristic understanding" for 
	yourself. THEN, go to the Dx and try to re-create what you've 
	seen in your experiments.
						Scot
	-----------------------------------------------------------

	And now, intro to time-domain relationships in FM:


	To be precise, FM is a form of ANGLE MODULATION, in which
	the phase angle of a signal is modulated (instead of its
	amplitude, for example). 

	An angle-modulated signal can be described by the formula

		x(t)  =  A cos(w*t + P(t))

	where A is the amplitude of the carrier, w is the radian
	frequency of the carrier (w = 2*pi*frequency-in-hertz),
	and P(t) is the phase of the modulating signal, which
	varies over time.

	The phase of x(t) at any instant in time is 

		@ = w*t + P(t)		"@" is supposed to be a "theta"

	and so the frequency at any instant in time is the derivative
	of this:

		d@           dP
		--  =  w  +  --
		dt           dt

	For frequency modulation,

	 dP/dt  =  2*pi*Fd * m(t)
    	
	where Fd (read "F sub d") is called the "frequency deviation 
	constant" and is measured in Hz. (this would be much easier
	if I could use a few subscripts or something!)

	m(t), as you probably guessed, is your modulating signal, and
	can be anything. Fd, then is simply the amplitude of this signal.

	In general, then, we have

	P(t) = 2*pi*Fd * integral "over t" ( m(q) dq )

	For those confused by this last statement: remember that since 
	"m" here is not necessarily periodic, we integrate over t,
	(so we'll get a function of t) using "q" as a dummy-variable-
	of-integration.

	And we plug this into the basic equation given at the start:

		x(t) = A cos[ w*t + P(t) ]

	If the modulating signal is also a sinusoid, we can derive
	a specific formula:

	m(t) = cos(Wm*t)    (that is, "cosine omega sub m times t")

	Wm = 2*pi*Fm

	P(t) = 2*pi*Fd * integral from 0 to t ( cos (Wm*q) dq )

	Since m(t) is periodic, we now have a definite integral.
	Solving this yields

	       2*pi*Fd
        P(t) = -------  sin (Wm * t)
	       2*pi*Fm

	         Fd
	     =	---- sin (2*pi*Fm * t)
		 Fm


	Which again, can be plugged into the basic equation.

	Now what you will really want is the frequency-domain analysis,
	which is a bit more involved, and even harder to notate
	with an ASCII terminal. The references below can give you
	much useful background here.

    ----------------------------------------------------------------

    Here are a few references which can explain FM in more detail:


	Computer Music - Synthesis, Composition, and Performance
	Dodge, C., and Jerse, T.
	Schirmer Books, 1985

	"A Derivation of the Spectrum of FM with a Complex Modulating Wave"
	LeBrun, M.
	Computer Music Journal, Vol 1, #4, 1977
	(this is probably the article Tom alluded to in .1)

	Principles of Communications - Systems, Modulation, and Noise
	Ziemer, R.E, and Tranter, W. H.
	Houghton Mifflin, 1976
	
424.8Phase I completedBARNUM::RHODESThu Jul 17 1986 17:3957
    Thank you David and Scot for your extra efforts.  Between referencing
    many text books and the KEYBOARD program that David sent me, I have
    managed to create a tool on the VAX that accepts frequency ratios
    and output levels for both a carrier and a modulator, and plots
    the resulting waveform using character graphics.  Oh yea, it also
    plots the additive waveform (treating both operators as carriers)
    in a seperate file.  Of course, all of this assumes the feedback
    level is zero.
    
    The next step:
    
    The next step is to allow for a multiple modulator/single carrier
    configuration.  
    
    Once this is accomplished, I can go for broke, and change the tool to 
    be specific to the DX100/27/21 family by having it take the following 
    information as input:
    
    	a.  Algorithm number
    	b.  Feedback amount
    	c.  Operator 1 freq ratio
        d.  Operator 1 output level
    	e.  Operator 2 freq ratio
    	f.  Operator 2 output level
    	g.  Operator 3 freq ratio
    	h.  Operator 3 output level
    	i.  Operator 4 freq ratio
    	j.  Operator 4 output level
    
    
    
    I believe that I currently have the operator output levels and 
    frequency ratios of my program to the same specs as Yamaha's, as
    long as Yamaha sticks with a linear scheme (IE: an output level
    of 75 in my program is defined as an output level of 75 on the DX.)
    I will verify this empirically with an oscilloscope.
    
    Problems:
    
    	1.  How does feedback within 1 operator (either carrier or
    	    modulator) affect the signal, and to what degree (percentage-
    	    wise) for a given 0 to 7 value?  I will attack this by studying
    	    the mathematical effect of an operator modulating itself,
    	    and measure the percentage of modulation on the DX (via
    	    oscilloscope) for given feedback values.  Any other ideas?
    
    	2.  As stated by Scot in an earlier reply, complex waveforms tend
    	    to become meaningless when viewed in the time domain.  This
    	    is a problem.  The proposed solution for this one is to
    	    get hold of an FFT routine, link it in, and plot the spectrum
    	    of the waveforms.  I plan on looking into this too.  Any
    	    other ideas here either?
    
    
    Todd.
    
    
424.9Idea: Software selection of 4 or 6 operatorsPIXEL::COHENRichard CohenThu Jul 17 1986 17:458
    How about extending the tool to accept as input the 5th and 6th
    operators of a DX7/TX7/Tx rack mount ? Shouldn't be too hard, and they
    can be ignored when programming 4 operator synths. (The algorithms may
    not match up, however. For instance, the feedback loops may be on
    different operators). 
    
    	- Rick
    
424.10On pretty pictures and cognitive confusionJON::LOWLa Rochefoucauld never lived in the BronxThu Jul 17 1986 18:2619
    
    Re .8 - FFT of waveforms
    
    I have looked at real-time 1024 point FFT's (using SOUND CAP on
    my MacIntosh) of DX7, Top 40, and Red Sox Ballgame sounds.  They
    do not seem to have any more "meaning" than do graphical waveforms,
    although I am not sure in what metric I am looking for "meaning".
    
    I suspect this has a lot to do with the undeniable fact that sound,
    like vision, is perceptually interpreted, and the mind supplies
    the equivalence of "hidden lines" - experientially determined
    rules of good form, which guide and structure our interpretation
    of the sounds we hear.
    
    But seeing those FFT bar-code graphs flash out on the screen is
    a hell of a lot of fun.
    
    David
    
424.11Free (DEC) signal analysis SWORACLE::WATERSThu Jul 17 1986 18:4757
    Thought I might point out some software of interest:
    
    Since you are working on a VAX, you might consider using DEC software
    packages to provide some of the tools you need.  If you have access
    to a VAXstation II or --/GPX, then you can use VAXlab software,
    called LabStar at the moment.  VAXlab is a sort-of-bundled system
    including a VAXstation II, 50 KHz A/D, 300 KHz D/A, a clock/timer
    for these, parallel DMA I/O, and parallel I/O control lines.  The
    software package consists of MicroVMS, GKS, and LabStar.  I just
    installed the GKS and LabStar software on my workstation, and a
    friend is going to loan me an AXV11-C 25 KHz A/D-D/A combo board,
    which is supported in VAXlab but doesn't have the DMA capabilities
    of the new A/D and D/A boards.  I have no time to play with this
    stuff at the moment, and I'm about to go on vacation.  But I sure
    plan to get to it before the year is out.
    
    Now, about the LabStar software...  I printed out the documentation
    set (two binders _full_, plus GKS, hardware, uVMS doc., etc.) and
    gave it a once-over.  What you get is a big set of library routines
    to help in talking to the signal acquisition and output boards,
    a small set of routines for data analysis, and a modest library
    for data display.  Also included is an interactive shell that lets
    you run signal acquisitions, analysis, and output from interactive
    commands rather than writing a big program to do it all via library
    calls.  I'm not going to check right now, but the analysis routines
    include things like real and complex FFT, power spectrum, phase
    angle extraction, a few boring digital filters (mainly for noisy
    data smoothing, but I think there's one that can do FIR as well),
    histogram, and correlation.  But who cares--you can write your own
    filtering and convolution routines easily enough.  The graphics
    package includes stuff for 2-D, 3-D, and contour plotting.
    
    Since they use GKS as the basis for the graphics library, I don't
    think you _have_ to have a VAXstation to use VAXlab.  A VT240 or
    VT125 with Regis graphics may do it.  You do need a two-disk
    MicroVAX to have a practical system with A/D or D/A devices.  If
    you skip the signal I/O and just use the analysis and plotting
    software, you might be able to use the package on a machoVAX.  But
    you'll probably have to do some hacking on the software installation
    procedure.
    
    Geez, I can't wait to get the A/D-D/A board, a little practice amp,
    and 100 hours of free time to try this stuff out in my office. 
    Needless to say, I'm looking forward to applying these tools to
    a sampling synth, in addition to analyzing my Yamaha gear.  One
    more comment: some guy on USENET said once that he had been
    calibrating FM parameters for the Yamaha, and was going to write
    a manual relating his findings.  I can't remeber if he published
    yet... can anyone else recall that posting?
    
    Well, gotta get back to work.  More power to you, Todd!  Keep us
    posted.  And everyone, help yourself to the VAXLAB notes file
    on PYRITE.  The documentation is on-line, and prints on an LN01.
    
    GW
    
    
424.12What, signal analysis on a GPX???CLULES::SPEEDDerek Speed, WS Tech MktgFri Jul 18 1986 10:407
    This is somewhat unrelated, but if anyone gets any good images using
    FFT displays, etc. which could be used for a VAXstation II/GPX demo,
    let us over in Worksystems know.  All flashy demos are kindly
    accepted!!
    
    		Derek
    
424.13BARNUM::RHODESFri Jul 18 1986 12:4630
    RE: .9
    
    I will extend it to handle 6 operators.  It looks like low overhead
    to extend it from 4 to 6 (for phase II anyways, where the program
    will be machine independent).
    
    RE: .10
    
    The output in spectrum form would only really be useful when comparing 
    it to the spectrum of a known instrument.  This might become useful
    when trying to emulate a specific sound/instrument.  Of course the
    spectrum of an instrument changes over time, which adds another
    dimension of complexity.
    
    RE: .11
    
    I currently have access to spectrum analyzers, storage scopes, and
    programmable waveform generators.  I would probably rather use these
    tools for the empirical aquisition/analysis, rather than take the
    time to create my own Vax based analyzer.  Let us know what kind
    of goodies you come up with though!
    I am *definitely* interested in the Usenet manual on Yamaha
    Calibration.  If anyone has any information at all regarding this,
    I would be grateful if you could post it here.
    
    
    Thanks for the encouragement...
    
    Todd. 
    
424.14progressBARNUM::RHODESMon Jul 28 1986 16:4046
    Status update.
    
    I have completed phase II of the tool.  This will plot the waveform
    of a "stack" of operators consisting of one carrier and up to
    2,147,483,647 (Vax limit) modulators (this will become useful when
    Yamaha upgrades the DX7 to more operators :-)).  It also outputs
    a "picture" of the stack in Yamaha block diagram form and labels
    each operator with its inputted frequency ratio and amplitude.
    
    Upon invocation, the program asks the user for the number of operators
    in the stack.  Then it asks for the freq_ratio and amplitude of
    the carrier.  Then it asks for the freq_ratio and amplitude of each
    modulator, working "up the stack".  Output is to a seperate file.
    The output consists of a page of character graphics, and a page
    containing the stack diagram.
    
    I am currently working on implementing phase III, which is DX100/21/27
    specific.  I am having a problem with this, though.  Maybe someone
    can give me a hand here.  For the following sub-algorithm, how is the
    modulation of carrier described?
    
         +-----+   +-----+
         |mod1 |   |mod2 |
         |     |   |     |
         +-----+   +-----+
             \       / 
              \     /
               \   /
                \ /
              +-----+
              |car. |
              |     |
              +-----+
    
    Would the effective modulation signal be the sum of the mod1 and
    mod2 signals? (ie. Would the effective modulation signal be
    (mod1_amplitude * sin(mod1_freq) + mod2_amplitude * sin(mod2_freq)) ?)
    
    Any feedback would be appreciated.
    
    One last thing, if anyone would like a copy of either the phaseI
    or the phaseII programs, just let me know...
    
    Todd.
    
    
424.15help!BARNUM::RHODESTue Jul 29 1986 14:3726
    I have looked into the modulation problem described in .-1 last
    nite.  A semi-microscopic view of an operator uncovered the following
    diagram:
                in  in
    		|   |
    		v   v
    	      +-------+
    	      |sin osc|
    	      |       | operator
    	      |  out  |
    	      +-------+
                  |
                  v
                 out
        
    Can it be assumed that in the diagram in the previous reply, the
    two modulators feed the lower operator through the two inputs shown
    in the diagram above (ie. one modulator modulates the other
    modulator's waveform), whereas when an operator is modulated by 
    just one modulator, this modulator modulates the sine wave of
    the operator?  And does this mean that the freq ratio of a carrier
    that has two modulators feeding it is meaningless, since the carrier's
    sine wave is not even fed into the carrier itself?
     
    Todd the_confused.
    
424.16closing remarksBAILEY::RHODESMon Aug 25 1986 15:1118
Well, I have reached the point of diminishing returns on this project.
Edd Cote an myself dragged my DX-100 into the lab a couple of weeks ago
and took some data.  It seems that the DX output level is not linear -
it doesn't look like its log either.  WHAT IS IT????  Looks like
Yamaha is up to its usual "tricks" of discouraging anyone except Yamaha
from designing anything related to a Yamaha product.  They rigged the 
software so that the "adjustable" output of each operator is "Yamaha taper".

Operator feedback is also difficult to model and affects the resulting
waveform in an almost unpredictable mannor.  Seems to introduce lots of
HF harmonics and distorts the LF waveshape as well.

So, I have shelved this project.  The phase I and II programs work fine
and are interesting, but will never be more than tinkering tools.  Not
much practical use.

Todd. (who_hates_closed_architectures_or_closed_anythings)

424.174-Op RPGJAWS::COTEMy, you like nice today, Mrs. Cleaver.Fri Nov 14 1986 16:1823
    This may not exactly qualify as a "tool" per se, but I'm  sure it
    will generate some interesting DX patches...
    
    I just whipped up a "random patch generator" for 4-op DX synths.
    
    In order to keep the patches from *all* being to wild I took some
    liberties with the definition of the word "random"....
    
          Pitch Envelope Data is random only if turned on. If you don't
          care to have your patches wandering from C5 to C1, you don't
          have to.
    
          Same thing with keyboard scaling. Only random if turned on.
    
          Operator frequencies are random, but weighted towards whole
          numbers by about 2:1. (Only frequencies used by Yamaha will
          show up at any rate.)
    
    Big Drawback - no synth interface, you input the parameters manually.
    
    Might be fun. Kinda like letting the cat do the editting.
    
    Edd
424.18So?.....FLASH1::GOLDSTEINOutrageousness!!? Just a way to WAKE PEOPLE UP!Mon Nov 17 1986 10:394
    
    
    Sounds Great,,, Where is it?
    
424.19Easy as 1 2 3!!!JAWS::COTEMy, you like nice today, Mrs. Cleaver.Mon Nov 17 1986 10:5317
    It's sitting on the hard disk of my Rainbow.
    
    I did on Lotus 1-2-3.
    
    I discovered a couple of minor-type bugs over the weekend. Easy
    to fix stuff like the range of certain parameters. (-3 to +3? 0
    to 99? 0 to 15? 0 to 31?)
    
    I'm also working on more "user-defined" parameters, where you can
    pick an algorythm, frequency, ect. yourself *OR* leave it up to
    the noise gods.
    
    Got some "interesting" noises this weekend....
    
    Anyone know how to tansfer .WKS files between systems?
    
    Edd