Giter VIP home page Giter VIP logo

arcane.gl's Introduction

arcane.gl

##WebGL Music Visualizer

###TO RUN:

  • LIVE DEPLOY NOTE: This is an early release using experimental technologies; this only works in Chrome

  • Acquire Python [2.x or 3.x is fine]

  • From Terminal/CMD, Run:

      Python 2.x
          python -m SimpleHTTPServer 8081
      or
      Python 3.x
          python -m http.server 8081
    
  • From browser of choice, enter the url

      localhost:8081 or 127.0.0.1:8081
    

###Once setup:

Select a song from the dropdown list.

    Paradise Circus is most reactve; Mandala and Surge are full spectrum; Gemini is a minimalistic edge case.

Volume is controlled by a slider. Clear button doesn't work properly.

After song selection, wait for a play button to appear on screen. On click, the visualization begins.

Left click and drag to rotate camera. Right click and drag to pan camera. Two finger/scroll wheel to zoom.

###Technical Achievements:

  • Audio is at 24 hz. Rendering happens at 60 fps. An async callback pings the renderer with new data. If the renderer receives new data, it uses it; otherwise it has its own animation tasks to work on.

  • Since the visual is 2.5x faster [24hz*2.5=60] than audio data, animations were originally extremely jagged. To compensate, I pushed the renderer back a single frame, undetectably out of sync with the audio, to create a single tween frame.

  • Transitions occur in by comparing the current audio data with the previous frame's audio data. These values are the sum across all frequencies. Upon a certain threshold being crossed, a flag is assigned for the next frame. If enough time has passed, the transition is trigger. Alternately, if enough time passes with no trigger, the transition still occurs.

  • Colors are dynamically modified trigonometrically. Colors are modified by using time, cube position, cube indices, frequencies, and static scalars as sin/cos parameters

  • The z axis is manipulated over time, with an expansion and retraction depending on values, as well as influencing x and y positions for several scenes.

  • radial arc length is determined in mathUtils.js and used for certain scenes

###Tech Stack:

WebGL/THREE.js - GPU

Knockout.js - UI

JQuery - DOM

arcane.gl's People

Contributors

dodekahydra avatar

Stargazers

David Mansy avatar Sara Binns avatar

Watchers

James Cloos avatar Sara Binns avatar

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.