Skip to content

Instantly share code, notes, and snippets.

Last active October 14, 2022 18:53
Show Gist options
  • Save mailletf/c49063d005dfc51a2df6 to your computer and use it in GitHub Desktop.
Save mailletf/c49063d005dfc51a2df6 to your computer and use it in GitHub Desktop.
Simplified version of real-time audio scoring for goal detection
import pyaudio
import librosa
import numpy as np
import requests
# ring buffer will keep the last 2 seconds worth of audio
ringBuffer = RingBuffer(2 * 22050)
def callback(in_data, frame_count, time_info, flag):
audio_data = np.fromstring(in_data, dtype=np.float32)
# we trained on audio with a sample rate of 22050 so we need to convert it
audio_data = librosa.resample(audio_data, 44100, 22050)
# machine learning model takes wavform as input and
# decides if the last 2 seconds of audio contains a goal
if model.is_goal(ringBuffer.get()):
# GOAL!! Trigger light show
return (in_data, pyaudio.paContinue)
# function that finds the index of the Soundflower
# input device and HDMI output device
dev_indexes = findAudioDevices()
stream = = pyaudio.paFloat32,
channels = 1,
rate = 44100,
output = True,
input = True,
input_device_index = dev_indexes['input'],
output_device_index = dev_indexes['output'],
stream_callback = callback)
# start the stream
while stream.is_active():
Copy link

cleebp commented Nov 23, 2018

It appears that link is now dead, any idea where the RingBuffer specifically is from @mailletf ?

Copy link

BG4WCE commented Oct 16, 2020

Given the name of the class and its methods, I would say it comes from here, without credit.

You saved me a couple of hours. Thanks.

Copy link

What is the referring to to 'trigger the lightshow' - how is this setup?

Copy link

It would call something like this, wrapped behind a Flask endpoint.

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment