spotify / pedalboard

🎛 🔊 A Python library for audio.
https://spotify.github.io/pedalboard
GNU General Public License v3.0
5.13k stars 259 forks source link

All the tests involving CHOWTapeModel.component fail #32

Closed LucaMarconato closed 2 years ago

LucaMarconato commented 2 years ago

I have create a conda environment, installed pybind11 and tox via conda and run tox. But all the tests involving CHOWTapeModel.component fail.

Some more details (please tell me if you want more information):

Any idea?

psobot commented 2 years ago

Hi @LucaMarconato! I do indeed more information - what errors do the tests fail with? Any useful stack traces or error messages?

psobot commented 2 years ago

Hi again @LucaMarconato - just an FYI that I'm going to close this in a week if it's no longer an issue, as I don't really have any information to go off of (and I've been unable to reproduce the issue).

LucaMarconato commented 2 years ago

Hi, sorry for the delay in answering, here is my full output from tox, do you need any extra information, like the full conda environment info?

(39) macbook@MacBook-Pro-di-macbook pedalboard % tox
py recreate: /Users/macbook/programming/python/pedalboard/.tox/py
py installdeps: -r/Users/macbook/programming/python/pedalboard/dev-requirements.txt
py installed: absl-py==0.14.1,appdirs==1.4.4,appnope==0.1.2,astunparse==1.6.3,attrs==21.2.0,backcall==0.2.0,black==21.7b0,bumpversion==0.5.3,cachetools==4.2.4,certifi==2021.10.8,charset-normalizer==2.0.7,click==8.0.3,colorama==0.4.4,coverage==5.0.2,decorator==5.1.0,flake8==4.0.1,flatbuffers==1.12,gast==0.4.0,google-auth==1.35.0,google-auth-oauthlib==0.4.6,google-pasta==0.2.0,grpcio==1.34.1,h5py==3.1.0,idna==3.2,interrogate==1.5.0,ipdb==0.13.9,ipython==7.28.0,jedi==0.18.0,Jinja2==3.0.2,keras-nightly==2.5.0.dev2021032900,Keras-Preprocessing==1.1.2,livereload==2.6.3,Markdown==3.3.4,MarkupSafe==2.0.1,matplotlib-inline==0.1.3,mccabe==0.6.1,mkdocs==1.0.4,more-itertools==8.10.0,mypy-extensions==0.4.3,numpy==1.19.5,oauthlib==3.1.1,opt-einsum==3.3.0,packaging==21.0,parso==0.8.2,pathspec==0.9.0,-e git+git@github.com:spotify/pedalboard.git@96f282c68b6f1ac3e43a7f7c83523d9e957a8c37#egg=pedalboard,pexpect==4.8.0,pickleshare==0.7.5,pluggy==0.13.1,prompt-toolkit==3.0.20,protobuf==3.18.1,ptyprocess==0.7.0,py==1.10.0,pyasn1==0.4.8,pyasn1-modules==0.2.8,pybind11==2.8.0,pycodestyle==2.8.0,pyflakes==2.4.0,Pygments==2.10.0,pyparsing==2.4.7,pytest==5.3.2,pytest-cov==2.8.1,pytest-mock==3.3.1,PyYAML==5.4.1,regex==2021.10.8,requests==2.26.0,requests-oauthlib==1.3.0,rsa==4.7.2,six==1.15.0,sox==1.4.1,tabulate==0.8.9,tensorboard==2.6.0,tensorboard-data-server==0.6.1,tensorboard-plugin-wit==1.8.0,tensorflow==2.5.0,tensorflow-estimator==2.5.0,termcolor==1.1.0,toml==0.10.2,tomli==1.2.1,tornado==6.1,traitlets==5.1.0,typing-extensions==3.7.4.3,urllib3==1.26.7,wcwidth==0.2.5,Werkzeug==2.0.2,wrapt==1.12.1
py run-test-pre: PYTHONHASHSEED='256814189'
py run-test: commands[0] | coverage run -m pytest
========================================================= test session starts =========================================================
platform darwin -- Python 3.9.7, pytest-5.3.2, py-1.10.0, pluggy-0.13.1 -- /Users/macbook/programming/python/pedalboard/.tox/py/bin/python
cachedir: .tox/py/.pytest_cache
rootdir: /Users/macbook/programming/python/pedalboard, inifile: tox.ini, testpaths: tests
plugins: mock-3.3.1, cov-2.8.1
collected 265 items                                                                                                                   

tests/test_benchmark.py::test_pysox_performance_difference SKIPPED                                                              [  0%]
tests/test_external_plugins.py::test_at_least_one_plugin_is_available_for_testing PASSED                                        [  0%]
tests/test_external_plugins.py::test_at_least_one_parameter[CHOWTapeModel.vst3] PASSED                                          [  1%]
tests/test_external_plugins.py::test_at_least_one_parameter[CHOWTapeModel.component] FAILED                                     [  1%]
tests/test_external_plugins.py::test_initial_parameters[CHOWTapeModel.vst3] PASSED                                              [  1%]
tests/test_external_plugins.py::test_initial_parameters[CHOWTapeModel.component] FAILED                                         [  2%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-input_gain] PASSED                         [  2%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-output_gain] PASSED                        [  3%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-dry_wet] PASSED                            [  3%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-preset] PASSED                             [  3%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tone_bass] PASSED                          [  4%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tone_treble] PASSED                        [  4%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tape_drive] PASSED                         [  4%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tape_saturation] PASSED                    [  5%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tape_bias] PASSED                          [  5%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-oversampling] PASSED                       [  6%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tape_speed] PASSED                         [  6%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tape_spacing] PASSED                       [  6%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-tape_thickness] PASSED                     [  7%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-playhead_gap] PASSED                       [  7%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-azimuth] PASSED                            [  7%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-flutter_rate] PASSED                       [  8%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-flutter_depth] PASSED                      [  8%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-wow_rate] PASSED                           [  9%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-wow_depth] PASSED                          [  9%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-wow_variance] PASSED                       [  9%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-wow_drift] PASSED                          [ 10%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-degrade_depth] PASSED                      [ 10%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-degrade_amount] PASSED                     [ 10%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-degrade_variance] PASSED                   [ 11%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-degrade_envelope] PASSED                   [ 11%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-chew_depth] PASSED                         [ 12%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-chew_freq] PASSED                          [ 12%]
tests/test_external_plugins.py::test_initial_parameter_validation[CHOWTapeModel.vst3-chew_variance] PASSED                      [ 12%]
tests/test_external_plugins.py::test_initial_parameter_validation_missing[CHOWTapeModel.vst3] PASSED                            [ 13%]
tests/test_external_plugins.py::test_initial_parameter_validation_missing[CHOWTapeModel.component] FAILED                       [ 13%]
tests/test_external_plugins.py::test_import_error_on_missing_path[__init__] PASSED                                              [ 13%]
tests/test_external_plugins.py::test_import_error_on_missing_path[VST3Plugin] PASSED                                            [ 14%]
tests/test_external_plugins.py::test_import_error_on_missing_path[AudioUnitPlugin] PASSED                                       [ 14%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[1-48000-CHOWTapeModel.vst3] PASSED                   [ 15%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[1-48000-CHOWTapeModel.component] FAILED              [ 15%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[2-48000-CHOWTapeModel.vst3] PASSED                   [ 15%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[2-48000-CHOWTapeModel.component] FAILED              [ 16%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[1-44100-CHOWTapeModel.vst3] PASSED                   [ 16%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[1-44100-CHOWTapeModel.component] FAILED              [ 16%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[2-44100-CHOWTapeModel.vst3] PASSED                   [ 17%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[2-44100-CHOWTapeModel.component] FAILED              [ 17%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[1-22050-CHOWTapeModel.vst3] PASSED                   [ 18%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[1-22050-CHOWTapeModel.component] FAILED              [ 18%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[2-22050-CHOWTapeModel.vst3] PASSED                   [ 18%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count[2-22050-CHOWTapeModel.component] FAILED              [ 19%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count_without_reloading[CHOWTapeModel.vst3] PASSED         [ 19%]
tests/test_external_plugins.py::test_plugin_accepts_variable_channel_count_without_reloading[CHOWTapeModel.component] FAILED    [ 20%]
tests/test_external_plugins.py::test_all_parameters_are_accessible_as_properties[CHOWTapeModel.vst3] PASSED                     [ 20%]
tests/test_external_plugins.py::test_all_parameters_are_accessible_as_properties[CHOWTapeModel.component] FAILED                [ 20%]
tests/test_external_plugins.py::test_parameters_cant_be_assigned_to_directly[CHOWTapeModel.vst3] PASSED                         [ 21%]
tests/test_external_plugins.py::test_parameters_cant_be_assigned_to_directly[CHOWTapeModel.component] FAILED                    [ 21%]
tests/test_external_plugins.py::test_all_parameters_have_accessors[CHOWTapeModel.vst3] PASSED                                   [ 21%]
tests/test_external_plugins.py::test_all_parameters_have_accessors[CHOWTapeModel.component] FAILED                              [ 22%]
tests/test_external_plugins.py::test_attributes_proxy[CHOWTapeModel.vst3] PASSED                                                [ 22%]
tests/test_external_plugins.py::test_attributes_proxy[CHOWTapeModel.component] FAILED                                           [ 23%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-input_filters_on_off] PASSED                            [ 23%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-input_cut_makeup] PASSED                                [ 23%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-tone_on_off] PASSED                                     [ 24%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-tape_on_off] PASSED                                     [ 24%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-loss_on_off] PASSED                                     [ 24%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-wow_flutter_on_off] PASSED                              [ 25%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-degrade_point1x] PASSED                                 [ 25%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-degrade_on_off] PASSED                                  [ 26%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-chew_on_off] PASSED                                     [ 26%]
tests/test_external_plugins.py::test_bool_parameters[CHOWTapeModel.vst3-bypass] PASSED                                          [ 26%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-input_filters_on_off] PASSED                   [ 27%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-input_cut_makeup] PASSED                       [ 27%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-tone_on_off] PASSED                            [ 27%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-tape_on_off] PASSED                            [ 28%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-loss_on_off] PASSED                            [ 28%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-wow_flutter_on_off] PASSED                     [ 29%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-degrade_point1x] PASSED                        [ 29%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-degrade_on_off] PASSED                         [ 29%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-chew_on_off] PASSED                            [ 30%]
tests/test_external_plugins.py::test_bool_parameter_valdation[CHOWTapeModel.vst3-bypass] PASSED                                 [ 30%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-input_gain] PASSED                                     [ 30%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-output_gain] PASSED                                    [ 31%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-dry_wet] PASSED                                        [ 31%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-preset] PASSED                                         [ 32%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tone_bass] PASSED                                      [ 32%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tone_treble] PASSED                                    [ 32%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tape_drive] PASSED                                     [ 33%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tape_saturation] PASSED                                [ 33%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tape_bias] PASSED                                      [ 33%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-oversampling] PASSED                                   [ 34%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tape_speed] PASSED                                     [ 34%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tape_spacing] PASSED                                   [ 35%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-tape_thickness] PASSED                                 [ 35%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-playhead_gap] PASSED                                   [ 35%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-azimuth] PASSED                                        [ 36%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-flutter_rate] PASSED                                   [ 36%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-flutter_depth] PASSED                                  [ 36%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-wow_rate] PASSED                                       [ 37%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-wow_depth] PASSED                                      [ 37%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-wow_variance] PASSED                                   [ 38%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-wow_drift] PASSED                                      [ 38%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-degrade_depth] PASSED                                  [ 38%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-degrade_amount] PASSED                                 [ 39%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-degrade_variance] PASSED                               [ 39%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-degrade_envelope] PASSED                               [ 40%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-chew_depth] PASSED                                     [ 40%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-chew_freq] PASSED                                      [ 40%]
tests/test_external_plugins.py::test_float_parameters[CHOWTapeModel.vst3-chew_variance] PASSED                                  [ 41%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-input_gain] PASSED                            [ 41%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-output_gain] PASSED                           [ 41%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-dry_wet] PASSED                               [ 42%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-preset] PASSED                                [ 42%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tone_bass] PASSED                             [ 43%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tone_treble] PASSED                           [ 43%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tape_drive] PASSED                            [ 43%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tape_saturation] PASSED                       [ 44%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tape_bias] PASSED                             [ 44%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-oversampling] PASSED                          [ 44%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tape_speed] PASSED                            [ 45%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tape_spacing] PASSED                          [ 45%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-tape_thickness] PASSED                        [ 46%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-playhead_gap] PASSED                          [ 46%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-azimuth] PASSED                               [ 46%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-flutter_rate] PASSED                          [ 47%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-flutter_depth] PASSED                         [ 47%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-wow_rate] PASSED                              [ 47%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-wow_depth] PASSED                             [ 48%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-wow_variance] PASSED                          [ 48%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-wow_drift] PASSED                             [ 49%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-degrade_depth] PASSED                         [ 49%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-degrade_amount] PASSED                        [ 49%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-degrade_variance] PASSED                      [ 50%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-degrade_envelope] PASSED                      [ 50%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-chew_depth] PASSED                            [ 50%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-chew_freq] PASSED                             [ 51%]
tests/test_external_plugins.py::test_float_parameter_valdation[CHOWTapeModel.vst3-chew_variance] PASSED                         [ 51%]
tests/test_external_plugins.py::test_str_parameters[CHOWTapeModel.vst3-input_low_cut] PASSED                                    [ 52%]
tests/test_external_plugins.py::test_str_parameters[CHOWTapeModel.vst3-input_high_cut] PASSED                                   [ 52%]
tests/test_external_plugins.py::test_str_parameters[CHOWTapeModel.vst3-tone_transition_frequency] PASSED                        [ 52%]
tests/test_external_plugins.py::test_str_parameters[CHOWTapeModel.vst3-tape_mode] PASSED                                        [ 53%]
tests/test_external_plugins.py::test_str_parameters[CHOWTapeModel.vst3-mix_group] PASSED                                        [ 53%]
tests/test_external_plugins.py::test_str_parameters[CHOWTapeModel.vst3-program] PASSED                                          [ 53%]
tests/test_external_plugins.py::test_string_parameter_valdation[CHOWTapeModel.vst3-input_low_cut] PASSED                        [ 54%]
tests/test_external_plugins.py::test_string_parameter_valdation[CHOWTapeModel.vst3-input_high_cut] PASSED                       [ 54%]
tests/test_external_plugins.py::test_string_parameter_valdation[CHOWTapeModel.vst3-tone_transition_frequency] PASSED            [ 55%]
tests/test_external_plugins.py::test_string_parameter_valdation[CHOWTapeModel.vst3-tape_mode] PASSED                            [ 55%]
tests/test_external_plugins.py::test_string_parameter_valdation[CHOWTapeModel.vst3-mix_group] PASSED                            [ 55%]
tests/test_external_plugins.py::test_string_parameter_valdation[CHOWTapeModel.vst3-program] PASSED                              [ 56%]
tests/test_external_plugins.py::test_plugin_parameters_persist_between_calls[CHOWTapeModel.vst3] PASSED                         [ 56%]
tests/test_external_plugins.py::test_plugin_parameters_persist_between_calls[CHOWTapeModel.component] FAILED                    [ 56%]
tests/test_external_plugins.py::test_plugin_state_cleared_between_invocations_by_default[CHOWTapeModel.vst3] PASSED             [ 57%]
tests/test_external_plugins.py::test_plugin_state_cleared_between_invocations_by_default[CHOWTapeModel.component] FAILED        [ 57%]
tests/test_external_plugins.py::test_plugin_state_not_cleared_between_invocations_if_reset_is_false[CHOWTapeModel.vst3] PASSED  [ 58%]
tests/test_external_plugins.py::test_plugin_state_not_cleared_between_invocations_if_reset_is_false[CHOWTapeModel.component] FAILED [ 58%]
tests/test_external_plugins.py::test_explicit_reset[CHOWTapeModel.vst3] PASSED                                                  [ 58%]
tests/test_external_plugins.py::test_explicit_reset[CHOWTapeModel.component] FAILED                                             [ 59%]
tests/test_external_plugins.py::test_explicit_reset_in_pedalboard[CHOWTapeModel.vst3] PASSED                                    [ 59%]
tests/test_external_plugins.py::test_explicit_reset_in_pedalboard[CHOWTapeModel.component] FAILED                               [ 60%]
tests/test_external_plugins.py::test_wrapped_bool[True] PASSED                                                                  [ 60%]
tests/test_external_plugins.py::test_wrapped_bool[False] PASSED                                                                 [ 60%]
tests/test_external_plugins.py::test_wrapped_bool_requires_bool PASSED                                                          [ 61%]
tests/test_filters.py::test_filter_attenutation[22050-440-HighpassFilter] PASSED                                                [ 61%]
tests/test_filters.py::test_filter_attenutation[22050-440-LowpassFilter] PASSED                                                 [ 61%]
tests/test_filters.py::test_filter_attenutation[22050-880-HighpassFilter] PASSED                                                [ 62%]
tests/test_filters.py::test_filter_attenutation[22050-880-LowpassFilter] PASSED                                                 [ 62%]
tests/test_filters.py::test_filter_attenutation[44100-440-HighpassFilter] PASSED                                                [ 63%]
tests/test_filters.py::test_filter_attenutation[44100-440-LowpassFilter] PASSED                                                 [ 63%]
tests/test_filters.py::test_filter_attenutation[44100-880-HighpassFilter] PASSED                                                [ 63%]
tests/test_filters.py::test_filter_attenutation[44100-880-LowpassFilter] PASSED                                                 [ 64%]
tests/test_filters.py::test_filter_attenutation[48000-440-HighpassFilter] PASSED                                                [ 64%]
tests/test_filters.py::test_filter_attenutation[48000-440-LowpassFilter] PASSED                                                 [ 64%]
tests/test_filters.py::test_filter_attenutation[48000-880-HighpassFilter] PASSED                                                [ 65%]
tests/test_filters.py::test_filter_attenutation[48000-880-LowpassFilter] PASSED                                                 [ 65%]
tests/test_filters.py::test_lowpass_slope[22050-880-440] PASSED                                                                 [ 66%]
tests/test_filters.py::test_lowpass_slope[22050-880-880] PASSED                                                                 [ 66%]
tests/test_filters.py::test_lowpass_slope[22050-1760-440] PASSED                                                                [ 66%]
tests/test_filters.py::test_lowpass_slope[22050-1760-880] PASSED                                                                [ 67%]
tests/test_filters.py::test_lowpass_slope[44100-880-440] PASSED                                                                 [ 67%]
tests/test_filters.py::test_lowpass_slope[44100-880-880] PASSED                                                                 [ 67%]
tests/test_filters.py::test_lowpass_slope[44100-1760-440] PASSED                                                                [ 68%]
tests/test_filters.py::test_lowpass_slope[44100-1760-880] PASSED                                                                [ 68%]
tests/test_filters.py::test_lowpass_slope[48000-880-440] PASSED                                                                 [ 69%]
tests/test_filters.py::test_lowpass_slope[48000-880-880] PASSED                                                                 [ 69%]
tests/test_filters.py::test_lowpass_slope[48000-1760-440] PASSED                                                                [ 69%]
tests/test_filters.py::test_lowpass_slope[48000-1760-880] PASSED                                                                [ 70%]
tests/test_locking.py::test_multiple_threads_using_same_plugin_instances[2] PASSED                                              [ 70%]
tests/test_locking.py::test_multiple_threads_using_same_plugin_instances[10] PASSED                                             [ 70%]
tests/test_locking.py::test_multiple_threads_using_same_plugin_instances[20] PASSED                                             [ 71%]
tests/test_memory_leaks.py::test_plugin_can_be_garbage_collected[CHOWTapeModel.vst3] PASSED                                     [ 71%]
tests/test_memory_leaks.py::test_plugin_can_be_garbage_collected[CHOWTapeModel.component] FAILED                                [ 72%]
tests/test_native_module.py::test_no_transforms[shape0] PASSED                                                                  [ 72%]
tests/test_native_module.py::test_no_transforms[shape1] PASSED                                                                  [ 72%]
tests/test_native_module.py::test_no_transforms[shape2] PASSED                                                                  [ 73%]
tests/test_native_module.py::test_no_transforms[shape3] PASSED                                                                  [ 73%]
tests/test_native_module.py::test_no_transforms[shape4] PASSED                                                                  [ 73%]
tests/test_native_module.py::test_noise_gain[shape0] PASSED                                                                     [ 74%]
tests/test_native_module.py::test_noise_gain[shape1] PASSED                                                                     [ 74%]
tests/test_native_module.py::test_noise_gain[shape2] PASSED                                                                     [ 75%]
tests/test_native_module.py::test_noise_gain[shape3] PASSED                                                                     [ 75%]
tests/test_native_module.py::test_noise_gain[shape4] PASSED                                                                     [ 75%]
tests/test_native_module.py::test_throw_on_invalid_compressor_ratio PASSED                                                      [ 76%]
tests/test_native_module.py::test_convolution_file_exists PASSED                                                                [ 76%]
tests/test_native_module.py::test_convolution_works PASSED                                                                      [ 76%]
tests/test_native_module.py::test_throw_on_inaccessible_convolution_file PASSED                                                 [ 77%]
tests/test_native_module.py::test_distortion[shape0--12] PASSED                                                                 [ 77%]
tests/test_native_module.py::test_distortion[shape0--6] PASSED                                                                  [ 78%]
tests/test_native_module.py::test_distortion[shape0-0] PASSED                                                                   [ 78%]
tests/test_native_module.py::test_distortion[shape0-1.1] PASSED                                                                 [ 78%]
tests/test_native_module.py::test_distortion[shape0-6] PASSED                                                                   [ 79%]
tests/test_native_module.py::test_distortion[shape0-12] PASSED                                                                  [ 79%]
tests/test_native_module.py::test_distortion[shape0-24] PASSED                                                                  [ 80%]
tests/test_native_module.py::test_distortion[shape0-48] PASSED                                                                  [ 80%]
tests/test_native_module.py::test_distortion[shape0-96] PASSED                                                                  [ 80%]
tests/test_native_module.py::test_distortion[shape1--12] PASSED                                                                 [ 81%]
tests/test_native_module.py::test_distortion[shape1--6] PASSED                                                                  [ 81%]
tests/test_native_module.py::test_distortion[shape1-0] PASSED                                                                   [ 81%]
tests/test_native_module.py::test_distortion[shape1-1.1] PASSED                                                                 [ 82%]
tests/test_native_module.py::test_distortion[shape1-6] PASSED                                                                   [ 82%]
tests/test_native_module.py::test_distortion[shape1-12] PASSED                                                                  [ 83%]
tests/test_native_module.py::test_distortion[shape1-24] PASSED                                                                  [ 83%]
tests/test_native_module.py::test_distortion[shape1-48] PASSED                                                                  [ 83%]
tests/test_native_module.py::test_distortion[shape1-96] PASSED                                                                  [ 84%]
tests/test_native_module.py::test_distortion[shape2--12] PASSED                                                                 [ 84%]
tests/test_native_module.py::test_distortion[shape2--6] PASSED                                                                  [ 84%]
tests/test_native_module.py::test_distortion[shape2-0] PASSED                                                                   [ 85%]
tests/test_native_module.py::test_distortion[shape2-1.1] PASSED                                                                 [ 85%]
tests/test_native_module.py::test_distortion[shape2-6] PASSED                                                                   [ 86%]
tests/test_native_module.py::test_distortion[shape2-12] PASSED                                                                  [ 86%]
tests/test_native_module.py::test_distortion[shape2-24] PASSED                                                                  [ 86%]
tests/test_native_module.py::test_distortion[shape2-48] PASSED                                                                  [ 87%]
tests/test_native_module.py::test_distortion[shape2-96] PASSED                                                                  [ 87%]
tests/test_native_module.py::test_distortion[shape3--12] PASSED                                                                 [ 87%]
tests/test_native_module.py::test_distortion[shape3--6] PASSED                                                                  [ 88%]
tests/test_native_module.py::test_distortion[shape3-0] PASSED                                                                   [ 88%]
tests/test_native_module.py::test_distortion[shape3-1.1] PASSED                                                                 [ 89%]
tests/test_native_module.py::test_distortion[shape3-6] PASSED                                                                   [ 89%]
tests/test_native_module.py::test_distortion[shape3-12] PASSED                                                                  [ 89%]
tests/test_native_module.py::test_distortion[shape3-24] PASSED                                                                  [ 90%]
tests/test_native_module.py::test_distortion[shape3-48] PASSED                                                                  [ 90%]
tests/test_native_module.py::test_distortion[shape3-96] PASSED                                                                  [ 90%]
tests/test_native_module.py::test_distortion[shape4--12] PASSED                                                                 [ 91%]
tests/test_native_module.py::test_distortion[shape4--6] PASSED                                                                  [ 91%]
tests/test_native_module.py::test_distortion[shape4-0] PASSED                                                                   [ 92%]
tests/test_native_module.py::test_distortion[shape4-1.1] PASSED                                                                 [ 92%]
tests/test_native_module.py::test_distortion[shape4-6] PASSED                                                                   [ 92%]
tests/test_native_module.py::test_distortion[shape4-12] PASSED                                                                  [ 93%]
tests/test_native_module.py::test_distortion[shape4-24] PASSED                                                                  [ 93%]
tests/test_native_module.py::test_distortion[shape4-48] PASSED                                                                  [ 93%]
tests/test_native_module.py::test_distortion[shape4-96] PASSED                                                                  [ 94%]
tests/test_native_module.py::test_plugin_state_not_cleared_between_invocations[True] PASSED                                     [ 94%]
tests/test_native_module.py::test_plugin_state_not_cleared_between_invocations[False] PASSED                                    [ 95%]
tests/test_native_module.py::test_plugin_state_not_cleared_if_passed_smaller_buffer PASSED                                      [ 95%]
tests/test_python_interface.py::test_no_transforms[shape0] PASSED                                                               [ 95%]
tests/test_python_interface.py::test_no_transforms[shape1] PASSED                                                               [ 96%]
tests/test_python_interface.py::test_no_transforms[shape2] PASSED                                                               [ 96%]
tests/test_python_interface.py::test_no_transforms[shape3] PASSED                                                               [ 96%]
tests/test_python_interface.py::test_no_transforms[shape4] PASSED                                                               [ 97%]
tests/test_python_interface.py::test_fail_on_invalid_plugin PASSED                                                              [ 97%]
tests/test_python_interface.py::test_fail_on_invalid_sample_rate PASSED                                                         [ 98%]
tests/test_python_interface.py::test_fail_on_invalid_buffer_size PASSED                                                         [ 98%]
tests/test_python_interface.py::test_repr PASSED                                                                                [ 98%]
tests/test_python_interface.py::test_is_list_like PASSED                                                                        [ 99%]
tests/test_python_interface.py::test_process_validates_sample_rate PASSED                                                       [ 99%]
tests/test_tensorflow.py::test_can_be_called_in_tensorflow_data_pipeline PASSED                                                 [100%]

============================================================== FAILURES ===============================================================
________________________________________ test_at_least_one_parameter[CHOWTapeModel.component] _________________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_at_least_one_parameter(plugin_filename: str):
        """
        Many tests below are parametrized on the parameters of the plugin;
        if our parameter parsing code fails, those tests won't fail as
        there will just be no code to run. This works around that problem.
        """

>       assert get_parameters(plugin_filename)
E       AssertionError: assert {}
E        +  where {} = get_parameters('CHOWTapeModel.component')

tests/test_external_plugins.py:114: AssertionError
__________________________________________ test_initial_parameters[CHOWTapeModel.component] ___________________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_initial_parameters(plugin_filename: str):
        parameters = {
            k: v.min_value for k, v in get_parameters(plugin_filename).items() if v.type == float
        }

        # Reload the plugin, but set the initial parameters in the load call.
>       plugin = load_test_plugin(plugin_filename, parameter_values=parameters)

tests/test_external_plugins.py:124: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',)
kwargs = {'parameter_values': {}}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_________________________________ test_initial_parameter_validation_missing[CHOWTapeModel.component] __________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_initial_parameter_validation_missing(plugin_filename: str):
        with pytest.raises(AttributeError):
>           load_test_plugin(plugin_filename, parameter_values={"missing_parameter": 123})

tests/test_external_plugins.py:153: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',)
kwargs = {'parameter_values': {'missing_parameter': 123}}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________ test_plugin_accepts_variable_channel_count[1-48000-CHOWTapeModel.component] _____________________________

plugin_filename = 'CHOWTapeModel.component', num_channels = 1, sample_rate = 48000

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    @pytest.mark.parametrize(
        "num_channels,sample_rate",
        [(1, 48000), (2, 48000), (1, 44100), (2, 44100), (1, 22050), (2, 22050)],
    )
    def test_plugin_accepts_variable_channel_count(
        plugin_filename: str, num_channels: int, sample_rate: float
    ):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________ test_plugin_accepts_variable_channel_count[2-48000-CHOWTapeModel.component] _____________________________

plugin_filename = 'CHOWTapeModel.component', num_channels = 2, sample_rate = 48000

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    @pytest.mark.parametrize(
        "num_channels,sample_rate",
        [(1, 48000), (2, 48000), (1, 44100), (2, 44100), (1, 22050), (2, 22050)],
    )
    def test_plugin_accepts_variable_channel_count(
        plugin_filename: str, num_channels: int, sample_rate: float
    ):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________ test_plugin_accepts_variable_channel_count[1-44100-CHOWTapeModel.component] _____________________________

plugin_filename = 'CHOWTapeModel.component', num_channels = 1, sample_rate = 44100

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    @pytest.mark.parametrize(
        "num_channels,sample_rate",
        [(1, 48000), (2, 48000), (1, 44100), (2, 44100), (1, 22050), (2, 22050)],
    )
    def test_plugin_accepts_variable_channel_count(
        plugin_filename: str, num_channels: int, sample_rate: float
    ):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________ test_plugin_accepts_variable_channel_count[2-44100-CHOWTapeModel.component] _____________________________

plugin_filename = 'CHOWTapeModel.component', num_channels = 2, sample_rate = 44100

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    @pytest.mark.parametrize(
        "num_channels,sample_rate",
        [(1, 48000), (2, 48000), (1, 44100), (2, 44100), (1, 22050), (2, 22050)],
    )
    def test_plugin_accepts_variable_channel_count(
        plugin_filename: str, num_channels: int, sample_rate: float
    ):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________ test_plugin_accepts_variable_channel_count[1-22050-CHOWTapeModel.component] _____________________________

plugin_filename = 'CHOWTapeModel.component', num_channels = 1, sample_rate = 22050

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    @pytest.mark.parametrize(
        "num_channels,sample_rate",
        [(1, 48000), (2, 48000), (1, 44100), (2, 44100), (1, 22050), (2, 22050)],
    )
    def test_plugin_accepts_variable_channel_count(
        plugin_filename: str, num_channels: int, sample_rate: float
    ):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________ test_plugin_accepts_variable_channel_count[2-22050-CHOWTapeModel.component] _____________________________

plugin_filename = 'CHOWTapeModel.component', num_channels = 2, sample_rate = 22050

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    @pytest.mark.parametrize(
        "num_channels,sample_rate",
        [(1, 48000), (2, 48000), (1, 44100), (2, 44100), (1, 22050), (2, 22050)],
    )
    def test_plugin_accepts_variable_channel_count(
        plugin_filename: str, num_channels: int, sample_rate: float
    ):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:170: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
________________________ test_plugin_accepts_variable_channel_count_without_reloading[CHOWTapeModel.component] ________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_plugin_accepts_variable_channel_count_without_reloading(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:182: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
______________________________ test_all_parameters_are_accessible_as_properties[CHOWTapeModel.component] ______________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_all_parameters_are_accessible_as_properties(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:202: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
________________________________ test_parameters_cant_be_assigned_to_directly[CHOWTapeModel.component] ________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_parameters_cant_be_assigned_to_directly(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:210: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________________ test_all_parameters_have_accessors[CHOWTapeModel.component] _____________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_all_parameters_have_accessors(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:220: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
___________________________________________ test_attributes_proxy[CHOWTapeModel.component] ____________________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_attributes_proxy(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:234: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
________________________________ test_plugin_parameters_persist_between_calls[CHOWTapeModel.component] ________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_plugin_parameters_persist_between_calls(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename)

tests/test_external_plugins.py:383: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
__________________________ test_plugin_state_cleared_between_invocations_by_default[CHOWTapeModel.component] __________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_plugin_state_cleared_between_invocations_by_default(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename, disable_caching=True)

tests/test_external_plugins.py:427: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
____________________ test_plugin_state_not_cleared_between_invocations_if_reset_is_false[CHOWTapeModel.component] _____________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_plugin_state_not_cleared_between_invocations_if_reset_is_false(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename, disable_caching=True)

tests/test_external_plugins.py:444: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
____________________________________________ test_explicit_reset[CHOWTapeModel.component] _____________________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_explicit_reset(plugin_filename: str):
>       plugin = load_test_plugin(plugin_filename, disable_caching=True)

tests/test_external_plugins.py:459: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
_____________________________________ test_explicit_reset_in_pedalboard[CHOWTapeModel.component] ______________________________________

plugin_filename = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_filename", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_explicit_reset_in_pedalboard(plugin_filename: str):
        sr = 44100
>       board = pedalboard.Pedalboard([load_test_plugin(plugin_filename, disable_caching=True)], sr)

tests/test_external_plugins.py:476: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _
tests/test_external_plugins.py:67: in load_test_plugin
    plugin = pedalboard.load_plugin(
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
____________________________________ test_plugin_can_be_garbage_collected[CHOWTapeModel.component] ____________________________________

plugin_path = 'CHOWTapeModel.component'

    @pytest.mark.parametrize("plugin_path", AVAILABLE_PLUGINS_IN_TEST_ENVIRONMENT)
    def test_plugin_can_be_garbage_collected(plugin_path: str):
        # Load a VST3 plugin from disk:
>       plugin = pedalboard.load_plugin(
            os.path.join(TEST_PLUGIN_BASE_PATH, platform.system(), plugin_path)
        )

tests/test_memory_leaks.py:31: 
_ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _ _

args = ('/Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component',), kwargs = {}
exceptions = [ImportError('Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.co...ogramming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.')]
plugin_class = <class 'pedalboard.pedalboard.AudioUnitPlugin'>, tried_plugins = 'VST3Plugin or AudioUnitPlugin'

    def load_plugin(*args, **kwargs):
        if not AVAILABLE_PLUGIN_CLASSES:
            raise ImportError(
                "Pedalboard found no supported external plugin types in this installation ({}).".format(
                    platform.system()
                )
            )
        exceptions = []
        for plugin_class in AVAILABLE_PLUGIN_CLASSES:
            try:
                return plugin_class(*args, **kwargs)
            except ImportError as e:
                exceptions.append(e)
            except Exception:
                raise
        else:
            tried_plugins = ", ".join([c.__name__ for c in AVAILABLE_PLUGIN_CLASSES])
            # Good error messages are important, okay?
            if len(AVAILABLE_PLUGIN_CLASSES) > 2:
                tried_plugins = ", or ".join(tried_plugins.rsplit(", ", 1))
            else:
                tried_plugins = " or ".join(tried_plugins.rsplit(", ", 1))
>           raise ImportError(
                "Failed to load plugin as {}. Errors were:\n\t{}".format(
                    tried_plugins,
                    "\n\t".join(
                        [
                            "{}: {}".format(klass.__name__, exception)
                            for klass, exception in zip(AVAILABLE_PLUGIN_CLASSES, exceptions)
                        ]
                    ),
                )
            )
E           ImportError: Failed to load plugin as VST3Plugin or AudioUnitPlugin. Errors were:
E               VST3Plugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.
E               AudioUnitPlugin: Unable to load plugin /Users/macbook/programming/python/pedalboard/tests/plugins/Darwin/CHOWTapeModel.component: unsupported plugin format or load failure.

pedalboard/pedalboard.py:659: ImportError
========================================================== warnings summary ===========================================================
.tox/py/lib/python3.9/site-packages/_pytest/junitxml.py:436
  /Users/macbook/programming/python/pedalboard/.tox/py/lib/python3.9/site-packages/_pytest/junitxml.py:436: PytestDeprecationWarning: The 'junit_family' default value will change to 'xunit2' in pytest 6.0.
  Add 'junit_family=legacy' to your pytest.ini file to silence this warning and make your suite compatible.
    _issue_warning_captured(deprecated.JUNIT_XML_DEFAULT_FAMILY, config.hook, 2)

pedalboard/pedalboard.py:29
  /Users/macbook/programming/python/pedalboard/pedalboard/pedalboard.py:29: DeprecationWarning: Using or importing the ABCs from 'collections' instead of from 'collections.abc' is deprecated since Python 3.3, and in 3.10 it will stop working
    class Pedalboard(collections.MutableSequence):

.tox/py/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py:22
  /Users/macbook/programming/python/pedalboard/.tox/py/lib/python3.9/site-packages/tensorflow/python/autograph/impl/api.py:22: DeprecationWarning: the imp module is deprecated in favour of importlib; see the module's documentation for alternative uses
    import imp

-- Docs: https://docs.pytest.org/en/latest/warnings.html
----------------------------- generated xml file: /Users/macbook/programming/python/pedalboard/junit.xml ------------------------------

---------- coverage: platform darwin, python 3.9.7-final-0 -----------
Name                       Stmts   Miss  Cover   Missing
--------------------------------------------------------
pedalboard/__init__.py         5      0   100%
pedalboard/pedalboard.py     353     31    91%   44, 75, 91, 122, 136, 182, 233, 331, 358, 373, 383-386, 394-395, 479, 486, 490, 543, 545, 553, 556, 583, 611-613, 625-631, 639, 656
pedalboard/version.py          4      0   100%
--------------------------------------------------------
TOTAL                        362     31    91%
Coverage XML written to file cobertura/coverage.xml

======================================= 20 failed, 244 passed, 1 skipped, 3 warnings in 58.60s ========================================
ERROR: InvocationError for command /Users/macbook/programming/python/pedalboard/.tox/py/bin/coverage run -m pytest (exited with code 1)
docs recreate: /Users/macbook/programming/python/pedalboard/.tox/docs
docs installdeps: -rdocs-requirements.txt
docs installed: attrs==21.2.0,click==8.0.3,colorama==0.4.4,interrogate==1.5.0,Jinja2==3.0.2,livereload==2.6.3,Markdown==3.3.4,MarkupSafe==2.0.1,mkdocs==1.0.4,py==1.10.0,PyYAML==5.4.1,six==1.16.0,tabulate==0.8.9,toml==0.10.2,tornado==6.1
docs run-test-pre: PYTHONHASHSEED='256814189'
check-formatting recreate: /Users/macbook/programming/python/pedalboard/.tox/check-formatting
check-formatting installdeps: black
check-formatting installed: black==21.9b0,click==8.0.3,mypy-extensions==0.4.3,pathspec==0.9.0,platformdirs==2.4.0,regex==2021.10.8,tomli==1.2.1,typing-extensions==3.10.0.2
check-formatting run-test-pre: PYTHONHASHSEED='256814189'
lint recreate: /Users/macbook/programming/python/pedalboard/.tox/lint
lint installdeps: flake8
lint installed: flake8==4.0.1,mccabe==0.6.1,pycodestyle==2.8.0,pyflakes==2.4.0
lint run-test-pre: PYTHONHASHSEED='256814189'
lint run-test: commands[0] | flake8
_______________________________________________________________ summary _______________________________________________________________
ERROR:   py: commands failed
  docs: commands succeeded
  check-formatting: commands succeeded
  lint: commands succeeded
(39) macbook@MacBook-Pro-di-macbook pedalboard % 
psobot commented 2 years ago

Thanks @LucaMarconato! A couple more things to try:

HussainAbdi commented 2 years ago

Hi again @psobot! I ran into the same issue as @LucaMarconato and thought I could help answer these questions. I am running on a M1.

HussainAbdi commented 2 years ago

After adding CHOWTapeModel.component to ~/Library/Audio/Plug-Ins/Components/, all these component test cases pass. Not sure why, but I've left it there for now.

HussainAbdi commented 2 years ago

FYI for anyone facing this issue, I had the same problem on a non-M1 MacBook Pro (2016 13-inch MBP) and it was resolved the same way as above. Adding CHOWTapeModel.component to ~/Library/Audio/Plug-Ins/Components/.

psobot commented 2 years ago

Thanks @HussainAbdi and @LucaMarconato! I'm adding a change to fix these tests and raise a more descriptive ImportError if the plugin fails to load. It seems that on M1, or in certain unknown configurations, plugins are required to be installed to ~/Library/Audio/Plug-Ins/Components or they'll fail to load.