Upgrade to Pro — share decks privately, control downloads, hide ads and more …

dweet player

Sponsored · Ship Features Fearlessly Turn features on and off without deploys. Used by thousands of Ruby developers.
Avatar for Ates Goral Ates Goral
October 17, 2017

dweet player

Audiovisual sequencer for tweet-sized JavaScript effects

Avatar for Ates Goral

Ates Goral

October 17, 2017
Tweet

More Decks by Ates Goral

Other Decks in Programming

Transcript

  1. Some JavaScript golfing communities CodeGolf: https://codegolf.tk/ - friendlier for entry-level

    golfing jS1k: http://js1k.com/ - next round coming up! • https://atesgoral.github.io/bd1k/ • http://js1k.com/2017-magic/demo/2827 Slack: http://register.jsgolf.club - come hang out with golfers! reddit: https://www.reddit.com/r/codegolf/ StackExchange: https://codegolf.stackexchange.com/
  2. dweet runtime • c - canvas • x - 2D

    context • t - time • S - Math.sin • C - Math.cos • R - RGB colour utility
  3. Then find some cool music Free Music Archive: http://freemusicarchive.org/ •

    Electronic: IDM • Electronic: Dubstep • Electronic: Chiptune • etc. Copy the track detail page URL. http://freemusicarchive.org/music/Pierlo/Olivetti_Prodest/05_San_Diego_Cruisin Or just a URL to any MP3 file (but beware of licensing issues!)
  4. Then go to dweet player The URL format is: /demo/v1/.../.../…

    Where: • the first … is for the loader dweet ID - using * picks a random one • the second … is for a comma-separated list of dweet IDs • and the third … is for the audio track URL https://dweetplayer.net/demo/v1/*/3252/http://freemusicarchive.org/music/Pierlo/Oli vetti_Prodest/05_San_Diego_Cruisin
  5. Beat detection source → analyzer → script processor → destination

    source → delay → gain → destination beat = root mean square (RMS) of FFT bins / running average of RMS > threshold
  6. Time warping • Suffix the dweet id with t to

    “rush” time to the beat • Suffix the dweet id with T to “bounce” time to the beat https://dweetplayer.net/demo/v1/*/3307~20t10,3307~8T80/http://www.metronomeb ot.com/iPhoneClickTracks/MetronomeBotBasicClickTrack120.mp3
  7. Scene transitions • @ - exact seconds • ~ -

    approximate seconds (align to next beat) • ! - exact frames
  8. Mirror image • h - horizontal mirror (at given location)

    • v - vertical mirror (at given location)
  9. Planned • S - distort sine function with FFT bins

    • C - distort cosine function with FFT bins Tweet ideas to @atesgoral
  10. Work-in-progress demo Scene transitions are not timed well yet :(

    https://dweetplayer.net/demo/v1/3097/261~7,637~3,637!1h6,637!1h7,637!1h8,637!1h 9,637!1h10,93!5,1357b,838~10t3,2030~10T,2873~15t,2220~8b,1025~10z,977,977h=, 977v=,309~8w,1944t2h,1944t2v/http://freemusicarchive.org/music/Boss_Bass/Love _For_Everyone_Everywhere/08_-_Boss_Bass_-_Extreme_Bass_Terror
  11. Info and source code https://github.com/atesgoral/dweet-player Behind the scenes: • Scrapes

    dwitter.net pages for dweet meta + source • Reads meta from FMA (via API) and MP3 ID3 • Aggressive caching of meta + audio • Per-dweet runtime (sandboxing) • Pure-CSS icons! Wow! • Plain old jQuery + Handlebars! Yay! • Node.js on Heroku, fronted by Cloudflare