Skip to content

Instantly share code, notes, and snippets.

@jarmitage
Last active April 1, 2023 13:38
Show Gist options
  • Star 0 You must be signed in to star a gist
  • Fork 0 You must be signed in to fork a gist
  • Save jarmitage/643b0d7aa704bf9ec0df9ea5796fa0cd to your computer and use it in GitHub Desktop.
Save jarmitage/643b0d7aa704bf9ec0df9ea5796fa0cd to your computer and use it in GitHub Desktop.
from iipyper import Audio, run
import sounddevice as sd
import taichi as ti
from math import pi
import sys
@ti.kernel
def generate_data(outdata: ti.ext_arr(),
frames: ti.i32,
start_idx: ti.template(),
fs: ti.f32):
for I in ti.grouped(ti.ndrange(frames)):
i = I[0]
t = (start_idx[None] + i) / fs
s = ti.sin(2 * pi * 440 * t)
start_idx[None] += 1
outdata[i,0] = s
def main():
ti.init(arch=ti.vulkan)
device = sd.default.device
fs = sd.query_devices(sd.default.device, 'output')['default_samplerate']
buffer_size = 128
start_idx = ti.field(ti.i32, ())
def callback(indata, outdata, frames, time, status):
if status: print(status, file=sys.stderr)
generate_data(outdata, frames, start_idx, fs)
Audio(device=device, channels=1, blocksize=buffer_size,
samplerate=fs, callback=callback)
if __name__=='__main__':
run(main)
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment