Skip to content

Instantly share code, notes, and snippets.

View spacekitcat's full-sized avatar
👋

Lisa Burton spacekitcat

👋
View GitHub Profile
from collections import deque
CHROMATIC_SCALE = deque(['C', 'C#', 'D', 'D#', 'E', 'F', 'F#', 'G', 'G#', 'A', 'A#', 'B'])
MAJOR=[0, 2, 4, 5, 7, 9, 11]
MINOR=[0, 2, 3, 5, 7, 8, 10]
def printScaleLine(scale):
scaleOutputString=''
for x in scale:
scaleOutputString = scaleOutputString + x.ljust(3)
@spacekitcat
spacekitcat / index.html
Last active May 21, 2024 21:46
Microphone input audio visualisation demo
<html>
<!--
Performs a continuous FFT on the audio signal from the microphone and renders a simple
HTML bar chart every 50ms (although only if the signal is beyond a threshold).
License: MIT
-->
<head>
<title>Audio spectrum visualisation demo</title>
<style>
@spacekitcat
spacekitcat / music_note_distance_trainer.py
Created October 2, 2021 19:37
Learning tool designed to drill the user on the distance between random note pairs to help reinforce a sense of scale geometry.
import random
def get_notes():
return ['c', 'c#', 'd', 'd#', 'e', 'f', 'f#', 'g', 'g#', 'a', 'a#', 'b']
def get_note_pair():
x = random.choice(range(0, len(get_notes()) - 1))
y = random.choice(range(x+1, len(get_notes())))
@spacekitcat
spacekitcat / naive-ray-tracer-00.py
Last active February 28, 2021 16:23
Naive ray tracer implementation 00. It renders two spheres with inverted z values, the z value goes between 0 and 15, simulating a bounce effect.
import pygame as pg
import numpy as np
def is_exit_key(e):
return e.type == pg.KEYUP and (e.key == pg.K_ESCAPE or e.key == pg.K_q)
class GameObject:
def __init__(self, position, colour):
self.position = position
from PIL import Image
from PIL import ImageFont
from PIL import ImageDraw
import os
# The range of images to generate, which also controls the number of gradient 'stops'
imageCount = 30
# How far to increment red for each image, currently tied to imageCount as you can see
colorIncrement = 255 / imageCount
# Output folder for the images
@spacekitcat
spacekitcat / 6502-nes-stitch-n-draw.asm
Created September 1, 2019 19:30
6502 machine code snippet for stiching and rendering a 4 part sprite on the 8-bit Nintendo (NES)
.define OAM_TABLE_START $0200
; .zeropage
; param_1: .res 1
; param_2: .res 1
; param_3: .res 1
; temp_var_1: .res 1
; temp_var_2: .res 1
; temp_var_3: .res 1
@spacekitcat
spacekitcat / 6502-time-delay.asm
Created August 24, 2019 13:21
Creates a time delay on the 6502. Easy to adapt the intervals or even parameterise the subroutine
; Written for the CA65 assembler and tested on a NES emulator
.zeropage
counter_lsb: .res 1
counter_msb: .res 1
.proc RateLimit
lda #$EE ; Most Significant Byte 'interval'
sta counter_msb
LOOP_MSB:
lda #$00 ; Least Significant Byte 'interval'
@spacekitcat
spacekitcat / 6502-16bit-counter.asm
Last active August 10, 2019 13:51
Code demonstrating a 16-bit counter written for the 6502, an 8-bit processor
lda #$00
sta $a0
lda #$00
sta $a1
LSB_INC:
ldy $a0 ; Debug, shows the LSB in the Y register
inc $a0
BNE LSB_INC
LSB_RESET:
@spacekitcat
spacekitcat / shannon-entropy-for-a-file.js
Last active April 29, 2019 21:51
Computes the Shannon entropy for a given input file
const fs = require('fs');
const updateOccurenceTable = (byteOccurenceTable, inputBuffer) => {
inputBuffer.forEach(character => {
const byteOccurenceAccumulator = byteOccurenceTable[character];
byteOccurenceTable[character] = byteOccurenceAccumulator !== undefined ? byteOccurenceAccumulator + 1 : 1;
});
const { total } = byteOccurenceTable;
byteOccurenceTable.total = total ? total + inputBuffer.length : inputBuffer.length;
@spacekitcat
spacekitcat / deploy_cloud_formation.sh
Created October 13, 2018 20:12
Deletes, packages and redeploys a CloudFormation stack. Convenience for scripts for debugging automatic deploys.
#!/bin/bash
# October 2018.
# Written by Lisa Burton.
# Provided under the terms of the MIT license.
STACK_NAME='<<< YOUR_CLOUD_FORMATION_STACK_NAME >>>'
SAM_INPUT_TEMPLATE='<<< YOUR_SAM_FILE_HERE >>>'
SAM_OUTPUT_TEMPLATE='outputSamTemplate.yaml'
SAM_S3_BUCKET='<<< YOUR_S3_BUCKET_NAME >>>'