2019-10-01 00:39:44 +02:00
|
|
|
from pyo import *
|
|
|
|
|
|
|
|
|
|
|
|
def list_output_devices():
|
|
|
|
pa_list_devices()
|
|
|
|
|
|
|
|
|
|
|
|
class Track:
|
|
|
|
def __init__(self, audio):
|
|
|
|
self.audio = audio
|
|
|
|
self.playing = False
|
|
|
|
|
|
|
|
def play(self):
|
|
|
|
self.audio.out()
|
|
|
|
self.playing = True
|
|
|
|
|
|
|
|
def stop(self):
|
|
|
|
self.audio.stop()
|
|
|
|
self.playing = False
|
|
|
|
|
|
|
|
def set_volume(self, volume):
|
|
|
|
self.audio.setMul(volume)
|
|
|
|
|
|
|
|
def set_frequency(self, frequency):
|
|
|
|
self.audio.setFreq(frequency)
|
|
|
|
|
|
|
|
|
|
|
|
class SoundProcessor:
|
2020-06-11 12:06:12 +02:00
|
|
|
def __init__(self, sampling_rate=44100, backend='portaudio', output=None, channels=2, discrete=False):
|
2019-10-01 00:39:44 +02:00
|
|
|
self.backend = backend
|
2019-10-03 00:35:51 +02:00
|
|
|
self.discrete = discrete
|
2020-06-11 12:06:12 +02:00
|
|
|
self.sampling_rate = sampling_rate
|
|
|
|
self.server = Server(audio=self.backend, sr=sampling_rate, jackname='theremin', winhost='theremin', nchnls=channels)
|
2019-10-01 00:39:44 +02:00
|
|
|
self.audio_output = output or pa_get_default_output()
|
|
|
|
self.server.setOutputDevice(self.audio_output)
|
|
|
|
self.tracks = []
|
|
|
|
|
|
|
|
def start(self):
|
|
|
|
self.server.boot()
|
|
|
|
self.server.start()
|
|
|
|
|
|
|
|
def shutdown(self):
|
|
|
|
self.stop()
|
|
|
|
self.server.stop()
|
|
|
|
self.server.shutdown()
|
|
|
|
|
|
|
|
def add_track(self, audio):
|
|
|
|
self.tracks.append(Track(audio))
|
|
|
|
return len(self.tracks) - 1
|
|
|
|
|
|
|
|
def remove_track(self, i):
|
|
|
|
assert 0 <= i < len(self.tracks)
|
|
|
|
return self.tracks.pop(i)
|
|
|
|
|
|
|
|
def play(self, i):
|
|
|
|
assert 0 <= i < len(self.tracks)
|
|
|
|
self.tracks[i].play()
|
|
|
|
|
|
|
|
def stop(self, i=None):
|
|
|
|
if i is not None:
|
|
|
|
assert 0 <= i < len(self.tracks)
|
|
|
|
self.tracks[i].stop()
|
|
|
|
else:
|
|
|
|
for track in self.tracks:
|
|
|
|
track.stop()
|
|
|
|
|
|
|
|
def is_playing(self, i):
|
|
|
|
assert 0 <= i < len(self.tracks)
|
|
|
|
return self.tracks[i].playing
|
|
|
|
|
|
|
|
def set_volume(self, i, volume):
|
|
|
|
assert 0 <= i < len(self.tracks)
|
|
|
|
self.tracks[i].set_volume(volume)
|
|
|
|
|
|
|
|
def set_frequency(self, i, frequency):
|
|
|
|
assert 0 <= i < len(self.tracks)
|
|
|
|
self.tracks[i].set_frequency(frequency)
|
2019-10-03 00:35:51 +02:00
|
|
|
|