diff --git a/.github/workflows/test.yml b/.github/workflows/test.yml index 41c71873e..106274a70 100644 --- a/.github/workflows/test.yml +++ b/.github/workflows/test.yml @@ -137,13 +137,19 @@ jobs: Scream\Install\helpers\devcon-x64.exe install Scream\Install\driver\x64\Scream.inf *Scream net start audiosrv Get-CimInstance Win32_SoundDevice | fl * + timeout-minutes: 2 - name: Sanity-check Supriya run: | - python -c "import logging, supriya; logging.getLogger('supriya').setLevel(logging.INFO); logging.basicConfig(); server = supriya.Server().boot(); server.quit(); exit()" + python -c "import logging, supriya; logging.getLogger('supriya').setLevel(logging.INFO); logging.basicConfig(); server = supriya.Server().boot(); exit()" python -c "from supriya.utils._intervals import IntervalTreeDriverEx; print(IntervalTreeDriverEx)" - name: Sanity-check Supriya SHM (Non-Windows) if: ${{ matrix.os != 'windows-latest' }} run: python -c "from supriya.contexts.shm import ServerSHM; print(ServerSHM)" + - name: Check for stray processes (Non-Windows) + if: ${{ matrix.os != 'windows-latest' }} + run: | + ! ( ps aux | grep scsynth | grep -v grep ) + ! ( ps aux | grep supernova | grep -v grep ) - name: Install Supriya test dependencies run: pip install -e .[test] - name: Install ffmpeg diff --git a/pyproject.toml b/pyproject.toml index b25363c00..8d47cb321 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -24,8 +24,7 @@ classifiers = [ "Topic :: Multimedia :: Sound/Audio :: Sound Synthesis", ] dependencies = [ - "PyYAML >= 6.0", - "platformdirs >= 3.1.0", + "platformdirs >= 3.9.1", "uqbar >= 0.6.9", ] description = "A Python API for SuperCollider" @@ -100,7 +99,7 @@ exclude_lines = [ [tool.isort] case_sensitive = true -known_third_party = ["uqbar", "yaml"] +known_third_party = ["uqbar"] profile = "black" skip = "supriya/__init__.py" diff --git a/supriya/_version.py b/supriya/_version.py index 07217b197..ff55c0227 100644 --- a/supriya/_version.py +++ b/supriya/_version.py @@ -7,5 +7,5 @@ This follows black's versioning scheme. """ -__version_info__ = (23, "6b0") +__version_info__ = (23, "7b0") __version__ = ".".join(str(x) for x in __version_info__) diff --git a/supriya/scsynth.py b/supriya/scsynth.py index ceb740656..e93b1f873 100644 --- a/supriya/scsynth.py +++ b/supriya/scsynth.py @@ -1,4 +1,5 @@ import asyncio +import atexit import enum import logging import os @@ -280,6 +281,10 @@ def _handle_line(self, line): class SyncProcessProtocol(ProcessProtocol): + def __init__(self): + super().__init__() + atexit.register(self.quit) + def boot(self, options: Options): if self.is_running: return @@ -289,6 +294,7 @@ def boot(self, options: Options): list(options), stderr=subprocess.STDOUT, stdout=subprocess.PIPE, + start_new_session=True, ) start_time = time.time() timeout = 10 diff --git a/supriya/synthdefs/synthdefs.py b/supriya/synthdefs/synthdefs.py index 441c705dd..0f8131c6f 100644 --- a/supriya/synthdefs/synthdefs.py +++ b/supriya/synthdefs/synthdefs.py @@ -6,8 +6,6 @@ import tempfile from typing import Dict, List, Optional, Sequence, Tuple, Union -import yaml - from .. import sclang from ..enums import ( BinaryOperator, @@ -248,17 +246,20 @@ def get_parameter_name(input_, output_index=0): ) ugen_dict[argument_name] = value ugens.append({ugen_name: ugen_dict or None}) - - result = { - "synthdef": { - "name": self.actual_name, - # 'hash': self.anonymous_name, - "ugens": ugens, - } - } - return yaml.dump( - result, default_flow_style=False, indent=4, sort_keys=False - ).rstrip() + result = [ + "synthdef:", + f" name: {self.actual_name}", + " ugens:", + ] + for ugen in ugens: + for ugen_name, ugen_dict in ugen.items(): + if not ugen_dict: + result.append(f" - {ugen_name}: null") + continue + result.append(f" - {ugen_name}:") + for parameter_name, parameter_value in ugen_dict.items(): + result.append(f" {parameter_name}: {parameter_value}") + return "\n".join(result) ### PRIVATE METHODS ###