Just starting with bokeh… I try to plot realtime audio data using Pyaudio and Bokehs periodic_callback, but am a bit stuck right know… (I also couldn’t get the spectrogram example to work, the OHLC example works after solving an issue in line 97 in main.py (“width” replaced with “plot_width”))
—code—
import pyaudio
import numpy as np
import queue
from bokeh.plotting import figure, curdoc
from bokeh.models import ColumnDataSource
from bokeh.driving import count
que = queue.Queue()
p = pyaudio.PyAudio()
def callback(in_data, frame_count, time_info, status):
data = np.fromstring(in_data, dtype=np.int16)
que.put(data)
return (None, pyaudio.paContinue)
stream = p.open(
format=pyaudio.paInt16,
channels=1,
rate=44100,
input=True,
output=False,
frames_per_buffer=8000,
stream_callback=callback,
)
stream.start_stream()
source = ColumnDataSource(
dict(
samples=[x],
data=[],
)
)
plot = figure(plot_width=1200, plot_height=800)
plot.line(x="samples", y="data", source=source)
@count()
def update(counter):
print(counter)
data = que.get()
newData = dict(
samples=[np.arange(len(data))],
data=[data],
)
source.stream(newData, 4000)
curdoc().add_root(plot)
# Add a periodic callback to be run every 50 milliseconds
curdoc().add_periodic_callback(update, 50)
stream.stop_stream()
stream.close()
p.terminate()