Skip to content

Instantly share code, notes, and snippets.


Matthijs Hollemans hollance

View GitHub Profile
hollance /
Last active June 1, 2023 15:19
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 WhisperConfig 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.config property:

# load the model
model = WhisperForConditionalGeneration.from_pretrained("your_checkpoint")
hollance / ProtectYourEars.h
Created June 26, 2022 18:45
For testing audio code with headphones on...
View ProtectYourEars.h
#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 / synth.c
Created May 21, 2022 22:19
Render basic waveform using Core Audio on macOS
View synth.c
// 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 / BiQuadFilter.h
Created December 8, 2021 19:56
bi-quad filter in C++
View BiQuadFilter.h
inline float denormalsToZero(float x) {
return (std::abs(x) < 1e-15f) ? 0.0f : x;
mystran's Bi-quadratic filter
This is not a direct form topology! Essentially it is modified coupled form
hollance / Button.cpp
Created December 24, 2020 14:45
Arduino push button debouncing
View Button.cpp
#include "Button.h"
Button::Button() : _pin(0), _oldState(0) {
void Button::attach(byte pin) {
_pin = pin;
pinMode(_pin, INPUT);
hollance / workaround.markdown
Created October 9, 2020 09:59
Workaround for Xcode 12 problems with Core ML models
View workaround.markdown

I ran into a problem with Xcode 12's Core ML compiler, and several people have emailed me about what appears to be the same issue.

The workaround is to use Xcode 11 to compile the Core ML model. This means you still need to have Xcode 11 installed (which is a good idea anyway).

What worked for me is the following...

From the Terminal, switch to the Xcode 11.7 installation (your path may be different):

sudo xcode-select -s /Applications/
hollance / ARC.ipynb
Created September 8, 2020 13:25
ARC test
View ARC.ipynb
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
View cluetrain.txt
A few years after my stint in Japan, I ended up back in the United
States, hired by an AI software outfit to be their director of corporate
communications. Cool, I thought. That sounded important. I had no idea
what it meant. Only later did I discover I'd become their PR guy.
I was pretty naive back then, but I quickly figured out that public
relations was perceived by the press — the people I was supposed to be
talking to — as little more than thinly disguised hucksterism. I tried
playing the high-tech huckster role precisely once and came away from
hollance / CoreML+Combine.swift
Created November 12, 2019 16:28
Using Core ML with Combine
View CoreML+Combine.swift
import CoreML
import Combine
extension Publisher where Self.Output: MLFeatureProvider {
Operator that lets you run a Core ML model as part of a Combine chain.
It accepts an MLFeatureProvider object as input, and, if all goes well,
returns another MLFeatureProvider with the model outputs.
hollance /
Created October 7, 2017 20:43
SE-ResNet-50 in Keras
# Convert SE-ResNet-50 from Caffe to Keras
# Using the model from
import os
import numpy as np
# The caffe module needs to be on the Python path; we'll add it here explicitly.
import sys
caffe_root = "/path/to/caffe"
sys.path.insert(0, caffe_root + "python")