<?xml version='1.0' encoding='utf-8'?>
<MNPreset formatVersion="1"><metadata name="Meter - Stereo Rails" description="Connect audio to Sound A and Sound B. Sensitivity (0-1) changes the display only. Palette (0-1) takes a number from a Knob, Slider or Number, not a Colour node. No test oscillator remains inside the reusable module." author="MNodes" category="Scene Studio" pluginVersion="1.1.5" createdAt="1790467200000" modifiedAt="1790467200000" type="Utility" preferredOpenMode="perform" tags="scene, visual, interface" /><state><marionietoworld.MNodes_State gridActive="0" gridSize="20" viewOffsetX="0" viewOffsetY="48" zoom="0.80" didInitView="1" toolbarExpanded="0" pv="1.1.5"><panel width="480" height="100" locked="1" zoom="1" performScale="1" gridEnabled="0" toolbarExpanded="0" panelBgColour="ff101820"><entry nodeId="2" x="0" y="0" w="480" h="100" z="0" auto="0" /></panel><nodes nextId="22"><node id="1" type="visual.shadercode" title="Meter - Stereo Rails - Code" expanded="1" x="32" y="200" w="310" h="240"><state file="" textsize="13.0" out="0.0" code="&#10;// In A / In B are independent audio inputs. P1 changes visual gain only.&#10;// No CPU script or animation loop: the Scene tracks the inputs it reads.&#10;const float PI=3.14159265;&#10;float ink(float d){return 1.-smoothstep(-1.2/iResolution.y,1.2/iResolution.y,d);}&#10;float line(vec2 p,vec2 a,vec2 b){vec2 v=b-a;return length(p-a-v*clamp(dot(p-a,v)/max(dot(v,v),.000001),0.,1.));}&#10;vec3 palette(float x){return .55+.45*cos(6.283185*(x+P2*.6+vec3(.0,.22,.43)));}&#10;float waveA(float x){return (texture(iChannel0,vec2(x,.75)).r-.5)*2.;}&#10;float waveB(float x){return (texture(iChannel1,vec2(x,.75)).r-.5)*2.;}&#10;float spectrumSide(float x,bool right){float f=mix(2.,230.,pow(clamp(x,0.,1.),2.3))/512.;float v=right?texture(iChannel1,vec2(f,.25)).r:texture(iChannel0,vec2(f,.25)).r;return clamp(pow(v,1.6)*(.45+P1*.65),0.,1.);}&#10;float spectrum(float x){return spectrumSide(x,false);}&#10;float level(bool right){float s=0.;for(int k=0;k&lt;24;k++){float x=(float(k)+.5)/24.;float v=right?waveB(x):waveA(x);s+=v*v;}return clamp(sqrt(s/24.)*(.3+P1*1.7),0.,1.);}&#10;void mainImage(out vec4 frag,in vec2 pixel){&#10; vec2 uv=pixel/iResolution.xy,p=(pixel-.5*iResolution.xy)/iResolution.y;&#10; vec3 col=vec3(.028,.038,.052);float gain=.3+P1*1.7;&#10; &#10; for(int i=0;i&lt;2;i++){&#10;  float y=.31+.38*float(i),v=level(i==1),x=clamp((uv.x-.045)/.91,0.,1.);&#10;  float track=ink(abs(uv.y-y)-.085)*step(.045,uv.x)*step(uv.x,.955);&#10;  vec3 c=mix(vec3(.25,.91,.77),vec3(1.,.34,.22),smoothstep(.72,1.,x));&#10;  col=mix(col,vec3(.10,.15,.19),track);col=mix(col,c,track*step(x,v));&#10; }&#10; &#10; frag=vec4(clamp(col,0.,1.),1.);&#10;}&#10;" live="1" ui_only="1" hide_unconnected="1" /></node><node id="2" type="visual.gpucanvas" title="Scene" expanded="1" x="754" y="200" w="600" h="420"><state in="0.0" inb="0.0" codein="0.0" zonesin="0.0" setrow="0.0" scriptin="0.0" editObjects="0" appearanceRow="0.0" pcount="8" speed="1.0" p1="0.4" p2="0.15" p3="0.0" p4="0.0" p5="0.0" p6="0.0" p7="0.0" p8="0.0" mousex="0.5" mousey="0.5" wheel="0.0" dragx="0.0" dragy="0.0" imouse="0 0 0 0" code="" zones="[&#10;]" zonevalues="" labels="" image1="" image2="" fontFile="" preserveBuffers="0" resolution="0" framerate="0" transparent="0" background="FF0F131A" keyboard="0" zoneinputs="0" showOrientation="0" showObjectAxes="0" visible="1" ignoreClicks="0" panelX="0.0" panelY="0.0" panelW="0.0" panelH="0.0" tooltipStyle="" exposeToDAW="0" ui_only="1" hide_unconnected="1" /></node><node id="3" type="audio.sine" title="Test tone - visual input only" expanded="0" x="382" y="200" w="160" h="100"><state freq="220" phase="0.0" enabled="1" compact_exp_w="300" compact_exp_h="180.0" compact="1" hide_unconnected="1" /></node><node id="4" type="audio.sine" title="Test tone - right visual input only" expanded="0" x="32" y="500" w="160" h="100"><state freq="330" phase="0.0" enabled="1" compact_exp_w="300" compact_exp_h="180.0" compact="1" hide_unconnected="1" /></node><node id="5" type="comment" title="Comment" expanded="0" x="24" y="18" w="1320" h="48"><state text="Meter - Stereo Rails" fontSize="32" fontWeight="3" align="0" textColour="ffe5ecee" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="6" type="comment" title="Comment" expanded="0" x="24" y="78" w="1320" h="94"><state text="Connect audio to Sound A and Sound B. Sensitivity (0-1) changes the display only. Palette (0-1) takes a number from a Knob, Slider or Number, not a Colour node. No test oscillator remains inside the reusable module." fontSize="20" fontWeight="1" align="0" textColour="ffcad5d9" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="7" type="comment" title="Comment" expanded="0" x="754" y="654" w="580" h="116"><state text="Select a node for its settings. Open the separate Code or Script to change the drawing. Show Zones reveals interaction areas." fontSize="20" fontWeight="1" align="0" textColour="ff80d9de" bgColour="00000000" borderColour="80ffffff" borderOn="0" borderStroke="1.0" fontFamily="Inter" /></node><node id="20" type="audio.gain" title="Demo level 3" x="380" y="440" w="240" h="180" expanded="1"><state gain=".5" unit="0" smooth="5" /></node><node id="21" type="audio.gain" title="Demo level 4" x="380" y="520" w="240" h="180" expanded="1"><state gain=".5" unit="0" smooth="5" /></node></nodes><edges><e fn="1" fp="0" tn="2" tp="2" /><e fn="20" fp="1" tn="2" tp="0" /><e fn="21" fp="1" tn="2" tp="3" /><e fn="3" fp="100" tn="20" tp="0" /><e fn="4" fp="100" tn="21" tp="0" /></edges></marionietoworld.MNodes_State></state></MNPreset>