<?xml version="1.0" encoding="utf-8"?>
<rss version="2.0">
	<channel>
		<title><![CDATA[ChipMusic.org - How to make your own Apple II DMS sounds!]]></title>
		<link>https://chipmusic.org/forums/topic/1054/how-to-make-your-own-apple-ii-dms-sounds/</link>
		<description><![CDATA[The most recent posts in How to make your own Apple II DMS sounds!.]]></description>
		<lastBuildDate>Sat, 27 Mar 2010 05:45:53 +0000</lastBuildDate>
		<generator>PunBB</generator>
		<item>
			<title><![CDATA[Re: How to make your own Apple II DMS sounds!]]></title>
			<link>https://chipmusic.org/forums/post/16815/#p16815</link>
			<description><![CDATA[<b><i>lotekindustries says:</i></b><p>PM&#039;d</p>]]></description>
			<pubDate>Sat, 27 Mar 2010 05:45:53 +0000</pubDate>
			<guid>https://chipmusic.org/forums/post/16815/#p16815</guid>
		</item>
		<item>
			<title><![CDATA[Re: How to make your own Apple II DMS sounds!]]></title>
			<link>https://chipmusic.org/forums/post/16755/#p16755</link>
			<description><![CDATA[<b><i>8bitweapon says:</i></b><p>If you already have the DMS, email me and I&#039;ll send you a 2nd floppy disk with the editing software. I just need $5 to cover the cost of the disk plus shipping &amp; Handling. <img src="https://chipmusic.org/forums/img/smilies/smile.png" width="15" height="15" alt="smile" /></p>]]></description>
			<pubDate>Fri, 26 Mar 2010 17:09:51 +0000</pubDate>
			<guid>https://chipmusic.org/forums/post/16755/#p16755</guid>
		</item>
		<item>
			<title><![CDATA[Re: How to make your own Apple II DMS sounds!]]></title>
			<link>https://chipmusic.org/forums/post/16686/#p16686</link>
			<description><![CDATA[<b><i>lotekindustries says:</i></b><p>Rad!<br />I will be putting this to use ^_^<br />Oh and thanks you guys for the Synth!</p>]]></description>
			<pubDate>Fri, 26 Mar 2010 03:30:10 +0000</pubDate>
			<guid>https://chipmusic.org/forums/post/16686/#p16686</guid>
		</item>
		<item>
			<title><![CDATA[How to make your own Apple II DMS sounds!]]></title>
			<link>https://chipmusic.org/forums/post/16600/#p16600</link>
			<description><![CDATA[<b><i>8bitweapon says:</i></b><p>Instructions by Michael Mahon:</p><p>Note: Paypal me $5 for the cost of the disk plus s&amp;h to computeher at gmail.com for your own utility/editing 5.25&quot; disk <img src="https://chipmusic.org/forums/img/smilies/smile.png" width="15" height="15" alt="smile" /></p><p>Notes on Creating Voice Files for DMS<br />&nbsp; &nbsp; &nbsp; &nbsp; &nbsp; &nbsp; =====================================</p><br /><p>DMS Voices<br />==========</p><p>DMS voices consist of one 256-byte page of &quot;envelope&quot; information<br />followed by some number of 256-byte &quot;waveforms&quot; for the voice.</p><p>Each byte in the envelope page is a number between 1 and n pointing<br />to one of the n following pages of waveforms.&nbsp; As a note is sounded,<br />the envelope bytes are fetched consecutively, with each being used<br />to generate 256 samples (about 23 milliseconds).&nbsp; During each 256-<br />sample period, the envelope byte indicates which following waveform<br />page to use for sound generation.</p><p>NOTE THAT NO RANGE CHECKING IS DONE ON THESE VALUES BEFORE THEY ARE<br />USED.&nbsp; PLAYING ANY VOICE WITH AN ENVELOPE VALUE OUTSIDE THE VALID<br />RANGE OF 1..N (WHERE N WAVEFORMS FOLLOW) WILL RESULT IN LOSS OF<br />CONTROL BY DMS, REQUIRING THE MACHINE TO BE RESTARTED.</p><p>Each byte in a waveform page is a pointer to the page in memory<br />containing the DMS pulse generator for that particular sample value,<br />ranging from $08 to $27.</p><p>NOTE THAT NO RANGE CHECKING IS DONE ON THESE VALUES BEFORE THEY ARE<br />USED.&nbsp; ANY SAMPLE VALUE OUTSIDE THIS RANGE WILL RESULT IN LOSS OF<br />CONTROL BY DMS, REQUIRING THE MACHINE TO BE RESTARTED.</p><p>The program to be discussed automatically creates voice files with<br />proper pre-checked values, so that they can be played by DMS.</p><br /><p>Instrument Samples<br />==================</p><p>Since the sample rate for all voices is 11kHz, and each waveform<br />contains a single cycle of the instrument&#039;s fundamental frequency,<br />the sampled frequency should be approximately 43Hz, or the key F<br />in octave 1.</p><p>A good starting point for creating a new voice is a sample of the<br />desired instrument playing an F1, with a sample rate of 11.025kHz,<br />monophonic, with 8-bit unsigned samples.&nbsp; Such a .wav or .snd file<br />can be manipulated to create a DMS voice.</p><p>Not all instruments are candidates for DMS voices.&nbsp; No frequency<br />variation during the sounding of a note is supported.&nbsp; As a result,<br />any instrument whose intonation involves a fundamental frequency<br />&quot;twang&quot; or a vibrato is unsuitable.</p><p>You may find it useful to preview or pre-process an instrument<br />sample file using SOUND.EDITOR.&nbsp; It is limited to viewing and<br />editing sounds of less than two seconds duration, but that is<br />enough for many instruments.&nbsp; The instructions for SOUND.EDITOR<br />are included as an Apple text file (SOUND.ED.DOC) on the<br />accompanying disk archive.</p><br /><p>Converting a Sample to a Voice<br />==============================</p><p>I have written an Applesoft program to help with the creation of<br />new voice files, but it should be understood that it is only a tool<br />written for my personal use--it is in no way polished or complete.<br />Anyone well-versed in Applesoft BASIC will be able to understand both<br />how it can help with voice file creation and how far it is from a<br />finished tool!</p><p>The Applesoft BASIC program GEN.TONAL is included on the accompanying<br />ProDOS disk.</p><p>The GEN.TONAL program takes an instrument sample file (.wav or .snd)<br />and displays it so that the user can isolate single-cycle waveforms<br />that characterize its attack phase and its sustain or decay phase.</p><p>As the user moves along the timeline and selects waveforms, the program<br />constructs the envelope table and adds the waveforms to the voice file.</p><br /><p>Using GEN.TONAL<br />===============</p><p>When RUN, GEN.TONAL will ask for the &quot;debug level&quot;.&nbsp; You should usually<br />answer zero (&quot;0&quot;).</p><p>It will then ask for the name of the sample file.&nbsp; (You can see a CATALOG<br />of the current directory by simply typing a RETURN.)</p><p>GEN.TONAL will then ask &quot;How many subvoices (amplitudes)?&quot;, to which<br />you should answer &quot;1&quot; (this feature is not yet implemented).</p><p>The program will then read in the sample file and display the first<br />280 samples on the screen, with a grid indicating the 32 quantization<br />levels that will actually be used by DMS and the start and end of the<br />256-byte waveform sample window.&nbsp; The text display at the bottom of<br />the screen shows the current values of important program variables.</p><p>(If your sample was saved as a .wav file, the first 64 bytes of the<br />sample will be the .wav prefix, and you should position past it when<br />setting the starting point for waveforms.)</p><p>When the waveform is displayed, the program waits for keyboard input<br />to set modes and perform actions:</p><p>=Left and right arrows move the waveform back and forth in the sample<br /> window by one sample if pressed alone.&nbsp; If the Open-Apple modifier key<br /> is held down while an arrow is pressed, the waveform will be moved by<br /> 10 samples.&nbsp; If the Closed-Apple key is held down while an arrow is<br /> pressed, the waveform will be moved by one waveform period (about<br /> 256 samples).</p><p> The arrow keys should be used to position the waveform with respect<br /> to the fixed left &quot;start&quot; mark for the waveform.&nbsp; Generally, the best<br /> starting point is the beginning of a region of several near-zero samples.</p><p>=The &quot;&lt;&quot; and &quot;&gt;&quot; keys will move the waveform end mark by one sample,<br /> and the Open-Apple and Closed-Apple keys will modify the amount of<br /> movement in the same way as they modify the arrow keys.</p><p> The &quot;&lt;&quot; and &quot;&gt;&quot; keys should be used to move the right waveform end<br /> mark near the beginning of the next region of several near-zero<br /> samples one period after the start mark.</p><p>=The RETURN key accepts the current settings of waveform marks and<br /> causes the program to automatically resample the waveform to 256<br /> samples and appends it to the voice file.&nbsp; It also fills out the<br /> envelope table with the previous waveform until the current time<br /> point is reached, then stores the pointer to the current waveform.</p><p>=The &quot;I&quot; key will invert the entire waveform.&nbsp; When selecting waveforms,<br /> it is important to remember that each sampled cycle should begin and end<br /> near a zero sample value.&nbsp; Some samples will work better if their<br /> waveforms are inverted, and this option performs that inversion.</p><p>=The &quot;F&quot; key will cause the number of samples used for each cycle of<br /> the waveform to be &quot;frozen&quot; for all subsequent cycles.&nbsp; Usually, after<br /> the first cycle or two, instruments will have settled to a constant<br /> period, and this speeds up the remainder of the processing.</p><p>=The &quot;S&quot; key tells the program that the instrument has reached its<br /> final or sustaining amplitude, and causes the voice to be finished<br /> by repeating the last waveform for the rest of its duration.&nbsp; This<br /> amplitude can be a constant audible amplitude or it can be a zero<br /> amplitude, or silence, depending on the instrument.</p><p>=The &quot;N&quot; key forces the amplitude of the waveform to be &quot;normalized&quot;<br /> so that its loudest waveform is the maximum possible amplitude.&nbsp; This<br /> is often desirable, though you may prefer that some instrument voices<br /> be intrinsically softer than others.&nbsp; In the latter case, the sampled<br /> instrument should be set to the desired volume and normalization<br /> should not be used.</p><p>=The &quot;X&quot; key disables &quot;ramping&quot;, or the automatic subtraction of the<br /> lower envelope of the waveform from the waveform.</p><p> Ramping subtracts the (approximate) lower envelope of a waveform from<br /> all samples, so that the output waveform&#039;s negative peaks are essentially<br /> tangent to the zero axis.</p><p> The reason for this transformation, which clearly introduces low-frequency<br /> (and usually inaudible) artifacts, is to cause all waveforms to begin and<br /> end with a sample value very near zero.&nbsp; This has the aesthetic effect of<br /> blending the start of a note with the continuous stream of zero samples<br /> that is played by the synthesizer while it is idle, so no &quot;pops&quot; are<br /> audible at the beginning of notes.&nbsp; It also satisfies the technical<br /> requirement that sample waveforms will frequently approach zero, since DMS<br /> will only end a note when it has a (5-bit) sample value between 0 and 3,<br /> again so that there is no audible &quot;pop&quot; at the end of a note.</p><p> In general, ramping should not be disabled, so the &quot;X&quot; key should not<br /> be pressed.</p><p>=The &quot;A&quot; key puts the progam into automatic mode, in which the voice<br /> is completed without further interaction.&nbsp; This key may be pressed<br /> after it is clear that the period of the waveforms is constant and<br /> no further &quot;tweaking&quot; is needed.&nbsp; When the &quot;A&quot; key is pressed, you<br /> will be asked whether the voice is sustained at an audible level or<br /> decays to silence.&nbsp; If you respond that it is sustained, you will<br /> be asked how many more cycles to include before sustaining at a<br /> constant level.&nbsp; Each waveform cycle adds 256 bytes to the voice length,<br /> so there is a compromise to be made between the number of decay levels<br /> and the length of the voice.&nbsp; (You can skip past waveforms when making<br /> a voice to save space, as long as the skip will not cause the voice&#039;s<br /> envelope to sound harsh.)</p><p>The decoding for keypresses begins at line 800 in GEN.TONAL, if you<br />would like to examine the program and perhaps modify it for your own<br />uses.</p><p>After all voice waveforms have been selected and the envelope table<br />completed, the program will ask for the General MIDI voice number to<br />save the voice under.&nbsp; The program will construct a voice filename<br />of &quot;V.&quot; followed by the General MIDI voice number.&nbsp; This is the<br />standard naming convention used by DMS and the VoicePak Editor.</p><br /><p>Hints<br />=====</p><p>To conserve space, only significantly different waveforms should be<br />selected for inclusion in the voice file.&nbsp; During the attack phase,<br />3-6 waveforms may be needed.&nbsp; If the instrument has a sustained sound,<br />only one &quot;final&quot; waveform is needed, and the program will automatically<br />extend it&#039;s use throughout the remainder of the envelope table.</p><p>When the program is put into &quot;automatic&quot; mode (&quot;A&quot;), it will select<br />waveforms with significantly differing amplitudes until the final<br />amplitude is reached--either a constant amplitude (sustained) or<br />silence (non-sustained).</p><p>Note that GEN.TONAL does not support instrument sounds with oscillating<br />amplitude or timbre, though it would certainly be possible to manipulate<br />the envelope table (with another program) to re-use waveforms already in<br />the voice to produce such voices.&nbsp; (DMS cannot support vibrato, or low-<br />frequency variation of the *frequency* of a note.)</p><br /><p>Conclusion<br />==========</p><p>Constructing voices for DMS is not an easy process.&nbsp; I have personally<br />made about thirty voices, and most of them did not work as I had hoped.<br />Perseverance and experience are the best guides to good-sounding voices.<br />I wish you all the best, and encourage you to share your best efforts!</p><p>-Michael Mahon</p>]]></description>
			<pubDate>Thu, 25 Mar 2010 16:38:45 +0000</pubDate>
			<guid>https://chipmusic.org/forums/post/16600/#p16600</guid>
		</item>
	</channel>
</rss>
