Skip to content

Instantly share code, notes, and snippets.

View hollance's full-sized avatar

Matthijs Hollemans hollance

View GitHub Profile
@hollance
hollance / nim6.s
Created July 29, 2024 09:09
Really old Amiga assembly version of The Game of Nim
; The Game of Nim
; 68000 assembly source by Matthijs 'Tice' Hollemans of the Fantasy Freaks
; converted from an Int*l 8085 (!) coding example... (but improved upon considerably!)
; To do:
; * intuition stuff (met gadgets enzo)
; * Meer pc-relative spul (=kortere executable)
************************************************************************** INITIALISATION *
@hollance
hollance / fft.h
Last active May 17, 2024 15:14
Very basic Cooley-Tukey FFT, not optimized for speed at all
#pragma once
#include <vector>
/**
Very basic Cooley-Tukey FFT, not optimized for speed at all.
This is a complex-valued FFT, so you need to provide both real and imaginary
input values (set imaginary to zero for audio input). The complex values are
interleaved.
@hollance
hollance / beauty.markdown
Created May 2, 2024 19:56
The Different Levels of Software Beauty

The Different Levels of Software Beauty

To me, great software is beautiful software.

Obviously, the primary concern is that the software works properly, that it does what it is supposed to. But if that is all, the software will never be great.

Here are my conditions that great software must meet, from most important to least important. But they all matter!

  1. The user experience. Does the software let the user reach their goals quickly and efficiently? User satisfaction rather than ease of use. Great software is not necessarily simple, but it does get out of the way.
@hollance
hollance / CRUEL CANNON.PRG
Created March 5, 2024 20:29
Cruel Cannon, a hangman type game for the C64 written in BASIC, circa 1993
0 poke808,225:gosub 31000
1 poke53269,0
10 remifa=0thena=1:load"c.font3",8,1
20 remifa=1thena=2:load"lespirites",8,1
900 ww=68:dim n(ww):dim keer$(50)
1000 rem *** the game ***
1010 rem ** after a game over **
1015 poke 53265,peek(53265) and 239
1020 sc=0:gd=0:ft=0:ln=0:l$="":w$="":keer=1:keer$(0)="":keer$(1)=""
1030 gosub 20000:gosub 10000:jaja=0
@hollance
hollance / StateVariableFilter.h
Created August 26, 2023 16:26
Cytomic SVF implementation in C++
#pragma once
#include <cmath>
/**
State variable filter (SVF), designed by Andrew Simper of Cytomic.
http://cytomic.com/files/dsp/SvfLinearTrapOptimised2.pdf
The frequency response of this filter is the same as of BZT filters.
@hollance
hollance / alignment-heads.md
Last active September 6, 2024 10:27
Alignment heads for Whisper word-level timestamps with Hugging Face Transformers

To allow the Hugging Face version of Whisper to predict word-level timestamps, a new property alignment_heads must be added to the GenerationConfig object. This is a list of [layer, head] pairs that select the cross-attention heads that are highly correlated to word-level timing.

If your Whisper checkpoint does not have the alignment_heads property yet, it can be added in two possible ways.

Method 1. Change the model.generation_config property:

# load the model
model = WhisperForConditionalGeneration.from_pretrained("your_checkpoint")
@hollance
hollance / ProtectYourEars.h
Created June 26, 2022 18:45
For testing audio code with headphones on...
#pragma once
#include <JuceHeader.h>
/**
Silences the buffer if bad or loud values are detected in the output buffer.
Use this during debugging to avoid blowing out your eardrums on headphones.
If the output value is out of the range [-1, +1] it will be hard clipped.
*/
inline void protectYourEars(float *buffer, int sampleCount)
@hollance
hollance / synth.c
Created May 21, 2022 22:19
Render basic waveform using Core Audio on macOS
// Compile this with:
// $ gcc synth.c -o synth -framework AudioToolbox
// Based on the CH07_AUGraphSineWave example from the book
// "Learning Core Audio: A Hands-On Guide to Audio Programming
// for Mac and iOS" by Chris Adamson and Kevin Avila
#include <AudioToolbox/AudioToolbox.h>
typedef struct
@hollance
hollance / BiQuadFilter.h
Created December 8, 2021 19:56
bi-quad filter in C++
inline float denormalsToZero(float x) {
return (std::abs(x) < 1e-15f) ? 0.0f : x;
}
/**
mystran's Bi-quadratic filter
https://www.kvraudio.com/forum/viewtopic.php?p=4836443#p4836443
This is not a direct form topology! Essentially it is modified coupled form
@hollance
hollance / Button.cpp
Created December 24, 2020 14:45
Arduino push button debouncing
#include "Button.h"
Button::Button() : _pin(0), _oldState(0) {
}
void Button::attach(byte pin) {
_pin = pin;
pinMode(_pin, INPUT);
}