<?xml version="1.0" encoding="UTF-8" standalone="no"?>
<!DOCTYPE svg PUBLIC "-//W3C//DTD SVG 1.0//EN"
 "http://www.w3.org/TR/SVG/DTD/svg10.dtd" >
<svg width='100%' height='100%'
   xmlns='http://www.w3.org/2000/svg'
   xmlns:xlink='http://www.w3.org/1999/xlink'
   onload='Init(evt)'>
   <title>Phonetics Guide</title>

   <desc>
      An animated multimedia guide to the formation of
      sounds in natural human languages, version 1.5.
      Based on data from Clark and Yallop (2nd ed.).

      This application was created by Douglas Alan Schepers
      (doug@schepers.cc) for use in SVG-based linguistics
      applications. For non-commerical purposes, you may
      use or distribute this application free of charge,
      provided you include this notice; for commercial
      usage, please obtain a license.

      All code copyright (c) D.A. Schepers, 2002-3.
   </desc>

<script language='JavaScript'><![CDATA[

   var SVGDocument = null;
   var SVGRoot = null;
   var Tongue = null;
   var Palette = null;
   var Jaw = null;
   var VocalFolds = null;
   var Cartilage = null;
   //var Sound = null;

   function Init(evt)
   {
      SVGDocument = evt.target.ownerDocument;
      SVGRoot = SVGDocument.documentElement;

      Tongue = SVGDocument.getElementById('tongue');
      Palette = SVGDocument.getElementById('palette');
      Jaw = SVGDocument.getElementById('jaw');
      VocalFolds = SVGDocument.getElementById('vocalFolds');
      Cartilage = SVGDocument.getElementById('CuneiformCorniculateCartilage');

      //Sound = SVGDocument.getElementById('sound');
      //PlaySound();
   };

/*
next, I'm gonna animate the vocal chords and (top-down) and lips (front on) as well, and show air flow and air pressure gradients, all synced with the sound. if I can, anyway...

   function PlaySound()
   {
       Sound.beginElement();
       setTimeout('PlaySound()', 5000);
   };
*/


   function ShowPosition(evt, isShow)
   {
      try
      {
         var button = evt.target;
         var buttonId = button.getAttribute('id');
         var place = buttonId.split('-')[0];

         var labelText = place;
         var labelColor = 'gold';
         if (!isShow)
         {
            labelColor = 'white';
            place = 'rest';
         }

         var label = SVGDocument.getElementById(labelText + '-Label');
         label.setAttributeNS(null, 'fill', labelColor);

         if ('voiced' == place || 'voiceless' == place)
         {
            var vocalFoldsPosition = place;
            if (!vocalFoldsArray[place])
            {
               vocalFoldsPosition = 'voiceless';
               cartilagePosition = 'voiceless';
            }
            var vocalFoldsDesc = vocalFoldsArray[vocalFoldsPosition];
            newVocalFolds = vocalFoldsDesc;

            var cartilagePosition = place;
            if (!cartilageArray[place])
            {
               cartilagePosition = 'voiceless';
            }
            var cartilageDesc = cartilageArray[cartilagePosition];
            newCartilage = cartilageDesc;

            AnimateVocalFolds();
            AnimateCartilage();
         }
         else
         {

            var jawPosition = place;
            if (!jawArray[place])
            {
               jawPosition = 'rest';
            }
            var jawDesc = jawArray[jawPosition];

            var palettePosition = place;
            if (!paletteArray[place])
            {
               palettePosition = 'pharyngeal';
            }
            var paletteDesc = paletteArray[palettePosition];

            var tonguePosition = place;
            if (!tongueArray[place])
            {
               tonguePosition = 'rest';
            }
            var tongueDesc = tongueArray[tonguePosition];

            newTongue = tongueDesc;
            AnimateTongue();

            newJaw = jawDesc;
            AnimateJaw();
            newPalette = paletteDesc;
            AnimatePalette();
         }

      }
      catch(er)
      {
         alert('Error in function ShowPosition:\n' + er.message)
      }
   };


   function AnimateMouth(mouthPart, currentPos, newPos)
   {
      try
      {
         var currentPos = mouthPart.getAttributeNS(null, 'd');
         newPos = newPos.replace(/,/g, ' ');
         currentPos = currentPos.replace(/,/g, ' ');

         if (newPos != currentPos)
         {
            var changed = false;


            var currentArray = currentPos.split(/\W+/);
            var newArray = newPos.split(/\W+/);
            for (var n = 0; currentArray.length > n; n++)
            {
               if (currentArray[n])
               {
                  header = currentArray[n].match(/\D/);
                  eachCurrentNum = Number(currentArray[n].match(/\d+/));
                  eachNewNum = Number(newArray[n].match(/\d+/));

                  if (eachNewNum > eachCurrentNum)
                  {
                     eachCurrentNum++;
                     changed = true;
                     //alert(eachNewNum +' : ' + eachCurrentNum)
                  }
                  else if (eachNewNum < eachCurrentNum)
                  {
                     eachCurrentNum--;
                     changed = true;
                  }
                  currentArray[n] = header + eachCurrentNum;
               }
            }

            var currentPos = currentArray.join(' ');
            mouthPart.setAttributeNS(null, 'd', currentPos);

            if (changed)
            {
               //alert(0)
               //window.status = newPos +' :: ' + currentPos;
               window.setTimeout(AnimateMouth(mouthPart, currentPos, newPos), 1000000);
            }
         }
      }
      catch(er)
      {
         alert('Error in function AnimateMouth:\n' + er.message)
      }
   };


   var newTongue = null;
   function AnimateTongue()
   {
      try
      {
         var currentTongue = Tongue.getAttributeNS(null, 'd');
         newTongue = newTongue.replace(/,/g, ' ');
         currentTongue = currentTongue.replace(/,/g, ' ');

         if (newTongue != currentTongue)
         {
            var changed = false;

            var descArray = currentTongue.split(/\W+/);
            var newArray = newTongue.split(/\W+/);
            for (var n = 0; descArray.length > n; n++)
            {
               if (descArray[n])
               {
                  header = descArray[n].match(/\D/);
                  eachDescNum = Number(descArray[n].match(/\d+/));
                  eachNewNum = Number(newArray[n].match(/\d+/));

                  if (eachNewNum > eachDescNum)
                  {
                     eachDescNum++;
                     changed = true;
                  }
                  else if (eachNewNum < eachDescNum)
                  {
                     eachDescNum--;
                     changed = true;
                  }
                  descArray[n] = header + eachDescNum;
               }
            }

            var tempDesc = descArray.join(' ');
            Tongue.setAttributeNS(null, 'd', tempDesc);

            if (changed)
            {
               window.setTimeout('AnimateTongue()', 1);
            }
         }
      }
      catch(er)
      {
         alert('Error in function AnimateTongue:\n' + er.message)
      }
   };



   var newJaw = null;
   function AnimateJaw()
   {
      try
      {
         var currentJaw = Jaw.getAttributeNS(null, 'd');
         newJaw = newJaw.replace(/,/g, ' ');
         currentJaw = currentJaw.replace(/,/g, ' ');

         if (newJaw != currentJaw)
         {
            var changed = false;

            var descArray = currentJaw.split(/\W+/);
            var newArray = newJaw.split(/\W+/);
            for (var n = 0; descArray.length > n; n++)
            {
               if (descArray[n])
               {
                  header = descArray[n].match(/\D/);
                  eachDescNum = Number(descArray[n].match(/\d+/));
                  eachNewNum = Number(newArray[n].match(/\d+/));

                  if (eachNewNum > eachDescNum)
                  {
                     eachDescNum++;
                     changed = true;
                  }
                  else if (eachNewNum < eachDescNum)
                  {
                     eachDescNum--;
                     changed = true;
                  }
                  descArray[n] = header + eachDescNum;
               }
            }

            var tempDesc = descArray.join(' ');
            Jaw.setAttributeNS(null, 'd', tempDesc);

            if (changed)
            {
               window.setTimeout('AnimateJaw()', 1);
            }
         }
      }
      catch(er)
      {
         alert('Error in function AnimateJaw:\n' + er.message)
      }
   };


   var newPalette = null;
   function AnimatePalette()
   {
      try
      {
         var currentPalette = Palette.getAttributeNS(null, 'd');
         newPalette = newPalette.replace(/,/g, ' ');
         currentPalette = currentPalette.replace(/,/g, ' ');

         if (newPalette != currentPalette)
         {
            var changed = false;

            var descArray = currentPalette.split(/\W+/);
            var newArray = newPalette.split(/\W+/);
            for (var n = 0; descArray.length > n; n++)
            {
               if (descArray[n])
               {
                  header = descArray[n].match(/\D/);
                  eachDescNum = Number(descArray[n].match(/\d+/));
                  eachNewNum = Number(newArray[n].match(/\d+/));

                  if (eachNewNum > eachDescNum)
                  {
                     eachDescNum++;
                     changed = true;
                  }
                  else if (eachNewNum < eachDescNum)
                  {
                     eachDescNum--;
                     changed = true;
                  }
                  descArray[n] = header + eachDescNum;
               }
            }

            var tempDesc = descArray.join(' ');
            Palette.setAttributeNS(null, 'd', tempDesc);

            if (changed)
            {
               window.setTimeout('AnimatePalette()', 0);
            }
         }
      }
      catch(er)
      {
         alert('Error in function AnimatePalette:\n' + er.message)
      }
   };


   var newVocalFolds = null;
   function AnimateVocalFolds()
   {
      try
      {
         var currentVocalFolds = VocalFolds.getAttributeNS(null, 'd');
         newVocalFolds = newVocalFolds.replace(/,/g, ' ');
         currentVocalFolds = currentVocalFolds.replace(/,/g, ' ');

         if (newVocalFolds != currentVocalFolds)
         {
            var changed = false;

            var descArray = currentVocalFolds.split(/\W+/);
            var newArray = newVocalFolds.split(/\W+/);
            for (var n = 0; descArray.length > n; n++)
            {
               if (descArray[n])
               {
                  header = descArray[n].match(/\D/);
                  eachDescNum = Number(descArray[n].match(/\d+/));
                  eachNewNum = Number(newArray[n].match(/\d+/));

                  if (eachNewNum > eachDescNum)
                  {
                     eachDescNum++;
                     changed = true;
                  }
                  else if (eachNewNum < eachDescNum)
                  {
                     eachDescNum--;
                     changed = true;
                  }
                  descArray[n] = header + eachDescNum;
               }
            }

            var tempDesc = descArray.join(' ');
            VocalFolds.setAttributeNS(null, 'd', tempDesc);

            if (changed)
            {
               window.setTimeout('AnimateVocalFolds()', 0);
            }
         }
      }
      catch(er)
      {
         alert('Error in function AnimateVocalFolds:\n' + er.message)
      }
   };


   var newCartilage = null;
   function AnimateCartilage()
   {
      try
      {
         var currentCartilage = Cartilage.getAttributeNS(null, 'd');
         newCartilage = newCartilage.replace(/,/g, ' ');
         currentCartilage = currentCartilage.replace(/,/g, ' ');

         if (newCartilage != currentCartilage)
         {
            var changed = false;

            var descArray = currentCartilage.split(/\W+/);
            var newArray = newCartilage.split(/\W+/);
            for (var n = 0; descArray.length > n; n++)
            {
               if (descArray[n])
               {
                  //alert(descArray[n])
                  header = descArray[n].match(/\D/);
                  eachDescNum = Number(descArray[n].match(/\d+/));
                  eachNewNum = Number(newArray[n].match(/\d+/));

                  if ('Z' == header)
                  {
                     eachDescNum = '';
                  }
                  else if (eachNewNum > eachDescNum)
                  {
                     eachDescNum++;
                     changed = true;
                  }
                  else if (eachNewNum < eachDescNum)
                  {
                     eachDescNum--;
                     changed = true;
                  }
                  descArray[n] = header + eachDescNum;
               }
            }

            var tempDesc = descArray.join(' ');
            Cartilage.setAttributeNS(null, 'd', tempDesc);

            if (changed)
            {
               window.setTimeout('AnimateCartilage()', 0);
            }
         }
      }
      catch(er)
      {
         alert('Error in function AnimateCartilage:\n' + er.message)
      }
   };



   var tongueArray = new Array();
   tongueArray['rest'] = 'M159,283 C179,254 128,235 91,243 S59,264 86,280 ';
   tongueArray['dental'] = 'M159,283 C173,248 129,246 85,241 S58,259 86,280';
   tongueArray['interdental'] = 'M159,283 C174,244 130,236 79,250 S67,259 86,280';
   tongueArray['alveolar'] = 'M159,283 C174,244 131,254 87,242 S68,254 86,280';
   tongueArray['alveopalatal'] = 'M159,283 C145,247 91,206 74,246 S103,224 86,280';
   tongueArray['palatal'] = 'M159,283 C177,213 113,214 87,248 S107,247 86,280';
   tongueArray['velar'] = 'M159,283 C158,162 126,236 88,249 S93,261 86,280';
   tongueArray['uvular'] = 'M159,283 C183,177 147,230 94,249 S93,261 86,280';
   tongueArray['pharyngeal'] = 'M159,283 C204,257 196,219 120,246 S109,261 86,280';

   var jawArray = new Array();
   jawArray['rest'] = 'M175,418 C152,370 155,346 177,305 S172,299 163,298 C183,273 161,277 159,282 Q117,264 86,280 Q69,283 64,270 T61,283 C49,279 54,259 38,267 S44,285 39,301 C27,352 55,341 101,340 S131,364 136,375 Q143,399 140,420';
   jawArray['bilabial'] = 'M175,418 C152,370 155,346 177,305 S172,299 163,298 C183,273 161,277 159,282 Q117,264 86,280 Q69,278 64,262 T60,274 C47,273 53,251 37,256 S41,268 37,291 C26,342 55,332 101,340 S131,364 136,375 Q143,399 140,420';
   jawArray['labiodental'] = 'M175,418 C152,370 155,346 177,305 S172,299 163,298 C183,273 161,277 159,282 Q117,264 86,280 Q69,278 64,262 T60,274 C47,273 70,262 49,254 S47,267 37,291 C26,342 55,332 101,340 S131,364 136,375 Q143,399 140,420';
   jawArray['pharyngeal'] = 'M175,418 C152,370 155,346 177,305 S172,299 163,298 C183,273 161,277 159,282 Q117,264 88,278 Q70,298 63,280 T60,290 C48,288 54,268 38,276 S44,294 39,310 C27,361 55,350 99,349 S131,364 136,375 Q143,399 140,420';

   var paletteArray = new Array();
   paletteArray['rest'] = 'M30,221 C119,224 140,201 166,207 C177,223 173,245 163,228 S144,220 90,228 Q76,238 63,240 C55,243 58,261 55,256 S51,247 48,236 C44,243 48,258 34,254 S37,238 29,221';
   paletteArray['glottal'] = 'M30,221 C119,224 140,201 166,207 C177,223 173,245 163,228 S144,220 90,228 Q76,238 63,240 C55,243 58,261 55,256 S51,247 48,236 C44,243 48,258 34,254 S37,238 29,221';
   paletteArray['bilabial'] = 'M30,221 C118,220 140,199 175,211 C182,232 182,254 170,230 S126,225 90,228 Q76,238 63,240 C55,243 58,261 55,256 S51,247 48,236 C43,241 48,258 34,255 S36,241 29,221';
   paletteArray['labiodental'] = 'M30,221 C118,220 138,193 170,203 C179,221 178,245 165,222 S126,225 90,228 Q76,238 63,240 C55,243 58,261 55,256 S51,247 48,236 C43,229 48,258 33,250 S37,238 29,221';
   paletteArray['pharyngeal'] = 'M30,221 C118,220 138,193 170,203 C179,221 178,245 165,222 S126,225 90,228 Q76,238 63,240 C55,243 58,261 55,256 S51,247 48,236 C44,243 48,258 34,254 S37,238 29,221';

   var vocalFoldsArray = new Array();
   vocalFoldsArray['voiceless'] = 'M270,309 Q281,334 284,364 L295,360 Q291,324 275,301 H265 Q249,324 245,360 L256,364 Q259,334 270,309';
   vocalFoldsArray['voiced'] = 'M270,309 Q271,334 271,371 L283,364 Q285,324 275,301 H265 Q254,324 257,364 L269,371 Q269,334 270,309';

   var cartilageArray = new Array();
   cartilageArray['voiceless'] = 'M225,322 L230,339 Q243,347 250,359 262,364 270,371 279,364 290,359 298,347 310,339 L314,322 320,326 315,339 Q310,354 298,364 288,378 270,374 252,378 242,364 230,354 225,339 L219,326 Z';
   cartilageArray['voiced'] = 'M225,322 L230,339 Q246,351 250,359 263,359 270,371 278,359 290,359 295,351 310,339 L314,322 320,326 315,339 Q309,360 298,364 288,379 270,374  252,379 242,364 231,360 225,339 L219,326 Z';

]]></script>


   <g stroke='brown' stroke-width='2' fill='pink'>

      <path id='head'
         d='M226,411 C190,338 201,286 182,231 C164,174 173,213 132,178 C125,172 126,153 94,160 S68,143 17,206 Q14,212 16,219 C-10,212 17,188 40,166 S36,132 46,105 C63,23 205,-9 264,13 S419,95 340,212 Q313,254 346,367 '
         />

      <path id='palette'
         d='M30,221 C119,224 140,201 166,207 C177,223 173,245 163,228 S144,220 90,228 Q76,238 63,240 C55,243 58,261 55,256 S51,247 48,236 C44,243 48,258 34,254 S37,238 29,221 '
         />

      <path id='jaw'
         d='M175,418 C152,370 155,346 177,305 S172,299 163,298 C183,273 161,277 159,282 Q117,264 86,280 Q69,283 64,270 T61,283 C49,279 54,259 38,267 S44,285 39,301 C27,352 55,341 101,340 S131,364 136,375 Q143,399 140,420 '
         />

      <path id='esophagus'
         d='M207,416 C205,404 198,368 193,353 C184,348 159,355 160,350 C172,344 187,346 188,345 C190,343 187,331 194,334 C197,334 208,394 212,415'
         />

<!--
      <path id='esophagus'
         d='M207,416 C205,404 198,368 193,353 C184,348 182,353 179,350 C172,344 187,346 188,345 C190,343 187,331 194,334 C197,334 208,394 212,415'
         />
      <path id='vocalChords'
         d='M184,350 L160,356 M160,352 L179,345'
         fill-rule='evenodd'
         />
-->


      <path id='tongue'
         d='M159,283 C179,254 128,235 91,243 S59,264 86,280 '
         />
   </g>


<!--
      <text id='TongueText' x='-126' y='-91'>
            <textPath id='tonguePath' xlink:href='#tongue' startOffset='50%'>text on path
            </textPath>
      </text>
            <animate id='firsttpath' attributeName='startOffset' values='0%;77.5%' keyTimes='0;1' dur='20s' repeatCount='indefinite' fill='freeze'/>

-->

   <circle cx='175' cy='350' r='22' stroke='gray' fill='white' opacity='0.5'/>
   <circle cx='270' cy='330' r='50' stroke='gray' fill='white' opacity='0.7'/>
   <line x1='166' y1='330' x2='248' y2='285' stroke='gray' fill='none' opacity='0.5' stroke-linecap='round'/>
   <line x1='175' y1='372' x2='267' y2='380' stroke='gray' fill='none' opacity='0.5' stroke-linecap='round'/>

   <defs>
      <radialGradient id='fade'>
         <stop offset='90%' stop-color='white' stop-opacity='1.0'/>
         <stop offset='95%' stop-color='white' stop-opacity='0.5'/>
         <stop offset='100%' stop-color='white' stop-opacity='0.0'/>
      </radialGradient>
      <mask id='fademask'>
         <circle cx='270' cy='330' r='50' fill='url(#fade)'/>
      </mask>
   </defs>

   <g id='phraynx' mask='url(#fademask)'>
      <ellipse id='vocalBack' cx='270' cy='330' rx='44' ry='40' fill='pink'/>
      <path id='gap'
         d='M270,309 Q285,334 284,361
            Q279,364 270,371 262,364 256,361
            Q256,334 270,309'
            fill='#87cefa' fill-opacity='0.5'
         />
      <g fill='pink' fill-rule='evenodd' stroke='brown' stroke-width='2' stroke-linecap='round' stroke-linejoin='round'>
         <path id='vocalFolds'
            d='M270,309 Q281,334 284,364
               L295,360 Q291,324 275,301
               H265 Q249,324 245,360
               L256,364 Q259,334 270,309'
               fill='white' stroke='#ff6347'
            />

         <path id='CuneiformCorniculateCartilage'
            d='M225,322 L230,339
               Q243,347 250,359 262,364 270,371 279,364 290,359 298,347 310,339
               L314,322 320,326 315,339
               Q310,354 298,364 288,378 270,374  252,378 242,364 230,354 225,339
               L219,326 Z'
               fill='#eee8aa' stroke='#daa520'
            />
         <path id='oddThing'
            d='M250,299 Q270,319 290,299'
            />
         <path id="epiglottis"
            d='M215,327 C238,324 243,302 270,300 297,302 302,324 325,327 V324
               C301,321 310,278 270,289 230,278 241,321 215,324 Z'
            />
      </g>
   </g>


   <g stroke='blue' fill='cornflowerblue'
      onmouseover='ShowPosition(evt, true)'
      onmouseout='ShowPosition(evt, false)'>
      <rect id='bilabial-Button' x='400' y='10' width='100' height='20' rx='5' ry='5'/>
      <rect id='labiodental-Button' x='400' y='40' width='100' height='20' rx='5' ry='5'/>
      <rect id='dental-Button' x='400' y='70' width='100' height='20' rx='5' ry='5'/>
      <rect id='interdental-Button' x='400' y='100' width='100' height='20' rx='5' ry='5'/>
      <rect id='alveolar-Button' x='400' y='130' width='100' height='20' rx='5' ry='5'/>
      <rect id='alveopalatal-Button' x='400' y='160' width='100' height='20' rx='5' ry='5'/>
      <rect id='palatal-Button' x='400' y='190' width='100' height='20' rx='5' ry='5'/>
      <rect id='velar-Button' x='400' y='220' width='100' height='20' rx='5' ry='5'/>
      <rect id='uvular-Button' x='400' y='250' width='100' height='20' rx='5' ry='5'/>
      <rect id='pharyngeal-Button' x='400' y='280' width='100' height='20' rx='5' ry='5'/>
      <rect id='glottal-Button' x='400' y='310' width='100' height='20' rx='5' ry='5'/>

      <rect id='voiced-Button' x='400' y='370' width='100' height='20' rx='5' ry='5'/>
      <rect id='voiceless-Button' x='400' y='400' width='100' height='20' rx='5' ry='5'/>
   </g>

   <g fill='white' pointer-events='none' text-anchor='middle' font-size='14px'>
      <text id='bilabial-Label' x='450' y='25'>Bilabial</text>
      <text id='labiodental-Label' x='450' y='55'>Labiodental</text>
      <text id='dental-Label' x='450' y='85'>Dental</text>
      <text id='interdental-Label' x='450' y='115'>Interdental</text>
      <text id='alveolar-Label' x='450' y='145'>Alveolar</text>
      <text id='alveopalatal-Label' x='450' y='175'>Alveopalatal</text>
      <text id='palatal-Label' x='450' y='205'>Palatal</text>
      <text id='velar-Label' x='450' y='235'>Velar</text>
      <text id='uvular-Label' x='450' y='265'>Uvular</text>
      <text id='pharyngeal-Label' x='450' y='295'>Pharyngeal</text>
      <text id='glottal-Label' x='450' y='325'>Glottal</text>

      <text id='voiced-Label' x='450' y='385'>Voiced</text>
      <text id='voiceless-Label' x='450' y='415'>Voiceless</text>
   </g>



<!--
   <asv='audio id='sound' xlink='href='bilabialClick.mp3' begin='indefinite' />
-->


</svg>
