diff --git a/src/atonatui/audio_mixin.py b/src/atonatui/audio_mixin.py index d237179..eb29ee5 100644 --- a/src/atonatui/audio_mixin.py +++ b/src/atonatui/audio_mixin.py @@ -1,8 +1,13 @@ import time import os from importlib import resources +import sys -import fluidsynth +try: + import fluidsynth +except ImportError: + print("Error: The 'pyfluidsynth' python package is missing.", file=sys.stderr) + sys.exit(1) from atonatui.constants import NOTE_TO_MIDI, GENERAL_MIDI_PROGRAMS, SOUNDFONTS from atonatui.settings_mixin import Settings @@ -10,8 +15,24 @@ from atonatui.settings_mixin import Settings class AudioMixin: def __init__(self): - self.fs = fluidsynth.Synth() - self.fs.start(driver="alsa" if os.name != "nt" else "dsound") + try: + self.fs = fluidsynth.Synth() + except OSError: + print("\n[!] Error: FluidSynth system library not found.", file=sys.stderr) + print("Please install the system fluidysnth package first:", file=sys.stderr) + print(" - Arch Linux: sudo pacman -S fluidsynth", file=sys.stderr) + print(" - Ubuntu/Debian: sudo apt install fluidsynth\n", file=sys.stderr) + print(" - mac: brew install fluidsynth\n", file=sys.stderr) + sys.exit(1) + + if sys.platform == "darkwin" or sys.platform == "darwin": + audio_driver = "coreaudio" + elif os.name == "nt": + audio_driver = "dsound" + else: + audio_driver = "alsa" + + self.fs.start(driver=audio_driver) self.sf_id = None self.update_sf(SOUNDFONTS[Settings.INSTRUMENT])