diff options
Diffstat (limited to 'Src/resources/skins/Winamp Modern/scripts/beatvisualization.m')
-rw-r--r-- | Src/resources/skins/Winamp Modern/scripts/beatvisualization.m | 139 |
1 files changed, 139 insertions, 0 deletions
diff --git a/Src/resources/skins/Winamp Modern/scripts/beatvisualization.m b/Src/resources/skins/Winamp Modern/scripts/beatvisualization.m new file mode 100644 index 00000000..af142e9d --- /dev/null +++ b/Src/resources/skins/Winamp Modern/scripts/beatvisualization.m @@ -0,0 +1,139 @@ +#include <lib/std.mi> +#include "attribs.m" + +Function setObjects(); + +Global Group frameGroup,beatdisplay; +Global Layer beatOverlay,DisplayRight,DisplayRightOverlay,DisplaySongtickerBG,VisOverlay; +Global Timer refreshEQ; +Global AnimatedLayer beatbarLeft,beatbarRight; +Global int lastBeatLeft,lastBeatRight; +Global Button Toggler,Toggler2; +Global Int dobeat2; + +System.onScriptLoaded() { + initAttribs(); + frameGroup = getScriptGroup(); + beatdisplay = frameGroup.findObject("player.normal.display.beatvisualization"); + beatOverlay = frameGroup.findObject("beatdisplayoverlay"); + beatbarLeft = frameGroup.findObject("beatleft"); + beatbarRight = frameGroup.findObject("beatright"); + + Toggler = frameGroup.findObject("beatvisualization"); + Toggler2 = frameGroup.findObject("beatvisualization2"); + + DisplayRight = frameGroup.findObject("display.right"); + DisplayRightOverlay = frameGroup.findObject("display.right.overlay2"); + DisplaySongtickerBG = frameGroup.findObject("display.st.right"); + VisOverlay = frameGroup.findObject("visualization.overlay"); + + lastBeatLeft = 0; + lastBeatRight = 0; + + refreshEQ = new Timer; + refreshEQ.setDelay(10); +} + +System.onscriptunloading() { + delete refreshEQ; +} + +setObjects() { + int group_width = frameGroup.getWidth(); + + if ( group_width % 2 !=0 ) { + DisplayRight.setXmlParam("image","player.display.right"); + DisplayRightOverlay.setXmlParam("image","player.display.right"); + DisplaySongtickerBG.setXmlParam("image","player.display.songticker.bg.right"); + VisOverlay.setXmlParam("image","player.visualization.overlay"); + } else { + DisplayRight.setXmlParam("image","player.display.right2"); + DisplayRightOverlay.setXmlParam("image","player.display.right2"); + DisplaySongtickerBG.setXmlParam("image","player.display.songticker.bg.right2"); + VisOverlay.setXmlParam("image","player.visualization.overlay2"); + } + + if ( group_width > 480 ) { + int newXpos = (group_width-60)/2; + beatdisplay.setXmlParam("x", IntegerToString(newXpos)); + beatdisplay.show(); + + if ( beatvisualization_attrib.getData()=="1" ) { + refreshEQ.stop(); + refreshEQ.start(); + } else { + refreshEQ.stop(); + beatbarLeft.gotoframe(0); + beatbarRight.gotoframe(0); + } + } else { + beatdisplay.hide(); + refreshEQ.stop(); + } +} + +frameGroup.onResize(int x, int y, int w, int h) { + setObjects(); +} + +refreshEQ.onTimer() { + int beatLeft= System.getLeftVuMeter(); + int beatRight= System.getRightVuMeter(); + + int frameLeft=beatLeft/16; + int frameRight=beatRight/16; + + if (frameLeft>14) frameLeft=14; + if (frameRight>14) frameRight=14; + + if (frameLeft<lastBeatLeft) { + frameLeft=lastBeatLeft-1; + if (frameLeft<0) frameLeft=0; + } + + if (frameRight<lastBeatRight) { + frameRight=lastBeatRight-1; + if (frameRight<0) frameRight=0; + } + + lastBeatLeft=frameLeft; + lastBeatRight=frameRight; + + beatbarLeft.gotoframe(frameLeft); + beatbarRight.gotoframe(frameRight); +} + +beatvisualization_attrib.onDataChanged() { + setObjects(); +} + +System.onKeyDown(String key) { + if (key == "shift+ctrl+alt") { + dobeat2 = 1; + complete; + } else dobeat2 = 0; +} + +Toggler.onLeftClick() { + if ( beatvisualization_attrib.getData()=="1" ) { + beatvisualization_attrib.setData("0"); + } else { + beatvisualization_attrib.setData("1"); + } +} + +Toggler2.onActivate(boolean on) { + if (!dobeat2) { Toggler.leftClick(); return; } + refreshEQ.stop(); + + if (on) { + beatbarLeft.setXMLParam("image","player.display.beat.left2"); + beatbarRight.setXMLParam("image","player.display.beat.right2"); + beatOverlay.hide(); + } else { + beatbarLeft.setXMLParam("image","player.display.beat.left"); + beatbarRight.setXMLParam("image","player.display.beat.right"); + beatOverlay.show(); + } + setObjects(); +} |