Advertisement
Guest User

csound_websockets_graphing

a guest
Aug 19th, 2015
223
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
HTML 4.72 KB | None | 0 0
  1. <!doctype html>
  2. <html>
  3.     <head>
  4.         <title>WebSocket</title>
  5.     </head>
  6.     <body onload="recalc()">
  7.         <div>
  8.             <h4>Slider Output</h4>
  9.             <div id="sliderValue">slider value: 50</div>
  10.             <input type="range" id="slider"></input>
  11.  
  12.         </div>
  13.          <div>
  14.              <h4>Csound Input</h4>
  15.             <div id="inputValue">input value: ?</div>
  16.         </div>
  17.    
  18.     <form name="funf">
  19.     <fieldset>
  20.     <legend>Function:</legend>
  21.     <input type = radio name = funr value = "x2" onclick="recalc()">y = x^2 <br />
  22.     <input type = radio name = funr value = "x3" onclick="recalc()">y = x^3 <br />
  23.     <input type = radio name = funr value = "sin" onclick="recalc()">y = sin(&pi;x)<br />
  24.     <input type = radio name = funr value = "cos" onclick="recalc()">y = cos(&pi;x)<br />
  25.     <input type = radio name = funr value = "ring" checked onclick="recalc()">y = 0.02exp(-4x)sin(10&pi;x)<br />
  26.     </fieldset>
  27.    
  28.     <fieldset>
  29.     <legend>Options:</legend>
  30.     <label>Points:</label>
  31.     <input type = radio name = num value = "10" onclick="recalc()">10
  32.     <input type = radio name = num value = "25" onclick="recalc()">25
  33.     <input type = radio name = num value = "100" onclick="recalc()">100
  34.     <input type = radio name = num value = "200" checked onclick="recalc()">200
  35.     <input type = checkbox name = markers onclick="recalc()">Markers
  36.     </fieldset>
  37.  
  38. </form>
  39.  
  40. <p> Plot, drawn in real time with HTML5! </p>
  41. <canvas id="plot" width="501" height="501">
  42. <p>Your browser doesn't support canvas.</p>
  43. </canvas>
  44.  
  45.  
  46.  <script type="text/javascript">
  47.  var sliderValue = document.getElementById("sliderValue");
  48. var inputValue = document.getElementById("inputValue");
  49. var amplitude = [];
  50. var slider = document.getElementById("slider");
  51. slider.oninput = function() {
  52.     sliderValue.innerHTML = "slider value:" + slider.value;
  53.     websocketOut.send(new Float64Array([slider.value]));
  54. }
  55. var websocketIn = new WebSocket("ws://127.0.0.1:8888", "klfo");
  56. var websocketOut = new WebSocket("ws://127.0.0.1:8888", "kinput");
  57. websocketIn.binaryType = 'arraybuffer';
  58. websocketIn.onmessage = function(message){
  59.     messageData = new Float64Array(message.data);
  60.  //   inputValue.innerHTML = messageData[0];
  61.     amplitude = messageData[0];
  62.     recalc();
  63. }
  64.  
  65.  
  66.  
  67.  
  68. /*this is the main function, updates points and options*/
  69. function recalc()
  70. {
  71.     var points = [];
  72.    
  73.     /*function to plot*/
  74.     var fun = "ring";   /*default*/
  75.     for (i = 0; i <document.funf.funr.length; i++)
  76.     {
  77.         if (document.funf.funr[i].checked)
  78.             fun = document.funf.funr[i].value
  79.     }
  80.    
  81.     /*number of points*/
  82.     var num = 100/*default*/
  83.     for (i = 0; i <document.funf.num.length; i++)
  84.     {
  85.         if (document.funf.num[i].checked)
  86.             num = document.funf.num[i].value
  87.     }
  88.    
  89.     dx = 2.0/(num-1);
  90.    
  91.     /*evaluate function*/
  92.     for (x=-1,i=0;i<=num;i++)
  93.     {
  94.         if (fun=="x2")
  95.             y=x*x;
  96.         else if (fun=="x3")
  97.             y=x*x*x;
  98.         else if (fun=="ring")
  99.             y=amplitude*0.02*Math.exp(-4*x)*Math.sin(10*Math.PI*x);
  100.         else if (fun=="sin")
  101.             y = Math.sin(Math.PI*x);
  102.         else if (fun=="cos")
  103.             y = Math.cos(Math.PI*x);
  104.         points.push([x,y]);
  105.         x+=dx;
  106.     }
  107.  
  108.     /*draw markers?*/
  109.     markers=false;  /*default*/
  110.     if (document.funf.markers.checked)
  111.         markers=true;
  112.        
  113.     draw(points, markers);
  114. }
  115.  
  116. /*this function does the actual drawing*/
  117. function draw(points, markers)
  118. {
  119.     var canvas = document.getElementById('plot');
  120.     var i, x, y;
  121.    
  122.     if(canvas.getContext)
  123.     {
  124.         var scale=240;
  125.        
  126.         var ctx = canvas.getContext('2d');
  127.         ctx.clearRect(0, 0, 501, 501);
  128.  
  129.         ctx.strokeStyle = "#000000";
  130.         ctx.strokeRect(0, 0, 501, 501);
  131.        
  132.         // draw axis
  133.         ctx.lineWidth = 1;
  134.         ctx.strokeStyle = "#000000";
  135.         ctx.beginPath();
  136.         ctx.moveTo(250, 15);
  137.         ctx.lineTo(250, 485);
  138.         ctx.moveTo(15, 250);
  139.         ctx.lineTo(485, 250);
  140.         ctx.stroke();
  141.        
  142.         // draw points         
  143.         ctx.save();
  144.         ctx.translate(250,250);
  145.         ctx.scale(1.0, -1.0);
  146.         ctx.strokeStyle = "#FF0000";
  147.         ctx.lineWidth = 3;
  148.         ctx.beginPath();
  149.        
  150.         if(points.length > 0)
  151.         {
  152.             x = points[0][0]*scale;
  153.             y = points[0][1]*scale;
  154.             ctx.moveTo(x, y);
  155.             for(i = 0; i < points.length; i += 1)
  156.             {
  157.                 x = points[i][0]*scale;
  158.                 y = points[i][1]*scale;
  159.                 ctx.lineTo(x, y);
  160.             }
  161.             ctx.stroke();
  162.            
  163.             if (markers)
  164.             {
  165.                 ctx.fillStyle="#009900";
  166.                 for(i = 0; i < points.length; i += 1)
  167.                 {
  168.                     x = points[i][0]*scale;
  169.                     y = points[i][1]*scale;
  170.                     ctx.beginPath();
  171.                     ctx.arc(x, y, 5, 0, 2*Math.PI, false);
  172.                     ctx.fill();
  173.                     ctx.stroke();
  174.                 }
  175.             }
  176.         }
  177.         ctx.restore();
  178.        
  179.         // add text, needs to be last to overlap graph
  180.         ctx.font = 'italic 20px sans-serif';
  181.         ctx.textBaseline = 'top';
  182.         ctx.fillText('y(m)', 240, 0);
  183.         ctx.fillText('x(m)', 460, 225);
  184.     }
  185. }
  186.  
  187.  
  188.        </script>
  189.     </body>
  190. </html>
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement