Skip to content

Instantly share code, notes, and snippets.

View leemartin's full-sized avatar

Lee Martin leemartin

View GitHub Profile
@leemartin
leemartin / AudioSpectrum.vue
Created February 20, 2022 17:53
Vue Paper.js Audio Spectrum Visualizer
<template>
<div id="spectrum">
<canvas ref="canvas"></canvas>
</div>
</template>
<script>
import paper from 'paper'
export default {
@leemartin
leemartin / get-token.js
Created May 25, 2021 15:46
IBM Watson Token Requester
const { IamTokenManager } = require('ibm-watson/auth')
const sttAuthenticator = new IamTokenManager({
apikey: process.env.SPEECH_TO_TEXT_IAM_APIKEY
})
const handler = async (event) => {
try {
let { result } = await sttAuthenticator.requestToken()
@leemartin
leemartin / meta-share.js
Last active February 11, 2021 17:40
Dynamic Meta Share Function
const handler = async (event) => {
const subject = event.queryStringParameters.name || 'Tony'
const html = `
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<meta http-equiv="X-UA-Compatible" content="IE=edge,chrome=1">
<meta name="viewport" content="width=device-width, initial-scale=1.0, maximum-scale=1.0, user-scalable=no, minimal-ui">
@leemartin
leemartin / spotify-waveform.js
Last active May 24, 2024 16:23
Spotify Waveform Data Generation from Audio Analysis API
const fs = require('fs')
const data = require('./track.json')
let duration = data.track.duration
let segments = data.segments.map(segment => {
return {
start: segment.start / duration,
duration: segment.duration / duration,
loudness: 1 - (Math.min(Math.max(segment.loudness_max, -35), 0) / -35)
@leemartin
leemartin / concert.json
Created June 23, 2020 17:37
Tour Data Concert
{
"id": "",
"artist_id": "",
"datetime": "",
"description": "",
"venue": {
"id": "",
"name": "",
"latitude": "",
"longitude": "",
@leemartin
leemartin / Scan.js
Created May 16, 2020 19:15
Basic Javascript hooks of Shelter In Space "Scanner" transition
methods: {
beforeEnter(el) {
el.style.cssText = "clip-path: inset(0 0 100% 0)"
},
enter(el, done) {
let scan = { percent: 100 }
anime({
targets: scan,
percent: 0,
@leemartin
leemartin / Typer.vue
Last active May 16, 2020 18:38
The "Hitchhiker Typer" component used on Shelter In Space
<template>
<p><span class="start">{{ start }}</span><span class="end">{{ end }}</span></p>
</template>
<script>
export default{
props: {
phrase: {
type: String,
required: true
@leemartin
leemartin / countdown.vue
Created October 6, 2019 12:37
Luxon Vue Countdown
<template>
<time>{{ remaining }}</time>
</template>
<script>
import { DateTime, Duration } from 'luxon'
export default{
data() {
return {
@leemartin
leemartin / msToTime.js
Created September 14, 2019 14:46
Milliseconds to Timecode
let msToTime = (milliseconds) => {
let ms = milliseconds % 1000
let s = (milliseconds - ms) / 1000
let secs = s % 60
if (secs < 10) {
secs = `0${secs}`
}
@leemartin
leemartin / forecast.js
Created August 21, 2019 12:20
A Dark Sky serverless function for Netlify
const fetch = require('node-fetch');
exports.handler = async (event, context) => {
try{
const latitude = event.queryStringParameters.latitude;
const longitude = event.queryStringParameters.longitude;
const response = await fetch(`https://api.darksky.net/forecast/${process.env.DARK_SKY_KEY}/${latitude},${longitude}`);
const data = await response.json();