Skip to content

Instantly share code, notes, and snippets.

Solving environment /

Scott H. Hawley drscotthawley

Solving environment /
View GitHub Profile
drscotthawley /
Last active Jan 10, 2021 Greenscreen effect without a physical green screen, via OpenCV and Python
#! /usr/bin/env python
''' Greenscreen effect without a physical green screen
This performs background subtraction, and sets the background to "green" for use with "key frame" video editing software
Author: Scott Hawley,
Python, NumPy and OpenCV
I got these via Macports, but Homebrew, etc. work.
drscotthawley /
Last active Aug 17, 2017
My implementation of a temporal difference policy method for playing Tic Tac Toe, after seeing Shlomo Bauer speak at the Brentwood A.I. meetup.
#! /usr/bin/env python3
# Uses temporal difference policy method
# See, e.g.,
# In this code, X plays randomly whereas O 'learns'. (Feel free to change that)
# Thus we expect O to outperform X eventually
# Author: Scott Hawley
# Unlimited License: Feel free to use any or all of this code however you like.
drscotthawley /
Last active May 20, 2020
Generate BibTex from list of Tweets you (or another user) have favorited ('liked'), tweeted or RT'd
#! /usr/bin/env python3
Author: Scott Hawley
Scrapes URLs contained in tweets you (or another user) favorited ('liked') for DOI & other bibliographic info,
and tries to generate a set of BibTex entries to stdout.
Status messages go to stderr
Sample usage:
drscotthawley / WebAudioFreqGain.html
Last active Mar 13, 2018
WebAudio OSC Output for use with Wekinator
View WebAudioFreqGain.html
<html> <head>
<title>WebAudio OSC Output Example - 2 Variables</title>
<!-- By Scott Hawley @drscotthawley. Modified from
No additional license restrictions are introduced with these modifications; the automata/osc-web site gives no license info.
Thus as far as this author is concerned: "unlimited license": feel free to use & modify in any way you wish! -->
<h2>WebAudio OSC Output Example - 2 Variables</h2>
drscotthawley / Gamepad_Eyes_OSC.pde
Last active Apr 1, 2020
"Gamepad" Input example for Wekinator, e.g. for Xbox 360 controller
View Gamepad_Eyes_OSC.pde
// Gamepad_Eyes_OSC: demo of using game controller for OSC input.
// Uses the two thumb-sticks and either the left or right bumper buttons.
// Peter Lager maintains the Game Control Plus library (for Processing),
// which provides control data for joysticks and other game controllers
// ...such as my Xbox 360 controller.
// This is a quick mash-up using Lager's Gcp_gamepad animated eyes example code,
// (which is in the GCP library: In Processing, go to File > Examples..., then Contributed Libraries > Game Control Plus)
// and Rebecca Fiebrink's Simple_Mouse_DraggedObject_2Inputs example code for Wekinator.
drscotthawley / TestRenderMan_DexedVST.ipynb
Created Apr 28, 2018
Slight modification of RenderMan demo, made for Python 3 and MacOS
View TestRenderMan_DexedVST.ipynb
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
drscotthawley /
Last active Apr 29, 2018
Accessing Sox Audio Effects from Python via Pysox
import pysox
import librosa
import numpy as np
def apply_sox_effect(signal, sr, fxstr):
# This writes signal to a .wav file, processes it sox to another file, loads that and returns it.
# signal: a numpy list of numbers; the audio signal
# sr: the sample rate in Hz, must be an integer
# fxstr: a semicolon-separated string starting with the effect name followed by parameter values in order
drscotthawley /
Last active Jan 14, 2021
Realtime oscilloscope in 20 lines of Python, via soundcard & OpenCV
import numpy as np
import cv2
import soundcard as sc # Get it from
imWidth, imHeight = 1024, 512 # screen size
def draw_wave(screen, mono_audio, xs, title="oscilloscope", gain=5):
screen *= 0 # clear the screen
ys = imHeight/2*(1 - np.clip( gain * mono_audio[0:len(xs)], -1, 1)) # the y-values of the waveform
pts = np.array(list(zip(xs,ys))).astype( # pair up xs & ys
cv2.polylines(screen,[pts],False,(0,255,0)) # connect points w/ lines
cv2.imshow(title, screen) # show what we've got
drscotthawley /
Last active May 3, 2018
Realtime waveform display with tunable trigger level
#! /usr/bin/env python3
# -*- coding: utf-8 -*-
__author__ = 'Scott H. Hawley'
__copyright__ = 'Scott H. Hawley'
__license__ = "MIT Licence (do what you want, don't blame me)"
import numpy as np
import cv2
import soundcard as sc #
from scipy.ndimage.interpolation import shift
drscotthawley /
Last active Aug 27, 2020
Shorten text by applying various shortening rules
#!/usr/bin/env python
# Replaces lengthy words/phrases with shorter variants
# Author: Scott Hawley
import pandas as pd
import re
import os