37 lines
866 B
Python
37 lines
866 B
Python
class SoundEvent:
|
|
__slots__ = ("name", "x", "frame")
|
|
|
|
def __init__(self, name, x, frame):
|
|
self.name = name
|
|
self.x = x
|
|
self.frame = frame
|
|
|
|
|
|
class AudioBus:
|
|
def __init__(self, sink=None, historyCap=64):
|
|
self.sink = sink
|
|
self.events = []
|
|
self.historyCap = historyCap
|
|
self.frame = 0
|
|
self.totalEmitted = 0
|
|
|
|
def setSink(self, sink):
|
|
self.sink = sink
|
|
|
|
def tick(self):
|
|
self.frame += 1
|
|
|
|
def play(self, name, x=None):
|
|
event = SoundEvent(name, x, self.frame)
|
|
self.events.append(event)
|
|
if len(self.events) > self.historyCap:
|
|
self.events.pop(0)
|
|
self.totalEmitted += 1
|
|
if self.sink is not None:
|
|
self.sink(event)
|
|
|
|
def drain(self):
|
|
drained = self.events
|
|
self.events = []
|
|
return drained
|