<?xml version="1.0"?>
<feed xmlns="http://www.w3.org/2005/Atom" xml:lang="en">
	<id>http://sessrumnir.net/fernseher/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=96.42.235.80</id>
	<title>Fernseher - User contributions [en]</title>
	<link rel="self" type="application/atom+xml" href="http://sessrumnir.net/fernseher/api.php?action=feedcontributions&amp;feedformat=atom&amp;user=96.42.235.80"/>
	<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=Special:Contributions/96.42.235.80"/>
	<updated>2026-06-26T11:10:00Z</updated>
	<subtitle>User contributions</subtitle>
	<generator>MediaWiki 1.37.1</generator>
	<entry>
		<id>http://sessrumnir.net/fernseher/index.php?title=Other_stuff&amp;diff=2143</id>
		<title>Other stuff</title>
		<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=Other_stuff&amp;diff=2143"/>
		<updated>2009-04-07T05:49:25Z</updated>

		<summary type="html">&lt;p&gt;96.42.235.80: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; wavdft sample.wav -o sample.fis --freq=freq&lt;br /&gt;
 wavdft sample.wav -o sample_freq.dft --freq=freq&lt;br /&gt;
By default, converts sample.wav to sample.fis, and tries to find the fundamental.&lt;br /&gt;
&lt;br /&gt;
ssffis takes an ssf file (ascii csv formated file with harmonic, amplitude pairs) and creates an fis file.  First line is a units line, indicating whether frequency is given as harmonic number, or actual frequency, and whether amplitude is in dB or straight amplitude.  Can also output a dft, if desired, where freq determines what to use as the fundamental (regardless of what the original input frequencies might be).&lt;br /&gt;
 ssffis blah.ssf -o blah.fis&lt;br /&gt;
 ssffis blah.ssf -o blah_freq.dft&lt;br /&gt;
&lt;br /&gt;
 dftgen -o blah.fis&lt;br /&gt;
 dftgen -o blah_freq.dft&lt;br /&gt;
Uses blah parms to generate either a fis or dft&lt;br /&gt;
&lt;br /&gt;
 rsfgen (blah.fis:length)+ -o Rank_length.rsf --keys=61 --aboves=1 --belows=1 --detune=-1&lt;br /&gt;
By default assumes unsplit and no renaming, 61 keys, no aboves or belows, and no detuning.  Assumes 8&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Rank_length.rsf:&lt;br /&gt;
 #offset &amp;lt;index of stated length pitch&amp;gt;&lt;br /&gt;
 Rank_length.rank: path/to/blah_f1.pipe \&lt;br /&gt;
                   path/to/blah_f2.pipe&lt;br /&gt;
                   ...&lt;br /&gt;
&lt;br /&gt;
 dftwav blah.fis -o blah_freq.raw --rate=44100 --norm=8000 --attack=0.05 --decay=0.05 --duration=1.00&lt;br /&gt;
 dftwav blah_freq.dft -o blah_freq.wav --rate=44100 --norm=8000 --attack=0.05 --decay=0.05 --duration=1.00&lt;br /&gt;
By default, tries to determine what to do based on limited filenames&lt;br /&gt;
&lt;br /&gt;
 pipegen blah.fis -o blah_freq.pipe --rate=44100 --norm=1.0&lt;br /&gt;
 pipegen blah_freq.dft -o blah_freq.pipe --rate=44100 --norm=1.0&lt;br /&gt;
&lt;br /&gt;
 rankgen Blah_len.rsf -o Blah_len.rank --offset=0&lt;/div&gt;</summary>
		<author><name>96.42.235.80</name></author>
	</entry>
	<entry>
		<id>http://sessrumnir.net/fernseher/index.php?title=Spectra&amp;diff=2142</id>
		<title>Spectra</title>
		<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=Spectra&amp;diff=2142"/>
		<updated>2009-04-07T00:28:36Z</updated>

		<summary type="html">&lt;p&gt;96.42.235.80: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; dB=20log(p1/p0)&lt;br /&gt;
 0dB is barely audible&lt;br /&gt;
&lt;br /&gt;
Open Diapason&lt;br /&gt;
 1 60&lt;br /&gt;
 2 55&lt;br /&gt;
 3 57&lt;br /&gt;
 4 49&lt;br /&gt;
 5 44&lt;br /&gt;
 6 44&lt;br /&gt;
 7 37&lt;br /&gt;
 8 38&lt;br /&gt;
 9 38&lt;br /&gt;
 10 24&lt;br /&gt;
 11 25&lt;br /&gt;
 12 24&lt;br /&gt;
 13 23&lt;br /&gt;
 14 22&lt;br /&gt;
 15 21&lt;br /&gt;
 16 18&lt;br /&gt;
 17 18&lt;br /&gt;
 18 17&lt;br /&gt;
 19 16&lt;br /&gt;
&lt;br /&gt;
Viole D&amp;#039;Orchestre&lt;br /&gt;
 52&lt;br /&gt;
 54&lt;br /&gt;
 56&lt;br /&gt;
 60&lt;br /&gt;
 48&lt;br /&gt;
 49&lt;br /&gt;
 50&lt;br /&gt;
 43&lt;br /&gt;
 40&lt;br /&gt;
 38&lt;br /&gt;
&lt;br /&gt;
Clarinet&lt;br /&gt;
 1 1&lt;br /&gt;
 2 0&lt;br /&gt;
 3 0.75&lt;br /&gt;
 4 0&lt;br /&gt;
 5 0.5&lt;br /&gt;
 6 0&lt;br /&gt;
 7 0.14&lt;br /&gt;
 8 0&lt;br /&gt;
 9 0.5&lt;br /&gt;
 10 0&lt;br /&gt;
 11 0.12&lt;br /&gt;
 12 0&lt;br /&gt;
 13 0.17&lt;br /&gt;
&lt;br /&gt;
Saxaphone A&lt;br /&gt;
 -8&lt;br /&gt;
 0&lt;br /&gt;
 -43&lt;br /&gt;
 -45&lt;br /&gt;
 -48&lt;br /&gt;
 -40&lt;br /&gt;
 -58&lt;br /&gt;
 -76&lt;br /&gt;
 -93&lt;br /&gt;
 -95&lt;/div&gt;</summary>
		<author><name>96.42.235.80</name></author>
	</entry>
	<entry>
		<id>http://sessrumnir.net/fernseher/index.php?title=Spectra&amp;diff=2141</id>
		<title>Spectra</title>
		<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=Spectra&amp;diff=2141"/>
		<updated>2009-04-07T00:28:16Z</updated>

		<summary type="html">&lt;p&gt;96.42.235.80: New page:  dB=20log(p1/p0)  0dB is barely audible  Open Diapason  1 60  2 55  3 57  4 49  5 44  6 44  7 37  8 38  9 38  10 24  11 25  12 24  13 23  14 22  15 21  16 18  17 18  18 17  19 16  Viole D&amp;#039;...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; dB=20log(p1/p0)&lt;br /&gt;
 0dB is barely audible&lt;br /&gt;
&lt;br /&gt;
Open Diapason&lt;br /&gt;
 1 60&lt;br /&gt;
 2 55&lt;br /&gt;
 3 57&lt;br /&gt;
 4 49&lt;br /&gt;
 5 44&lt;br /&gt;
 6 44&lt;br /&gt;
 7 37&lt;br /&gt;
 8 38&lt;br /&gt;
 9 38&lt;br /&gt;
 10 24&lt;br /&gt;
 11 25&lt;br /&gt;
 12 24&lt;br /&gt;
 13 23&lt;br /&gt;
 14 22&lt;br /&gt;
 15 21&lt;br /&gt;
 16 18&lt;br /&gt;
 17 18&lt;br /&gt;
 18 17&lt;br /&gt;
 19 16&lt;br /&gt;
&lt;br /&gt;
Viole D&amp;#039;Orchestre&lt;br /&gt;
 52&lt;br /&gt;
 54&lt;br /&gt;
 56&lt;br /&gt;
 60&lt;br /&gt;
 48&lt;br /&gt;
 49&lt;br /&gt;
 50&lt;br /&gt;
 43&lt;br /&gt;
 40&lt;br /&gt;
 38&lt;br /&gt;
&lt;br /&gt;
Clarinet&lt;br /&gt;
1 1&lt;br /&gt;
2 0&lt;br /&gt;
3 0.75&lt;br /&gt;
4 0&lt;br /&gt;
5 0.5&lt;br /&gt;
6 0&lt;br /&gt;
7 0.14&lt;br /&gt;
8 0&lt;br /&gt;
9 0.5&lt;br /&gt;
10 0&lt;br /&gt;
11 0.12&lt;br /&gt;
12 0&lt;br /&gt;
13 0.17&lt;br /&gt;
&lt;br /&gt;
Saxaphone A&lt;br /&gt;
 -8&lt;br /&gt;
 0&lt;br /&gt;
 -43&lt;br /&gt;
 -45&lt;br /&gt;
 -48&lt;br /&gt;
 -40&lt;br /&gt;
 -58&lt;br /&gt;
 -76&lt;br /&gt;
 -93&lt;br /&gt;
 -95&lt;/div&gt;</summary>
		<author><name>96.42.235.80</name></author>
	</entry>
	<entry>
		<id>http://sessrumnir.net/fernseher/index.php?title=Other_stuff&amp;diff=2140</id>
		<title>Other stuff</title>
		<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=Other_stuff&amp;diff=2140"/>
		<updated>2009-04-07T00:24:36Z</updated>

		<summary type="html">&lt;p&gt;96.42.235.80: New page:  wavdft sample.wav -o sample.fis --freq=freq  wavdft sample.wav -o sample_freq.dft --freq=freq By default, converts sample.wav to sample.fis, and tries to find the fundamental.   dftgen -o...&lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt; wavdft sample.wav -o sample.fis --freq=freq&lt;br /&gt;
 wavdft sample.wav -o sample_freq.dft --freq=freq&lt;br /&gt;
By default, converts sample.wav to sample.fis, and tries to find the fundamental.&lt;br /&gt;
&lt;br /&gt;
 dftgen -o blah.fis&lt;br /&gt;
 dftgen -o blah_freq.dft&lt;br /&gt;
Uses blah parms to generate either a fis or dft&lt;br /&gt;
&lt;br /&gt;
 rsfgen (blah.fis:length)+ -o Rank_length.rsf --keys=61 --aboves=1 --belows=1 --detune=-1&lt;br /&gt;
By default assumes unsplit and no renaming, 61 keys, no aboves or belows, and no detuning.  Assumes 8&amp;#039;.&lt;br /&gt;
&lt;br /&gt;
Rank_length.rsf:&lt;br /&gt;
 #offset &amp;lt;index of stated length pitch&amp;gt;&lt;br /&gt;
 Rank_length.rank: path/to/blah_f1.pipe \&lt;br /&gt;
                   path/to/blah_f2.pipe&lt;br /&gt;
                   ...&lt;br /&gt;
&lt;br /&gt;
 dftwav blah.fis -o blah_freq.raw --rate=44100 --norm=8000 --attack=0.05 --decay=0.05 --duration=1.00&lt;br /&gt;
 dftwav blah_freq.dft -o blah_freq.wav --rate=44100 --norm=8000 --attack=0.05 --decay=0.05 --duration=1.00&lt;br /&gt;
By default, tries to determine what to do based on limited filenames&lt;br /&gt;
&lt;br /&gt;
 pipegen blah.fis -o blah_freq.pipe --rate=44100 --norm=1.0&lt;br /&gt;
 pipegen blah_freq.dft -o blah_freq.pipe --rate=44100 --norm=1.0&lt;br /&gt;
&lt;br /&gt;
 rankgen Blah_len.rsf -o Blah_len.rank --offset=0&lt;/div&gt;</summary>
		<author><name>96.42.235.80</name></author>
	</entry>
	<entry>
		<id>http://sessrumnir.net/fernseher/index.php?title=MIDI_and_the_organ_project&amp;diff=2139</id>
		<title>MIDI and the organ project</title>
		<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=MIDI_and_the_organ_project&amp;diff=2139"/>
		<updated>2009-04-07T00:14:09Z</updated>

		<summary type="html">&lt;p&gt;96.42.235.80: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;*[http://sessrumnir.net/organs/trunk/ SVN trunk for organ code]&lt;br /&gt;
*[http://www.die-orgelseite.de/pfeifenarten_e.htm Interesting site for pipe shapes and sounds]&lt;br /&gt;
&lt;br /&gt;
*[[Pipe creation workflow]]&lt;br /&gt;
*[[Theoretical Pipe Variations]]&lt;br /&gt;
*[[Spectra]]&lt;br /&gt;
*[[Other stuff]]&lt;br /&gt;
&lt;br /&gt;
====MIDI and the organ====&lt;br /&gt;
MIDI standard is out there. Also good is the RTP-MIDI RFC, for putting MIDI data into a stream and whatnot.&lt;br /&gt;
&lt;br /&gt;
The basics, as I think we will be using them:&lt;br /&gt;
&lt;br /&gt;
Packet basics (we&amp;#039;ll only be using 3 byte packet forms):&lt;br /&gt;
&lt;br /&gt;
 1 &amp;lt;3: opcode&amp;gt; &amp;lt;4: channel&amp;gt; 0 &amp;lt;7: arg1&amp;gt; 0 &amp;lt;7: arg2&amp;gt;&lt;br /&gt;
&lt;br /&gt;
Essentially, a status byte, with the high bit on (0x80-0xFF), and two argument bytes, with the high bit off (0x00-0x7F).&lt;br /&gt;
&lt;br /&gt;
opcodes of relevance:&lt;br /&gt;
*0x0: key off.  arg1 is the key number, arg2 is the velocity.  We will always use velocity of 0x40.&lt;br /&gt;
*0x1: key on. arg1 is the key number, arg2 is the velocity.  We will always use the velocity of 0x40.&lt;br /&gt;
*0x3: control change.  arg1 is the control number (0x01 is modulation wheel, 0x0B is the expression pedal), arg2 is the new control value, from 0x00 - 0x7F (Note:  If we need more than 127 steps, add 0x20 to the control number, and thats the control number to use to send the least significant 7-bits of the value.  The value sent with the base control number is considered to be the most significant 7-bits of the value.  This ensures that if just read the base control number, you set the control to approximately the correct percentage of fully off/fully on.)&lt;br /&gt;
&lt;br /&gt;
For channels, we will use:&lt;br /&gt;
*0x0: Great (Solo) Manual&lt;br /&gt;
*0x1: Swell (Accompaniment) Manual&lt;br /&gt;
*0x2: Choir (below Great) Manual, if present&lt;br /&gt;
*0x3: Solo (above Swell) Manual, if present&lt;br /&gt;
*0x4: Echo (above Solo) Manual, if present&lt;br /&gt;
*0x5: Third Pedalboard, if present, or the auxilary stop channel, covering additional stops for all manuals and pedals.&lt;br /&gt;
*0x6: Second Pedalboard, if present, or the main stop channel, covering all stops for all manuals and pedals.&lt;br /&gt;
*0x7: Main Pedalboard&lt;br /&gt;
*0x8: Great stops only&lt;br /&gt;
*0x9: Swell stops only&lt;br /&gt;
*0xA: Choir stops only&lt;br /&gt;
*0xB: Solo stops only&lt;br /&gt;
*0xC: Echo stops only&lt;br /&gt;
*0xD: Third Pedalboard stops only&lt;br /&gt;
*0xE: Second Pedalboard stops only&lt;br /&gt;
*0xF: Main Pedalboard stops only&lt;br /&gt;
&lt;br /&gt;
Our initial organ will only use channels 0x0-0x1, 0x6-0x7.&lt;br /&gt;
&lt;br /&gt;
Each keyboard channel (0x0-0x7) gets its own control set.  For our organ, where the modulation wheel and expression pedal control all divisions equally, each control change gets sent for each active channel... or maybe just for great, and the software will figure out that they control all the stuff.  Note, we may not hook up the modulation wheel when we begin.  It&amp;#039;d be kinda a lot harder to make work right, I think.&lt;br /&gt;
&lt;br /&gt;
We will be building channel combination boards, that take an enable and a sub-channel address, and read back the contents of the addressed buffer.  4 bits of address gets 16 buffers.  At 8 bits per buffer, thats 128 inputs for each channel.  That matches with midi&amp;#039;s numbering scheme.  Alternatively, if you take the LSB of the true channel, and feed it to the 4th address bit of the channel board, and only decode the top 3 bits of the channel to determine channel board enable, you can duplex your channel boards, since we will only be using under 64 inputs per channel.  The AVR firmware will have an MIDI offset value for each channel to add to the number received from the board before sending as part of a MIDI command. For most subchannels, this will be 36.  Will probably just use an offset of 0 for the stop channels.&lt;br /&gt;
&lt;br /&gt;
Using the split channel board design, we only need two channel boards for our organ.  The main board will be designed to use the channel boards in split mode, and will never probably use the split-mode stop channels (0x8-0xF), so it will only have 4 plugs for channel boards, 0x0-0x1, 0x2-0x3, 0x4-0x5, and 0x6-0x7.  The initial organ will only use the first and last of these plugs, so we don&amp;#039;t even need to populate the board positions for the other channel boards.&lt;br /&gt;
&lt;br /&gt;
Also, I think we might want to put all the switch pull-up resistors on the manuals themselves, soldered to the key tabs.  This will eliminate a lot of crap on the boards, and keep the board design uniform, since the different keys will need different pull-ups.  The manuals, with their 5k internal resistance, will need 50k (or so) pull-ups to 5V, and the pedals and stops, with no internal resistance, will need just 10k (or so) pull-ups to 5V.  Each manual will get a separate power and ground plug for the pull-ups and grounds, so the connectors for the keys don&amp;#039;t need a pin for ground or power, I don&amp;#039;t think... Though if there is room, I guess we could send it along there, too.  Can&amp;#039;t hurt anything, provided the wires support enough current for the crazy case of all the stop pulled or keys pressed or something.  Given a max of 64 inputs to a half-channel, and only 61 keys on a full manual, we can use 2x36 pin connectors for the manuals, and 1x36 pin connector for the pedalboards, and 1x36 pin connector for the stop boards.  Thats 6 total 36 pin connectors, male and female, solder cup and through-hole.&lt;br /&gt;
&lt;br /&gt;
Channel board to main board connectors will have an 8-bit data bus, 4-bit address bus, a power, ground, enable, and identify(?) pins (16 total).  Should be able to use IDC connectors and ribbon cable here.&lt;br /&gt;
&lt;br /&gt;
===Simple algorithm for key change detection===&lt;br /&gt;
After reading a byte from the buffers, we xor it with the copy of the byte from last time, then store the new version in the copy location.  We then start looking at the lsb of the xor&amp;#039;ed byte.  If its a 1, we send a key on if the lsb of the read byte is a 1, and a key off if the lsb of the read byte is a 0.  We then shift right and do that again.  We do that 8 times, once for each bit in that byte.  Then we can move on to the next valid address for that channel, write out the address, read back the buffer value, xor, store, analyze, etc.  Note, we can speed this up by checking if the xor byte is identically 0x00, in which case we don&amp;#039;t have to analyze it, it hasn&amp;#039;t changed.  This will be the usual case!  Only occasionally (in sample time), will things change, and usually only on one bit, and thus one buffer, amongst all the channels and buffers.  This should help us keep up to speed.&lt;br /&gt;
&lt;br /&gt;
Once we are done reading all the channel board buffers, we can check the expression pedals and other variable controls for new values, and possibly send control change events.  After all this, we actually send the MIDI bytes as we have determined them to need to be for this time around, and go to sleep until our next sample time.&lt;br /&gt;
&lt;br /&gt;
Not sure what the latency of the serial to USB conversion is in FTDI, but it could be as bad as a single byte in a single USB message....  Anyway, we want to build a buffer of bytes that need to get send over each sample time, with the RTP-MIDI spec used to make it a stream type thing.  This means: packet length, &amp;quot;timestamp&amp;quot;, first MIDI event, relative timestamps (should all be zero), subsequent MIDI events.&lt;br /&gt;
&lt;br /&gt;
===Chips to use===&lt;br /&gt;
*16x? 74HCT540  for the octal tri-state buffers, inverting (0.54, 20 pin dip)&lt;br /&gt;
*1x? 74HCT138  for 1 to 8 decoder (0.40, 16 pin dip)&lt;br /&gt;
*1x? 74HCT154  for 1 to 16 decoder (0.80, 24 pin dip)&lt;br /&gt;
*1x ATMega164P-20P for AVR controller, 20MHz, (4.82, 40 pin dip)&lt;/div&gt;</summary>
		<author><name>96.42.235.80</name></author>
	</entry>
	<entry>
		<id>http://sessrumnir.net/fernseher/index.php?title=Theoretical_Pipe_Variations&amp;diff=2138</id>
		<title>Theoretical Pipe Variations</title>
		<link rel="alternate" type="text/html" href="http://sessrumnir.net/fernseher/index.php?title=Theoretical_Pipe_Variations&amp;diff=2138"/>
		<updated>2009-04-04T04:26:12Z</updated>

		<summary type="html">&lt;p&gt;96.42.235.80: &lt;/p&gt;
&lt;hr /&gt;
&lt;div&gt;A set of characteristics of pipe spectra, useful in categorizing actual pipe sounds as well as synthesizing them.&lt;br /&gt;
&lt;br /&gt;
===Frequency Variations===&lt;br /&gt;
*Typical large organ range is from 32&amp;#039; to 2&amp;#039; stops, which puts us around C0 up through C9, or 9 octaves and a note.  This is 109 notes.&lt;br /&gt;
*For a given note, there are several possible mutation frequencies that pipes could have that would not fall on perfect equal temperament notes:&lt;br /&gt;
**Harmonic 1: Unison (that is, no mutation)  (N+0.00)&lt;br /&gt;
**Harmonic 3: Twelfth (N+19.02)&lt;br /&gt;
**Harmonic 5: Seventeenth (N+27.86)&lt;br /&gt;
**Harmonic 6: Nineteenth (N+31.02)&lt;br /&gt;
**Harmonic 7: Twentieth (N+33.69)&lt;br /&gt;
**Harmonic 9: Twenty-third (N+38.04)&lt;br /&gt;
*For each mutation of each note, we could be slightly detuned below, perfect, or slightly detuned above, yielding 3 tunings.  This will allow things like Voix Celeste, etc.  In reality, the detuned mutations would only be used for certain ranks, against certain standard string-like ranks.  Most Mixtures would never be detuned, etc.  But, the variations could exist.  The detuned pipes will probably just be by a couple of cents from the mutated frequency.&lt;br /&gt;
&lt;br /&gt;
These combinations yield 1962 fundamental frequencies that we have to generate pipes for, possibly a handful more for multiple octave mutations that wouldn&amp;#039;t normally fall in the C0-C9 range (meaning we&amp;#039;d need unmutated notes up to C12, which at 67kHz is well outside human hearing...)&lt;br /&gt;
&lt;br /&gt;
===Spectrum Characteristics===&lt;br /&gt;
*A given pipe can be open (all harmonics present), stopped perfectly (no even harmonics), or stopped imperfectly (even harmonics severely diminished, say at 1/4 of what it would be if open) (U, Sp, Si)&lt;br /&gt;
*A given pipe can be normally blown (all harmonics present), perfectly overblown (fundamental completely missing), or imperfectly overblown (fundamental diminished, say at 1/4 of what it would be if normally blown) (B, Op, Oi)&lt;br /&gt;
*A given pipe can be coherent, or have rotating phase shifts (each harmonics is 90 degrees out of phase with previous and next harmonic in the series, so 0, 90, 180, 270, 0..., like a triangle wave) (C, A)&lt;br /&gt;
*A given pipe can have harmonic decay in one of multiple modes, where the relative strength of the kth harmonics is k^(-d), where d is one of (Xd):&lt;br /&gt;
**00, or 0: uniform all the way to the cutoff frequency... not very realistic...&lt;br /&gt;
**05, or 1/2: subharmonic, slower than a perfect harmonic series&lt;br /&gt;
**10, or 1: harmonic, a perfect harmonic series.  Sawtooth and square waves fall here.&lt;br /&gt;
**15, or 3/2: subsuperharmonic, slightly faster than a perfect harmonic series&lt;br /&gt;
**20, or 2: superharmonic, faster than a perfect harmonic series.  Like a triangle wave.&lt;br /&gt;
&lt;br /&gt;
===Bandwidth Limitations===&lt;br /&gt;
The spectrum for a pipe can be bandwidth limited as well.  All synthesized waveforms for sound should be limited to 22050Hz at a maximum.  Cutoff harmonics worth trying are:&lt;br /&gt;
*Pure (n=0, perfect).  No real transition zone here. Fundamental only, everything else is nonexistant. L0p is just notational convenience.&lt;br /&gt;
*n=3. Normal strength fundamental, then diminishing begins.&lt;br /&gt;
*n=5&lt;br /&gt;
*n=13&lt;br /&gt;
*n=37&lt;br /&gt;
*None (n=0, imperfect).  No cutoff here, all harmonics are full strength, up to the 22050Hz cutoff that everything has.  L0i is just notational conveneience.&lt;br /&gt;
&lt;br /&gt;
A bandwidth limitation can be perfect or imperfect (Lnp, Lni).  A perfect limitation has a three harmonic transition zone, where the strength of the harmonic before the cutoff is 85% what it would have been, unlimited, the strength of the harmonic at the cutoff is 50%, and the strength of the harmonic after the cutoff is 15%.  All harmonics below these are at 100%, and all harmonics above these are at 0%.  An imperfect limitation also has a three harmonic transition zone, where strength well before cutoff is 100%, right before cutoff is 81.25%, at cutoff is 62.5%, right after cutoff is 43.75%, and  everything above that is at 25%.&lt;br /&gt;
&lt;br /&gt;
===Conclusions===&lt;br /&gt;
Given all that, we have:&lt;br /&gt;
*N+M+D determine fundamental frequency, of which there appear to be just under 2000 reasonable ones.&lt;br /&gt;
*Xd + U/Sp/Si + B/Op/Oi + C/A determine pipe family, of which there appear to be about 90.&lt;br /&gt;
*Lnp/Lni determine pipe color, of which there are 10.&lt;br /&gt;
&lt;br /&gt;
90*10 yeilds 900 rank classes.&lt;br /&gt;
If each fundamental frequency is represented in each rank class, we would have about 1.8 million different theoretical pipes.&lt;br /&gt;
&lt;br /&gt;
For convenience sake, these theoretical ranks will be named as follows:&lt;br /&gt;
 XddxxyyzLnq_Mht&lt;br /&gt;
&lt;br /&gt;
*Xdd is one of the decay modes, X00, X05, X10, X15, or X20.&lt;br /&gt;
*xx is U, Sp, or Si to indicate any stoppage&lt;br /&gt;
*yy is B, Op, or Oi to indicate any overblowing&lt;br /&gt;
*z is C or A to indicate phasing&lt;br /&gt;
*Lnq indicates color, where n is the cutoff indicator, or 0, and q is either p or i to indicate perfect or imperfect limitation&lt;br /&gt;
*Mht indicates that the rank is of mutation harmonic h (1, 3, 5, 6, 7, 9 (possibly 2, 4, or 8 for high notes)), and t indicates either u for under, p for perfect, or o for over to refer to any detuning.&lt;br /&gt;
&lt;br /&gt;
Each pipe file or dft will have the actual fundamental frequency in cents included in the name after another underscore.  This will take into account the mutation or detuning.  Its the actual frequency of harmonic gap in the spectrum.&lt;br /&gt;
&lt;br /&gt;
So, an example might be:&lt;br /&gt;
 X10SiOiAL37i_M1p.rank&lt;br /&gt;
&lt;br /&gt;
This indicates a harmonically decaying, imperfectly stopped, imperfectly overblown rank of pipes with alternating phasing, being imperfectly limited above the 37th harmonic, perfectly tuned at unison.&lt;br /&gt;
&lt;br /&gt;
We will likely have 16,200 basic ranks of pipes.  Each pipe of mixtures would count as a different rank here.&lt;br /&gt;
&lt;br /&gt;
==New Theory==&lt;br /&gt;
&lt;br /&gt;
Ok, before we just generated all the pipes but that was crap.  Way too much space and time.  Now, dftgen only creates one pipe at a time.  The new filename format is&lt;br /&gt;
 XDxxxODxxxEDxxxFxxxExxxSxxxPx_Lllll_ffff.dft&lt;br /&gt;
&lt;br /&gt;
Here, XD determines the decay fraction, 000 is no decay, 100 is harmonic decay, 200 is superharmonic, etc.  OD is a linear decay factor for odd harmonics, ED is a linear decay factor for even harmonics.  F is the fundamental strength, E is the even strength factor, S is the sustain strength (after the limitation cutoff harmonic).  P determines the phasing.  L determines the limitation harmonic, and the _ffff is a float that is the fundamental for this pipe.&lt;br /&gt;
&lt;br /&gt;
===Rank Creation===&lt;br /&gt;
&lt;br /&gt;
*Except for the the fundamental, the name of the pipe spectra is used to determine the rank. Another name can be given as a memory aid. &lt;br /&gt;
*We also can specify a delta, in cents, to detune the pipes from equal temperament.&lt;br /&gt;
*We specify a length class of the pipes, in fractional feet.&lt;br /&gt;
*The final thing we can specify how many notes to generate, and also if we want to add an octave below, or an octave above to allow for offset coupling.&lt;br /&gt;
&lt;br /&gt;
All that will generate the appropriate set of pipes and the rank file to go with them.&lt;/div&gt;</summary>
		<author><name>96.42.235.80</name></author>
	</entry>
</feed>