GUS Programmer's Digest Fri Jul 23 00:07 Volume 2: Issue 27 Today's Topics: Real synths have sliders... SDK Doc Questions Standard Info: - Meta-info about the GUS can be found at the end of the Digest. - Before you ask a question, please READ THE FAQ. ---------------------------------------------------------------------- Date: Thu, 22 Jul 93 06:59:40 PDT From: deraud@power.amasd.anatcp.rockwell.com (Robert Lee DeRaud) Subject: Real synths have sliders... Message-ID: <9307221359.AA08738@power.amasd.anatcp.rockwell.com> One of the main problems with sample-playback synths (at least those without extensive and expensive back-end signal processing) is that they cannot emulate classical analog synths worth a damn. The kind of beast I'm talking about typically has MiniMoog somewhere in its gene pool: Signal Generator ---> VCF ---> VCA ---> Output along with LFO's, controller wheels, envelope generators, etc providing "programmable" control inputs to the VCF and VCA. The GUS can do a decent enough job of emulating the VCA since amplitude ramping is available, but it cannot handle the VCF at all: the frequency content of the output is ENTIRELY controlled by the sample being played. The next part of this conversation typically goes like: "Well, get a MiniMoog or Prophet or whatever and sample it!" WRONG! With the exception of some (optional) keyboard-follow effects, the control inputs to the analog synths VCF are INDEPENDENT of the note being played. In particular, the LFO frequency and envelope generator time constants are usually fixed. Playing back the samples at various pitches makes these emulated controls appear to follow the pitch. E.g. if the sample is played back an octave higher than recorded, the LFO seems to be running twice as fast and the envelope reaches its release point at half the expected time. The only way out of this is to multi-sample AT EVERY NOTE! (So when is the 8MB "SuperGUS" coming out?) [An aside: anyone truly serious about synthesizers owes it to him/herself to sit down and fool around with an older analog synth at least once. But be warned, the knob/slider twiddling can be truly addictive!] So...the whole point of this is the question: can a GUS emulate a VCF by using what amounts to a two-dimensional sample? If we have a bunch (say 512) of small, simple waveform tables (say 512 samples each), that's one 256K memory bank. Each table has a different frequency content, i.e. it corresponds to a different VCF setting. The idea is to switch from table to table while the note is playing to emulate the VCF, in the same way that the amplitude is changed to emulate the VCA. But can the sample base address be twiddled this way without generating an ugly assortment of clicks and pops? (Note that the table OFFSET is not modified, so there is a reasonable continuity in the output sample stream, assuming the wave tables are properly constructed.) [Another annoying aside: I THINK this is how the Fairlight worked, but since they cost >$30K, I never got one to use at home :-)] Comments? ------------------------------ Date: Thu, 22 Jul 1993 10:09:57 -0700 (PDT) From: roberts@brahms.amd.com (Dave Roberts) Subject: SDK Doc Questions Message-ID: <9307221709.AA23905@angelo.amd.com> I just snarfed the Postscript SDK documentation off the GUS mailserver, along with the SDK itself. After reading the docs, I have a few of questions. First, a general comment: The theory of operation section of the documentation needs to be expanded greatly! All the stuff that follows later is pretty good, but there needs to be more discussion about the format of sound data, loop points, volume envelopes, etc. In other words, how all this stuff generally works. Much of this stuff may be obvious to various people, but it wasn't for me. If I hadn't been so engrossed with the GUS already, I'd have been totally lost. Basically, the terminology wasn't defined (e.g., I was confused between a start and a begin point on a wave for a while). Most of my questions would be answered with an expanded general theory section. Now, on to the real questions. Question #1: How does looping work? Specifically, how does reverse looping operate? What are the end points? What are all the various looping options? The docs mention resetting end points to deal with sampled decays. What are the exact steps involved with this? How do you handle decay without using a sampled decay? Just a volume ramp down until you get to zero and then shut off the voice? Question #2: The voice control registers have bits that can be modified at any time by the GF1. The GF1 does a read-modify-write cycle to update these bits. The SDK docs say that when writing to a register containing one of these bits that the software should write the value twice, separated by a delay (which is specified by I don't remember). Anyway, this is all fine and dandy, but imagine this situation. Voice control reigster, bit 6, controls the direction of movement through the wave. What if I (the program) want to update a bit in the register. I read the register value, modify the bit I want, and write it back twice. What if the GF1, between the program's writes changes the direction of movement bit (because it was set to a loop mode and hit the end of the loop points and is now bouncing back the other way)? The problem that I see is that I (the program) will end up setting the direction of movement bit back to the old value, which will start the wave back bouncing the other way before it reaches the other loop point. Am I right with this, or do I not understand looping? Is this a problem? Is there a workaround other than, "don't do that"? Question #3: One page 4 of the SDK docs they are describing volume ramping. There is a table that describes the rate bits. The table mentions something called a "FUR". What's a FUR? Question #4: What is the centerpoint for unsigned waveforms, 7F or 80 (hex)? Thanks for any help you gurus might be able to give. Dave Roberts Advanced Micro Devices, Inc. I/O and Network Products Division david.roberts@amd.com ------------------------------ End of GUS Programmer's Digest V2 #27 ************************************* To post to tomorrow's digest: To (un)subscribe or get help: To contact a human (last resort): FTP sites: archive.epas.utoronto.ca pub/pc/ultrasound wuarchive.wustl.edu systems/msdos/ultrasound Hints: - Get the FAQ from the FTP sites or the request server. - Mail to for info about other GUS related mailing lists (UNIX, OS/2, GUS-MIDI, etc.)