From 3c828cb6692bef27f3ae2378a380cfb5966ecd6f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Tue, 1 Oct 2024 10:26:58 -0500 Subject: [PATCH 1/2] initial commit of circuitpython audio fx polyphonic --- circuitpython-audio-fx/polyphonic/T00.mp3 | Bin 0 -> 22464 bytes .../polyphonic/T01RAND0.mp3 | Bin 0 -> 10368 bytes .../polyphonic/T01RAND1.mp3 | Bin 0 -> 9936 bytes .../polyphonic/T01RAND2.mp3 | Bin 0 -> 9648 bytes .../polyphonic/T01RAND3.mp3 | Bin 0 -> 10224 bytes .../polyphonic/T01RAND4.mp3 | Bin 0 -> 9936 bytes circuitpython-audio-fx/polyphonic/T02.mp3 | Bin 0 -> 3888 bytes circuitpython-audio-fx/polyphonic/T03.mp3 | Bin 0 -> 4320 bytes .../polyphonic/T04HOLDL.mp3 | Bin 0 -> 6192 bytes .../polyphonic/T05NEXT0.mp3 | Bin 0 -> 7056 bytes .../polyphonic/T05NEXT1.mp3 | Bin 0 -> 6912 bytes .../polyphonic/T05NEXT2.mp3 | Bin 0 -> 6048 bytes .../polyphonic/T06LATCH.mp3 | Bin 0 -> 6768 bytes circuitpython-audio-fx/polyphonic/T07.mp3 | Bin 0 -> 4464 bytes circuitpython-audio-fx/polyphonic/T08.mp3 | Bin 0 -> 3744 bytes circuitpython-audio-fx/polyphonic/T09.mp3 | Bin 0 -> 4464 bytes circuitpython-audio-fx/polyphonic/T10.mp3 | Bin 0 -> 3888 bytes .../polyphonic/T11HOLDL.mp3 | Bin 0 -> 22464 bytes circuitpython-audio-fx/polyphonic/code.py | 339 ++++++++++++++++++ 19 files changed, 339 insertions(+) create mode 100644 circuitpython-audio-fx/polyphonic/T00.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T01RAND0.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T01RAND1.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T01RAND2.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T01RAND3.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T01RAND4.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T02.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T03.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T04HOLDL.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T05NEXT0.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T05NEXT1.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T05NEXT2.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T06LATCH.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T07.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T08.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T09.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T10.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/T11HOLDL.mp3 create mode 100644 circuitpython-audio-fx/polyphonic/code.py diff --git a/circuitpython-audio-fx/polyphonic/T00.mp3 b/circuitpython-audio-fx/polyphonic/T00.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c1251c01a2809ae8f9875d94c81f64fbe003fe23 GIT binary patch literal 22464 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 i*|WNs=YKTltN*VD#&gLye(MNUk2L5tnWISn literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T01RAND1.mp3 b/circuitpython-audio-fx/polyphonic/T01RAND1.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..39aff6f009baa40a8fdd389a52d8e50864f33e93 GIT binary patch literal 9936 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 Y&;{)QSmm}ZL6(tM|DiViZ@%__05h@IV*mgE literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T01RAND2.mp3 b/circuitpython-audio-fx/polyphonic/T01RAND2.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bfd682216169ffd44fc3aefe1a9cd3ce36b30c23 GIT binary patch literal 9648 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 PWF0p7-#pg;&F%jONuM@7 literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T01RAND3.mp3 b/circuitpython-audio-fx/polyphonic/T01RAND3.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..153c7629153e1156797e378b24aafbdd0dba416c GIT binary patch literal 10224 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 SoIJ{-IUe$V?5zL$C;BfxAh`(u literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T02.mp3 b/circuitpython-audio-fx/polyphonic/T02.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..5d0730c4c6495290967c5862c12cf6a9a3e82145 GIT binary patch literal 3888 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 QqYLHK6a7EW{$Jz%4eq6nGXMYp literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T03.mp3 b/circuitpython-audio-fx/polyphonic/T03.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..501ebb91205be03a15da722bb1565df99136ded8 GIT binary patch literal 4320 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 as()MmxB7QqVjFWBAaxVv|J&66J?KB|;(8_k literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T04HOLDL.mp3 b/circuitpython-audio-fx/polyphonic/T04HOLDL.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..b65ff78e64662b06a2ba3a3dedd3d3108d3cc2fe GIT binary patch literal 6192 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 literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T05NEXT0.mp3 b/circuitpython-audio-fx/polyphonic/T05NEXT0.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..da73c7173a682ea49e817475a3b37d8e605a1c6c GIT binary patch literal 7056 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 C$KSjF literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T07.mp3 b/circuitpython-audio-fx/polyphonic/T07.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..d328705664d81fa85f03608a5e0e6292347814ce GIT binary patch literal 4464 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 literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T08.mp3 b/circuitpython-audio-fx/polyphonic/T08.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..bd85b2cc3aa6a6c84c633e1e3b60f803648a4cfa GIT binary patch literal 3744 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 literal 0 HcmV?d00001 diff --git a/circuitpython-audio-fx/polyphonic/T11HOLDL.mp3 b/circuitpython-audio-fx/polyphonic/T11HOLDL.mp3 new file mode 100644 index 0000000000000000000000000000000000000000..c1251c01a2809ae8f9875d94c81f64fbe003fe23 GIT binary patch literal 22464 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", list(available_decoders)) + + @property + def playing(self): + return False if self._voice is None else self._voice.playing + + @classmethod + def matches(cls, prefix): + stem = cls.stems[0] + name_mp3 = f"{prefix}{stem}.mp3" + name_wav = f"{prefix}{stem}.wav" + return exists(name_wav) or exists(name_mp3) + + def __repr__(self): + return f"<{self.__class__.__name__} {self._filenames}{' playing' if self.playing else ''}>" + + +class NopTrigger(TriggerBase): + """Does nothing.""" + + stems = [""] + + def on_press(self): + pass + + def on_release(self): + pass + + +class BasicTrigger(TriggerBase): + """Plays a file each time the button is pressed down""" + + stems = [""] + + def on_press(self): + self.play(self._filenames[0]) + + def on_release(self): + pass + + +class HoldLoopingTrigger(TriggerBase): + """Plays a file as long as a button is held down""" + + stems = ["HOLDL"] + + def on_press(self): + self.play(self._filenames[0], loop=True) + + def on_release(self): + self.force_off() + + +class LatchingLoopTrigger(TriggerBase): + """Toggles playing each time the button is pressed""" + + stems = ["LATCH"] + + def on_press(self): + if self.playing: + self.force_off() + else: + self.play(self._filenames[0], loop=True) + + def on_release(self): + pass + + +class PlayNextTrigger(TriggerBase): + stems = [f"NEXT{i}" for i in range(10)] + + def __init__(self, prefix): + super().__init__(prefix) + self._phase = 0 + + def on_press(self): + self.play(self._filenames[self._phase]) + self._phase = (self._phase + 1) % len(self._filenames) + + def on_release(self): + pass + + +class PlayRandomTrigger(TriggerBase): + stems = [f"RAND{i}" for i in range(10)] + + def __init__(self, prefix): + super().__init__(prefix) + + def on_press(self): + self.play(random_choice(self._filenames)) + + def on_release(self): + pass + + +trigger_classes = [ + BasicTrigger, + HoldLoopingTrigger, + LatchingLoopTrigger, + PlayNextTrigger, + PlayRandomTrigger, +] + + +def make_trigger(i): + prefix = f"T{i:02d}" + + for cls in trigger_classes: + if not cls.matches(prefix): + continue + return cls(prefix) + + return NopTrigger(prefix) + + +# No matter what, at most 4 MP3 decoders +decoders = [ + audiomp3.MP3Decoder(io.BytesIO(EMPTY_MP3_BYTES)) + for _ in range(min(4, max_simultaneous_voices)) +] +print(decoders) +available_decoders = collections.deque(decoders, len(decoders)) +print(list(available_decoders)) + +keys = keypad.Keys(pads, value_when_pressed=False) + +triggers = [make_trigger(i) for i in range(len(pads))] + + +def playback_specs(sample): + return dict( + channel_count=sample.channel_count, + sample_rate=sample.sample_rate, + bits_per_sample=sample.bits_per_sample, + ) + + +def check_match_make_mixer(audiodev): + all_filenames = [] + for trigger in triggers: + all_filenames.extend(trigger._filenames) + + if not all_filenames: + raise RuntimeError("*** NO AUDIO FILES FOUND ***") + + if max_simultaneous_voices == 1: + return [audiodev] + + first_trigger = triggers[0] + + mixer_buffer_size = (1152 * 4) * 4 + + specs = None + for filename in all_filenames: + sample = first_trigger._get_sample(filename) + new_specs = playback_specs(sample) + if specs is None: + specs = new_specs + else: + if specs != new_specs: + print("*** Audio file specs don't match ***") + print("{all_filenames[0]}: {specs}") + print("{filename}: {specs}") + raise RuntimeError("*** WITH POLYPHONY, ALL MUST MATCH ***") + first_trigger.force_off() + + print(f"audio specs: {specs}") + samples_signed = specs["bits_per_sample"] == 16 + mixer = audiomixer.Mixer( + voice_count=max_simultaneous_voices, + buffer_size=mixer_buffer_size, + samples_signed=samples_signed, + **specs, + ) + audiodev.play(mixer) + + return list(mixer.voice) + + +print(triggers) +print(list(available_decoders)) + +reversed_triggers = list(reversed(triggers)) + +voices = check_match_make_mixer(audiodev) +print(list(available_decoders)) +available_voices = collections.deque(voices, len(voices)) + +while True: + if e := keys.events.get(): + print("event", e) + print("available decoders", *(id(i) for i in available_decoders)) + print("available voices", *(id(i) for i in available_voices)) + trigger = triggers[e.key_number] + if e.pressed: + trigger.on_press() + else: + trigger.on_release() + print(triggers) From cd231d5aede0f885b91df8c25641a5c36605892f Mon Sep 17 00:00:00 2001 From: Jeff Epler Date: Fri, 4 Oct 2024 08:01:14 -0500 Subject: [PATCH 2/2] resolve pylint diagnostics --- circuitpython-audio-fx/polyphonic/code.py | 67 ++++++++++------------- 1 file changed, 30 insertions(+), 37 deletions(-) diff --git a/circuitpython-audio-fx/polyphonic/code.py b/circuitpython-audio-fx/polyphonic/code.py index 664dcdf5c..6426289bb 100644 --- a/circuitpython-audio-fx/polyphonic/code.py +++ b/circuitpython-audio-fx/polyphonic/code.py @@ -9,6 +9,7 @@ import board import keypad import audiobusio +import audiocore import audiomp3 import audiomixer @@ -38,11 +39,6 @@ # without "opening" a "file"! EMPTY_MP3_BYTES = b"\xff\xe3" -# THis is actually a valid but very short mp3 file, use it in case the core -# changes and becomes more picky -# EMPTY_MP3_BYTES = b'\xff\xe3\x18\xc4\x00\x00\x00\x03H\x00\x00\x00\x00CIRCUITPYUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\xff\xe3\x18\xc4;\x00\x00\x03H\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU\xff\xe3\x18\xc4v\x00\x00\x03H\x00\x00\x00\x00UUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUUU' - - def exists(p): try: os.stat(p) @@ -60,10 +56,10 @@ def random_choice(seq): # stop any audio (it's already stopped) but it DOES mark the voice & decoder as # available. Otherwise, we might needlessly stop some other sample. def free_stopped_channels(): - for trigger in triggers: - if trigger._voice and not trigger.playing: + for i in triggers: + if i.voice and not i.playing: print("fst") - trigger.force_off() + i.force_off() # iterating on reversed triggers gives priority to **lower** numbered triggers @@ -71,8 +67,8 @@ def ensure_available_decoder(): if available_decoders: return available_decoders.popleft() - for trigger in reversed_triggers: - trigger.force_off() + for i in reversed_triggers: + i.force_off() if available_decoders: break @@ -83,8 +79,8 @@ def ensure_available_voice(): if available_voices: return available_voices.popleft() - for trigger in reversed_triggers: - trigger.force_off() + for i in reversed_triggers: + i.force_off() if available_voices: break @@ -94,8 +90,8 @@ def ensure_available_voice(): class TriggerBase: def __init__(self, prefix): self._decoder = None - self._voice = None - self._filenames = list(self._gather_filenames(prefix)) + self.voice = None + self.filenames = list(self._gather_filenames(prefix)) def _gather_filenames(self, prefix): for stem in self.stems: @@ -108,7 +104,7 @@ def _gather_filenames(self, prefix): yield name_wav continue - def _get_sample(self, path): + def get_sample(self, path): if path.endswith(".mp3"): self._decoder = ensure_available_decoder() self._decoder.open(path) @@ -119,16 +115,16 @@ def _get_sample(self, path): def play(self, path, loop=False): self.force_off() free_stopped_channels() - sample = self._get_sample(path) - self._voice = ensure_available_voice() - self._voice.play(sample, loop=loop) + sample = self.get_sample(path) + self.voice = ensure_available_voice() + self.voice.play(sample, loop=loop) def force_off(self): print("force off", self) - voice = self._voice + voice = self.voice if voice is not None: print(f"return voice {id(voice)}") - self._voice = None + self.voice = None voice.stop() available_voices.append(voice) decoder = self._decoder @@ -141,7 +137,7 @@ def force_off(self): @property def playing(self): - return False if self._voice is None else self._voice.playing + return False if self.voice is None else self.voice.playing @classmethod def matches(cls, prefix): @@ -151,7 +147,7 @@ def matches(cls, prefix): return exists(name_wav) or exists(name_mp3) def __repr__(self): - return f"<{self.__class__.__name__} {self._filenames}{' playing' if self.playing else ''}>" + return f"<{self.__class__.__name__} {self.filenames}{' playing' if self.playing else ''}>" class NopTrigger(TriggerBase): @@ -172,7 +168,7 @@ class BasicTrigger(TriggerBase): stems = [""] def on_press(self): - self.play(self._filenames[0]) + self.play(self.filenames[0]) def on_release(self): pass @@ -184,7 +180,7 @@ class HoldLoopingTrigger(TriggerBase): stems = ["HOLDL"] def on_press(self): - self.play(self._filenames[0], loop=True) + self.play(self.filenames[0], loop=True) def on_release(self): self.force_off() @@ -199,7 +195,7 @@ def on_press(self): if self.playing: self.force_off() else: - self.play(self._filenames[0], loop=True) + self.play(self.filenames[0], loop=True) def on_release(self): pass @@ -213,8 +209,8 @@ def __init__(self, prefix): self._phase = 0 def on_press(self): - self.play(self._filenames[self._phase]) - self._phase = (self._phase + 1) % len(self._filenames) + self.play(self.filenames[self._phase]) + self._phase = (self._phase + 1) % len(self.filenames) def on_release(self): pass @@ -223,11 +219,8 @@ def on_release(self): class PlayRandomTrigger(TriggerBase): stems = [f"RAND{i}" for i in range(10)] - def __init__(self, prefix): - super().__init__(prefix) - def on_press(self): - self.play(random_choice(self._filenames)) + self.play(random_choice(self.filenames)) def on_release(self): pass @@ -275,16 +268,16 @@ def playback_specs(sample): ) -def check_match_make_mixer(audiodev): +def check_match_make_mixer(dev): all_filenames = [] - for trigger in triggers: - all_filenames.extend(trigger._filenames) + for i in triggers: + all_filenames.extend(i.filenames) if not all_filenames: raise RuntimeError("*** NO AUDIO FILES FOUND ***") if max_simultaneous_voices == 1: - return [audiodev] + return [dev] first_trigger = triggers[0] @@ -292,7 +285,7 @@ def check_match_make_mixer(audiodev): specs = None for filename in all_filenames: - sample = first_trigger._get_sample(filename) + sample = first_trigger.get_sample(filename) new_specs = playback_specs(sample) if specs is None: specs = new_specs @@ -312,7 +305,7 @@ def check_match_make_mixer(audiodev): samples_signed=samples_signed, **specs, ) - audiodev.play(mixer) + dev.play(mixer) return list(mixer.voice)