Created
November 10, 2019 23:37
-
-
Save lyleaf/7e641b10ef4fb5510e7714d1d5d135d6 to your computer and use it in GitHub Desktop.
stream_beat_v2.py
This file contains hidden or bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
import pyaudio | |
import librosa | |
import numpy as np | |
import requests | |
from pyo import * | |
import time | |
from numpy_ringbuffer import RingBuffer | |
pa = pyaudio.PyAudio() | |
device = 'Pixel USB-C earbuds' | |
dev_list, dev_index = pa_get_input_devices() | |
# ['Pixel USB-C earbuds', 'MacBook Pro Microphone'] | |
print(dev_list) | |
print(dev_index) | |
dev = dev_index[dev_list.index(device)] | |
print('Device index:', dev) | |
# ['DisplayPort', 'Pixel USB-C earbuds', 'MacBook Pro Speakers'] | |
# [0, 2, 4] | |
print(pa.get_device_info_by_index(dev)) | |
# {'index': 1, 'structVersion': 2, | |
# 'name': 'Pixel USB-C earbuds', 'hostApi': 0, | |
# 'maxInputChannels': 1, 'maxOutputChannels': 0, | |
# 'defaultLowInputLatency': 0.004583333333333333, | |
# 'defaultLowOutputLatency': 0.01, | |
# 'defaultHighInputLatency': 0.0139 | |
# 16666666666667, | |
# 'defaultHighOutputLatency': 0.1, | |
# 'defaultSampleRate': 48000.0} | |
rate = 22050 | |
chunk = 3*rate | |
sample_format = pyaudio.paFloat32 # 16 bits per sample | |
sample_width = pa.get_sample_size(sample_format) | |
print(sample_width) | |
def callback(in_data, frame_count, time_info, flag): | |
global rate | |
audio_data = np.frombuffer(in_data, dtype=np.float32) | |
print(type(audio_data)) | |
print(audio_data.dtype) #float32 | |
print(audio_data.shape) #66150 | |
#ringBuffer.extend(audio_data) | |
#y = audio_data | |
#onset_env = librosa.onset.onset_strength(y, sr=rate) | |
#tempo = librosa.beat.tempo(onset_envelope=onset_env, sr=rate) | |
tempo = 30 | |
#y = librosa.util.buf_to_float(in_data, n_bytes=sample_width, dtype=np.float32) | |
#print(y) | |
print(audio_data) | |
audio_data, rate = librosa.load('58bpm.wav') | |
tempo, beat_frames = librosa.beat.beat_track(y=audio_data, sr=rate) | |
time.sleep(3) | |
print('Estimated tempo: {} beats per minute'.format(tempo)) | |
return (None, pyaudio.paContinue) | |
stream = pa.open(format = pyaudio.paFloat32, | |
channels = 1, | |
rate = rate, | |
output = False, | |
input = True, | |
input_device_index = dev, | |
output_device_index = dev, | |
frames_per_buffer=chunk, | |
stream_callback = callback) | |
# start the stream | |
stream.start_stream() | |
while stream.is_active(): | |
time.sleep(3) | |
stream.close() | |
pa.terminate() | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment