zondag 16 oktober 2016

Adapting the bounding box of an SVG to scale to content

<!doctype HTML>
<html>
 <body>
 <div style="width: 50px; height: 50px; padding:0px; background-color: #eee;">
 <svg width="100%" height="100%" id="test">
  <circle cx="50" cy="1" r="10" stroke="green" stroke-width="4" fill="yellow" />
  <circle cx="5" cy="20" r="15" stroke="blue" stroke-width="4" fill="red" />
</svg>
</div>
<script>
var svg=document.getElementById("test");
setViewboxToContent(svg);

function setViewboxToContent(svg)
{
 var bb=svg.getBBox();
 var w=bb.width;
 var h=bb.height;
 var l=bb.x;
 var t=bb.y;
 svg.setAttribute("viewBox", (l-2)+" "+(t-2)+" "+(w+4)+" "+(h+4)); 
}
</script>

 </body>
</html>

The bounding box of the SVG can be anything

Just try and move the circles around..
I give 2 pixels margin for fatter lines, when your circles get real small or close together.
It's not perfect, because line-thickness is not taken into account by SVG.getBBox(). but it's quite good. nonetheless

dinsdag 11 oktober 2016

Evolutie in MuziekEditor

Evolutie is het zich aanpassen van een organisme aan zijn omgeving door het maken van verschillende varianten van zichzelf, waarvan er een aantal sterven en een aantal overleven.

Dit principe vind ik al geruime tijd interessant om te vertalen naar computers en ik heb het met succes toegepast voor Building Dragons in navolging van Theo Janssen.

Maar nu dringt zich een systeem aan mij op, dat bij uitstek geschikt is voor zo'n systeem.
Muziek..

  • Een melodielijn zou je kunnen zien als een organisme. Het leeft, vraagt interageert en groeit en verandert.
  • De akkoorden waardoor een melodielijn zich beweegt bepalen zijn 'succes'. 
  • Succes is in dit geval hoe het in het oor ligt.
Door componisten worden akkoorden meestal afgeleid van de melodielijn, maar bij een expert-systeem dat melodielijnen ontwerpt werk je andersom. (Note to self: Ik heb daar nog ergens een boekje over, ligt naast de printer, kon wel eens interessant zijn).

Stel nu, dat we een akkoordprogressie vast stellen, dan zouden we een melodielijn kunnen laten evolueren, waarbij we een gebruiker een aantal varianten laten horen en hieruit laten kiezen in een aantal generaties.

  • In principe kan een volgend akkoord in een progressie ook zo worden gezien: als een systeem van pitches, die zo weinig mogelijk van zichzelf veranderen. 9/10 van de muziek zit zo in elkaar.
  • Als deze melodielijn dan weer het volgende akkoord bepaalt (eventueel met hetzelfde principe van evolutionair de gebruiker laten kiezen) kan een volslagen leek muziek maken op midi-niveau.
  • Andere partijen zoals de bas, maar ook principes als het ritme kunnen ook op deze manier ontstaan en toegepast worden op het hele of een deel van de compositie.