diff --git a/docs/_static/documentation_options.js b/docs/_static/documentation_options.js index 39cf6a48..457ca90d 100644 --- a/docs/_static/documentation_options.js +++ b/docs/_static/documentation_options.js @@ -1,6 +1,6 @@ var DOCUMENTATION_OPTIONS = { URL_ROOT: document.getElementById("documentation_options").getAttribute('data-url_root'), - VERSION: 'v0.9.12', + VERSION: 'v0.9.13', LANGUAGE: 'en', COLLAPSE_INDEX: false, BUILDER: 'html', diff --git a/docs/compatibility.html b/docs/compatibility.html index dc24888e..87ff77f3 100644 --- a/docs/compatibility.html +++ b/docs/compatibility.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - Plugin Compatibility - Pedalboard v0.9.12 Documentation + Plugin Compatibility - Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/faq.html b/docs/faq.html index 73e29e03..b316a186 100644 --- a/docs/faq.html +++ b/docs/faq.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - Frequently Asked Questions - Pedalboard v0.9.12 Documentation + Frequently Asked Questions - Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/genindex.html b/docs/genindex.html index 634108b9..d64a3499 100644 --- a/docs/genindex.html +++ b/docs/genindex.html @@ -4,7 +4,7 @@ - Index - Pedalboard v0.9.12 Documentation + Index - Pedalboard v0.9.13 Documentation @@ -122,7 +122,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -148,7 +148,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/index.html b/docs/index.html index 9525a89e..26c54226 100644 --- a/docs/index.html +++ b/docs/index.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation @@ -277,7 +277,7 @@

InstallationINSTALLATION.md for a robust guide.

Compatibility#

-

pedalboard is thoroughly tested with Python 3.6, 3.7, 3.8, 3.9, 3.10, 3.11, and 3.12 as well as experimental support for PyPy 3.7, 3.8, and 3.9.

+

pedalboard is thoroughly tested with Python 3.8, 3.9, 3.10, 3.11, 3.12, and 3.13.

  • Linux

      diff --git a/docs/internals.html b/docs/internals.html index 3289d5ed..92de9ea4 100644 --- a/docs/internals.html +++ b/docs/internals.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - Pedalboard Internals - Pedalboard v0.9.12 Documentation + Pedalboard Internals - Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@

-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/license.html b/docs/license.html index fb92ceed..0c9da2e2 100644 --- a/docs/license.html +++ b/docs/license.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - License - Pedalboard v0.9.12 Documentation + License - Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/py-modindex.html b/docs/py-modindex.html index 64c17336..ec7838c5 100644 --- a/docs/py-modindex.html +++ b/docs/py-modindex.html @@ -4,7 +4,7 @@ - Python Module Index - Pedalboard v0.9.12 Documentation + Python Module Index - Pedalboard v0.9.13 Documentation @@ -122,7 +122,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -148,7 +148,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/reference/pedalboard.html b/docs/reference/pedalboard.html index 1952265c..dfd18b71 100644 --- a/docs/reference/pedalboard.html +++ b/docs/reference/pedalboard.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - The pedalboard API - Pedalboard v0.9.12 Documentation + The pedalboard API - Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@
-
Pedalboard v0.9.12 Documentation
+
Pedalboard v0.9.13 Documentation
@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation @@ -575,7 +575,7 @@

The pedalboard<
-static get_plugin_names_for_file(filename: str) list[str]#
+static get_plugin_names_for_file(filename: str) List[str]#

Return a list of plugin names contained within a given Audio Unit bundle (i.e.: a .component or .appex file). If the provided file cannot be scanned, an ImportError will be raised.

Note that most Audio Units have a single plugin inside, but this method can be useful to determine if multiple plugins are present in one bundle, and if so, what their names are.

@@ -856,7 +856,7 @@

The pedalboard<
-class pedalboard.Chain(plugins: list[Plugin])#
+class pedalboard.Chain(plugins: List[Plugin])#

Run zero or more plugins as a plugin. Useful when used with the Mix plugin.

@@ -2103,7 +2103,7 @@

The pedalboard<
-class pedalboard.Mix(plugins: list[Plugin])#
+class pedalboard.Mix(plugins: List[Plugin])#

A utility plugin that allows running other plugins in parallel. All plugins provided will be mixed equally.

@@ -2512,7 +2512,7 @@

The pedalboard<
-class pedalboard.PluginContainer(plugins: list[Plugin])#
+class pedalboard.PluginContainer(plugins: List[Plugin])#

A generic audio processing plugin that contains zero or more other plugins. Not intended for direct use.

@@ -2813,7 +2813,7 @@

The pedalboard<
-static get_plugin_names_for_file(arg0: str) list[str]#
+static get_plugin_names_for_file(arg0: str) List[str]#

Return a list of plugin names contained within a given VST3 plugin (i.e.: a โ€œ.vst3โ€). If the provided file cannot be scanned, an ImportError will be raised.

diff --git a/docs/reference/pedalboard.io.html b/docs/reference/pedalboard.io.html index 055bd9e4..42f0d67d 100644 --- a/docs/reference/pedalboard.io.html +++ b/docs/reference/pedalboard.io.html @@ -6,7 +6,7 @@ - + @@ -14,7 +14,7 @@ - The pedalboard.io API - Pedalboard v0.9.12 Documentation + The pedalboard.io API - Pedalboard v0.9.13 Documentation @@ -132,7 +132,7 @@

@@ -158,7 +158,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/search.html b/docs/search.html index 7c98529d..4961c8ff 100644 --- a/docs/search.html +++ b/docs/search.html @@ -4,7 +4,7 @@ - Search - Pedalboard v0.9.12 Documentation + Search - Pedalboard v0.9.13 Documentation @@ -121,7 +121,7 @@
@@ -147,7 +147,7 @@
- Pedalboard v0.9.12 Documentation + Pedalboard v0.9.13 Documentation diff --git a/docs/searchindex.js b/docs/searchindex.js index af7c259b..ef7a0a8d 100644 --- a/docs/searchindex.js +++ b/docs/searchindex.js @@ -1 +1 @@ -Search.setIndex({"docnames": ["compatibility", "examples", "faq", "index", "internals", "license", "reference/pedalboard", "reference/pedalboard.io"], "filenames": ["compatibility.rst", "examples.rst", "faq.rst", "index.rst", "internals.rst", "license.rst", "reference/pedalboard.rst", "reference/pedalboard.io.rst"], "titles": ["Plugin Compatibility", "Examples", "Frequently Asked Questions", "Features", "Pedalboard Internals", "License", "The pedalboard API", "The pedalboard.io API"], "terms": {"pedalboard": [0, 3, 5], "allow": [0, 1, 3, 6, 7], "load": [0, 1, 3, 4, 6], "vst3": [0, 3, 4, 5, 6], "audio": [0, 3, 4, 5, 6, 7], "unit": [0, 2, 3, 4, 6], "which": [0, 5, 6, 7], "could": [0, 6, 7], "contain": [0, 1, 6, 7], "ani": [0, 2, 4, 6, 7], "code": [0, 2, 4, 5, 7], "most": [0, 3, 4, 6, 7], "have": [0, 4, 6, 7], "been": [0, 7], "test": [0, 3, 4], "work": [0, 1, 3, 6, 7], "just": [0, 1, 4, 6, 7], "fine": [0, 6], "some": [0, 1, 4, 6, 7], "mai": [0, 4, 6, 7], "worst": [0, 7], "even": [0, 3, 7], "crash": [0, 6, 7], "python": [0, 1, 3, 4, 6, 7], "interpret": [0, 3, 7], "without": [0, 3, 6, 7], "warn": [0, 7], "abil": [0, 6], "catch": 0, "error": [0, 6, 7], "ar": [0, 1, 3, 4, 5, 6, 7], "well": [0, 3, 4, 6, 7], "behav": [0, 1], "conform": 0, "set": [0, 1, 2, 6, 7], "convent": 0, "how": [0, 1, 6], "suppos": 0, "mani": [0, 3, 6, 7], "do": [0, 1, 6, 7], "specif": [0, 6], "attempt": [0, 7], "detect": [0, 6], "common": [0, 3], "program": [0, 1, 6, 7], "can": [0, 1, 3, 4, 6, 7], "around": [0, 4, 6], "issu": [0, 4, 6], "includ": [0, 1, 3, 4, 5, 6], "automat": [0, 3, 6, 7], "don": [0, 1, 6, 7], "t": [0, 1, 2, 6, 7], "clear": [0, 6], "intern": [0, 3, 6, 7], "state": [0, 6, 7], "when": [0, 3, 4, 6, 7], "ask": [0, 3], "so": [0, 1, 2, 6, 7], "misbehav": 0, "notic": 0, "If": [0, 1, 3, 6, 7], "i": [0, 1, 2, 3, 4, 5, 6, 7], "being": [0, 7], "render": [0, 1, 2, 3, 6, 7], "incorrectli": 0, "leak": [0, 7], "from": [0, 1, 2, 3, 5, 6, 7], "one": [0, 1, 3, 6, 7], "process": [0, 1, 2, 3, 4, 5, 6, 7], "call": [0, 6, 7], "next": 0, "an": [0, 1, 4, 6, 7], "undesir": 0, "fashion": 0, "try": [0, 6, 7], "pass": [0, 1, 2, 6, 7], "silenc": 0, "between": [0, 2, 6, 7], "ensur": [0, 2, 4, 6, 7], "reverb": [0, 1, 2, 3, 6, 7], "tail": [0, 2, 6], "other": [0, 1, 3, 6, 7], "ha": [0, 1, 6, 7], "time": [0, 1, 3, 6, 7], "fade": 0, "reload": 0, "everi": [0, 4, 6, 7], "load_plugin": [0, 1, 3, 4, 6], "note": [1, 6, 7], "you": [1, 3, 6, 7], "d": [1, 7], "rather": [1, 7], "watch": 1, "video": 1, "instead": [1, 3, 6, 7], "read": [1, 2, 3, 6, 7], "document": [1, 6, 7], "feat": 1, "youtub": 1, "import": [1, 2, 4, 6, 7], "choru": [1, 3, 6], "io": [1, 2, 3, 6], "audiofil": [1, 2, 6, 7], "object": [1, 6, 7], "multipl": [1, 3, 6, 7], "board": [1, 2], "room_siz": [1, 6], "0": [1, 2, 6, 7], "25": [1, 6], "open": [1, 2, 4, 6, 7], "file": [1, 2, 3, 4, 6, 7], "like": [1, 3, 6, 7], "regular": [1, 6, 7], "wav": [1, 2, 3, 6, 7], "f": [1, 6, 7], "write": [1, 2, 3, 6, 7], "output": [1, 2, 6, 7], "w": [1, 2, 6, 7], "sampler": [1, 2, 6, 7], "num_channel": [1, 2, 6, 7], "o": [1, 2, 3, 6, 7], "second": [1, 6, 7], "until": [1, 6, 7], "empti": [1, 6], "while": [1, 2, 6, 7], "tell": [1, 7], "frame": [1, 2, 7], "chunk": [1, 2, 6, 7], "through": [1, 2, 6, 7], "our": [1, 2], "reset": [1, 2, 6, 7], "fals": [1, 2, 6, 7], "For": [1, 6, 7], "more": [1, 2, 3, 4, 6, 7], "inform": [1, 6, 7], "about": [1, 6, 7], "paramet": [1, 3, 6, 7], "see": [1, 2, 6, 7], "It": [1, 3], "thi": [1, 2, 5, 6, 7], "smaller": [1, 2, 6, 7], "whole": 1, "resampl": [1, 3, 6, 7], "desir": 1, "sampl": [1, 2, 6, 7], "rate": [1, 2, 6, 7], "44100": [1, 6, 7], "input": [1, 6, 7], "resampled_to": [1, 7], "pretti": 1, "interest": 1, "sound": [1, 6], "compressor": [1, 2, 3, 6], "threshold_db": [1, 6], "50": [1, 6], "ratio": [1, 6], "gain": [1, 3, 6], "gain_db": [1, 6], "30": [1, 7], "ladderfilt": [1, 3, 6], "mode": [1, 6, 7], "hpf12": [1, 6], "cutoff_hz": [1, 6], "900": 1, "phaser": [1, 3, 6], "convolut": [1, 3, 6], "guitar_amp": 1, "1": [1, 2, 3, 6, 7], "list": [1, 6, 7], "add": [1, 3, 4, 6, 7], "append": [1, 6, 7], "10": [1, 3, 6, 7], "limit": [1, 3, 6], "chang": [1, 3, 6, 7], "easili": 1, "40": 1, "back": [1, 6, 7], "shape": [1, 2, 7], "mido": [1, 6], "messag": [1, 2, 6], "part": [1, 6, 7], "conveni": [1, 6, 7], "known": 1, "path": [1, 6, 7], "disk": [1, 7], "vst": [1, 3, 5], "magical8bitplug2": 1, "roughrider3": 1, "print": [1, 6, 7], "kei": [1, 6], "dict_kei": 1, "sc_hpf_hz": 1, "input_lvl_db": 1, "sensitivity_db": 1, "attack_m": [1, 6], "release_m": [1, 6], "makeup_db": 1, "mix": [1, 6], "output_lvl_db": 1, "sc_activ": 1, "full_bandwidth": 1, "bypass": 1, "15": 1, "midi": [1, 3, 6], "sample_r": [1, 6, 7], "note_on": [1, 6], "60": [1, 6, 7], "note_off": [1, 6], "5": [1, 6], "durat": [1, 6, 7], "appli": [1, 6], "put": 1, "same": [1, 4, 6, 7], "instanc": [1, 4, 6, 7], "delai": [1, 3, 6], "pitch": [1, 3, 6], "shift": [1, 6], "themselv": [1, 6], "nest": [1, 6], "them": [1, 6], "much": [1, 6, 7], "distort": [1, 3, 6], "pitchshift": [1, 3, 5, 6], "passthrough": 1, "delay_and_pitch_shift": 1, "delay_second": [1, 6], "semiton": [1, 6], "7": [1, 2, 3, 6, 7], "3": [1, 3, 6, 7], "delay_longer_and_more_pitch_shift": 1, "12": [1, 3, 6, 7], "6": [1, 3, 5, 6, 7], "front": 1, "all": [1, 3, 4, 6, 7], "simultan": 1, "final": 1, "On": 1, "maco": [1, 3, 4, 6, 7], "window": [1, 3, 4, 6, 7], "support": [1, 3, 4, 6, 7], "stream": [1, 3, 6, 7], "audiostream": [1, 2, 3, 7], "real": [1, 3, 6, 7], "manipul": 1, "ad": [1, 3, 6, 7], "up": [1, 3, 5, 6], "input_device_nam": [1, 7], "apoge": 1, "jam": 1, "interfac": [1, 4, 6, 7], "output_device_nam": [1, 7], "macbook": 1, "pro": 1, "speaker": [1, 6, 7], "now": [1, 7], "out": [1, 3, 6, 7], "your": [1, 7], "press": [1, 6], "enter": [1, 7], "stop": [1, 7], "The": [1, 4, 5], "close": [1, 6, 7], "tensorflow": [1, 3], "sr": [1, 7], "48000": 1, "whatev": 1, "here": 1, "dataset": 1, "random": [1, 7], "nois": [1, 6], "train": 1, "": [1, 3, 4, 6, 7], "where": [1, 4, 6, 7], "want": [1, 7], "somehow": 1, "from_tensor_slic": 1, "np": [1, 7], "rand": [1, 7], "map": 1, "lambda": 1, "numpy_funct": 1, "float32": [1, 6, 7], "dummi": 1, "ml": 1, "model": [1, 3, 6], "kera": 1, "sequenti": 1, "layer": 1, "inputlay": 1, "input_shap": 1, "dens": 1, "compil": [1, 4, 5], "loss": 1, "mse": 1, "fit": 1, "batch": 1, "epoch": 1, "folder": 1, "repositori": [1, 4], "demo": 1, "colab": 1, "notebook": 1, "peter": 1, "sobot": 1, "europython": 1, "2022": 1, "interact": [1, 6, 7], "web": 1, "hug": 1, "face": 1, "space": 1, "gradio": 1, "via": [1, 3, 6, 7], "ak391": 1, "As": 2, "version": [2, 6, 7], "ye": 2, "class": [2, 6, 7], "detail": [2, 7], "built": [2, 3, 6], "function": [2, 4, 5, 6, 7], "possibl": [2, 3, 6, 7], "vari": [2, 6], "manual": [2, 3], "tqdm": 2, "step": 2, "size": [2, 4, 6, 7], "would": [2, 4, 6, 7], "give": [2, 6], "smoother": [2, 6], "transit": 2, "expens": [2, 6, 7], "speed": [2, 3, 4, 5, 6], "step_size_in_sampl": 2, "100": [2, 6, 7], "_n_": 2, "af": 2, "we": 2, "directli": [2, 6, 7], "save": [2, 6], "memori": [2, 3, 6, 7], "creat": [2, 3, 6, 7], "progress": 2, "bar": 2, "show": [2, 4, 6], "total": [2, 7], "pbar": 2, "rang": [2, 3, 6], "wet": [2, 6], "equal": [2, 3, 6, 7], "percentag": [2, 6], "track": [2, 6], "e": [2, 6, 7], "make": [2, 3, 7], "ramp": 2, "percentage_through_track": 2, "wet_level": [2, 6, 7], "updat": 2, "number": [2, 3, 5, 6, 7], "receiv": [2, 6, 7], "aren": 2, "cut": [2, 6], "off": [2, 6], "With": 2, "techniqu": [2, 6], "autom": 2, "usual": [2, 6, 7], "somewher": 2, "000": [2, 7], "2m": 2, "22m": 2, "44": [2, 6, 7], "1khz": [2, 6], "small": 2, "enough": [2, 7], "avoid": [2, 7], "hear": 2, "artifact": [2, 6], "big": 2, "slow": [2, 6], "down": [2, 6], "dramat": 2, "4": [2, 6], "vst3plugin": [2, 6], "audiounitplugin": [2, 6], "both": [2, 3, 6, 7], "howev": [2, 6, 7], "cannot": [2, 4, 6, 7], "yet": 2, "data": [2, 3, 6, 7], "librari": [3, 4, 5, 6, 7], "effect": [3, 4, 6, 7], "popular": 3, "format": [3, 6, 7], "box": 3, "also": [3, 4, 5, 6, 7], "us": [3, 4, 5, 6, 7], "third": [3, 6], "parti": [3, 6], "softwar": [3, 4], "instrument": [3, 6], "wa": [3, 6, 7], "spotifi": [3, 5], "intellig": 3, "lab": 3, "enabl": [3, 6], "studio": 3, "qualiti": [3, 6, 7], "within": [3, 4, 6, 7], "augment": 3, "improv": 3, "machin": [3, 4], "learn": [3, 4], "help": 3, "power": [3, 6], "ai": 3, "dj": 3, "voic": [3, 6], "translat": 3, "content": [3, 7], "creation": 3, "digit": [3, 4, 6], "workstat": 3, "util": [3, 6], "aiff": [3, 7], "flac": [3, 7], "mp3": [3, 6, 7], "ogg": [3, 7], "platform": [3, 4, 6, 7], "depend": [3, 4, 6, 7], "addit": [3, 4, 6, 7], "aac": [3, 7], "ac3": [3, 7], "wma": [3, 7], "fly": [3, 7], "usag": [3, 6], "live": [3, 7], "basic": [3, 6, 7], "transform": [3, 6], "guitar": [3, 6], "style": 3, "clip": [3, 6], "loud": [3, 6], "dynam": [3, 6], "filter": [3, 6], "highpassfilt": [3, 6], "lowpassfilt": [3, 6], "spatial": 3, "lossi": [3, 6], "compress": [3, 6, 7], "gsmfullratecompressor": [3, 5, 6], "mp3compressor": [3, 5, 6], "reduct": [3, 6], "bitcrush": [3, 6], "plugin": [3, 5, 6, 7], "linux": [3, 4, 6, 7], "strong": 3, "thread": [3, 4, 6, 7], "safeti": 3, "guarante": [3, 7], "releas": [3, 6, 7], "global": [3, 7], "lock": [3, 7], "gil": [3, 7], "cpu": [3, 6], "core": [3, 5], "No": [3, 6], "need": [3, 4, 7], "multiprocess": 3, "onli": [3, 6, 7], "300x": 3, "faster": 3, "than": [3, 4, 6, 7], "pysox": 3, "singl": [3, 6], "2": [3, 6, 7], "5x": 3, "soxbind": 3, "icorv": 3, "4x": 3, "librosa": 3, "case": [3, 4, 6, 7], "tf": 3, "pipelin": 3, "avail": [3, 4, 6, 7], "pypi": 3, "wheel": [3, 4], "pip": 3, "That": 3, "requir": [3, 4, 6, 7], "new": [3, 7], "follow": [3, 4, 5, 6, 7], "md": 3, "robust": 3, "guid": 3, "thoroughli": 3, "8": [3, 6], "9": [3, 6, 7], "11": 3, "experiment": 3, "heavili": 3, "product": 3, "github": [3, 6], "manylinux": 3, "musllinux": 3, "x86_64": 3, "intel": 3, "amd": 3, "aarch64": 3, "arm": 3, "appl": [3, 6], "silicon": 3, "rel": 3, "modern": 3, "glibc": 3, "27": 3, "wide": [3, 6], "amd64": 3, "x86": 3, "64": [3, 6], "api": [3, 4], "exampl": [3, 4, 6, 7], "quick": 3, "start": [3, 6, 7], "parallel": [3, 6], "chain": [3, 6, 7], "run": [3, 6, 7], "frequent": [3, 6], "question": 3, "doe": [3, 4, 6, 7], "over": [3, 6], "accept": [3, 6, 7], "design": [3, 6], "consider": 3, "licens": [3, 4], "repo": 3, "wrapper": [4, 6], "juce": [4, 5], "sourc": [4, 7], "cross": [4, 6], "c": [4, 6, 7], "develop": 4, "applic": 4, "written": [4, 7], "pybind11": 4, "bind": 4, "goal": [4, 7], "expos": [4, 6], "signal": [4, 6], "idiomat": 4, "wai": 4, "provid": [4, 6, 7], "raw": [4, 6, 7], "perform": [4, 7], "dsp": 4, "hide": 4, "complex": 4, "programm": 4, "intuit": 4, "itself": [4, 6], "varieti": 4, "reason": 4, "wider": 4, "compat": [4, 5, 6], "Not": [4, 6, 7], "notabl": 4, "rare": [4, 6], "fewer": [4, 6], "simpler": 4, "remov": [4, 6], "copi": 4, "associ": 4, "resourc": [4, 6, 7], "option": [4, 6, 7], "might": 4, "meant": 4, "music": 4, "appropri": [4, 6], "vice": 4, "versa": 4, "stabil": 4, "environ": 4, "implement": [4, 6, 7], "logic": 4, "portabl": 4, "safe": [4, 7], "constraint": 4, "should": [4, 6, 7], "consid": [4, 6, 7], "gplv3": [4, 5], "static": [4, 5, 6, 7], "link": 4, "vendor": 4, "git": 4, "submodul": 4, "binari": [4, 6, 7], "distribut": 4, "Will": [4, 7], "increas": [4, 6, 7], "amount": [4, 6, 7], "runtim": 4, "user": 4, "instal": [4, 6, 7], "complic": 4, "simplic": 4, "packag": [4, 6], "copyright": 5, "2021": 5, "2024": 5, "ab": 5, "under": [5, 7], "gnu": 5, "gener": [5, 6], "public": 5, "v3": 5, "carri": 5, "pull": 5, "dual": 5, "commerci": 5, "sdk": 5, "bundl": [5, 6], "own": [5, 6], "steinberg": [5, 6], "media": 5, "technologi": 5, "gmbh": [5, 6], "time_stretch": [5, 6], "rubber": [5, 6], "band": [5, 6], "gplv2": 5, "newer": 5, "fftw": 5, "libmp3lam": 5, "lame": [5, 6, 7], "project": 5, "lgplv2": 5, "upgrad": 5, "inclus": 5, "permit": 5, "libgsm": 5, "isc": 5, "regist": 5, "trademark": 5, "modul": [6, 7], "subclass": 6, "each": [6, 7], "buffer": [6, 7], "name": [6, 7], "after": [6, 7], "concept": 6, "musician": 6, "variou": 6, "pedal": 6, "togeth": 6, "complet": [6, 7], "control": [6, 7], "its": [6, 7], "main": 6, "my_pedalboard": 6, "treat": 6, "output_audio": 6, "input_audio": 6, "input_audio_sampler": 6, "zero": [6, 7], "composit": 6, "type": [6, 7], "audioprocessorparamet": 6, "externalplugin": 6, "parameter_nam": 6, "str": [6, 7], "search_step": 6, "int": [6, 7], "1000": 6, "A": [6, 7], "differ": [6, 7], "implicit": 6, "my_plugin": 6, "my": 6, "cool": 6, "delay_time_m": 6, "foobar": 6, "access": [6, 7], "were": [6, 7], "attribut": [6, 7], "400": 6, "tri": 6, "guess": 6, "valid": 6, "valu": [6, 7], "instanti": 6, "alwai": [6, 7], "accur": [6, 7], "underli": [6, 7], "had": 6, "raw_valu": 6, "bound": [6, 7], "properti": [6, 7], "label": 6, "hz": [6, 7], "db": 6, "etc": [6, 7], "none": [6, 7], "fail": 6, "alia": 6, "__call__": 6, "input_arrai": 6, "ndarrai": [6, 7], "float": [6, 7], "buffer_s": [6, 7], "8192": 6, "bool": [6, 7], "true": [6, 7], "dtype": [6, 7], "midi_messag": 6, "return": [6, 7], "32": [6, 7], "bit": [6, 7], "numpi": [6, 7], "arrai": [6, 7], "expect": [6, 7], "insid": 6, "To": [6, 7], "remain": [6, 7], "anoth": 6, "datatyp": [6, 7], "convert": [6, 7], "must": [6, 7], "byte": [6, 7], "method": [6, 7], "tupl": 6, "look": 6, "midi_byt": 6, "timestamp_in_second": 6, "worth": 6, "sent": 6, "timestamp": 6, "indic": [6, 7], "end": [6, 7], "whose": 6, "greater": 6, "ignor": 6, "argument": [6, 7], "onc": [6, 7], "higher": 6, "caus": [6, 7], "flag": 6, "determin": [6, 7], "befor": [6, 7], "begin": [6, 7], "previou": 6, "invok": 6, "extern": 6, "assert": [6, 7], "is_effect": 6, "is_instru": 6, "introduc": [6, 7], "v0": [6, 7], "iff": [6, 7], "store": [6, 7], "g": 6, "line": [6, 7], "lfo": 6, "unchang": 6, "seri": [6, 7], "act": 6, "come": [6, 7], "alias": 6, "entir": [6, 7], "those": [6, 7], "insert": 6, "index": 6, "specifi": [6, 7], "point": [6, 7], "layout": [6, 7], "assum": [6, 7], "dimens": [6, 7], "correspond": [6, 7], "channel": [6, 7], "last": [6, 7], "explicitli": 6, "path_to_plugin_fil": 6, "parameter_valu": 6, "dict": 6, "union": [6, 7], "plugin_nam": 6, "initialization_timeout": 6, "two": 6, "dictionari": 6, "initi": [6, 7], "match": [6, 7], "report": 6, "normal": 6, "string": [6, 7], "identifi": 6, "These": 6, "multi": [6, 7], "except": [6, 7], "thrown": [6, 7], "spend": 6, "asynchron": 6, "background": [6, 7], "startup": 6, "larger": 6, "properli": 6, "throw": [6, 7], "importerror": 6, "found": [6, 7], "runtimeerror": [6, 7], "unavail": 6, "non": [6, 7], "system": [6, 7], "loadabl": 6, "plug": [6, 7], "Ins": 6, "compon": 6, "hang": 6, "incorrect": 6, "outright": 6, "find": [6, 7], "incompat": 6, "auv3": 6, "appex": 6, "get_plugin_names_for_fil": 6, "filenam": [6, 7], "given": [6, 7], "scan": [6, 7], "rais": [6, 7], "present": [6, 7], "what": 6, "show_editor": 6, "close_ev": 6, "event": 6, "ui": 6, "nativ": [6, 7], "block": [6, 7], "thing": 6, "happen": [6, 7], "click": 6, "button": 6, "keyboard": 6, "shortcut": 6, "keyboardinterrupt": [6, 7], "ctrl": [6, 7], "programmat": 6, "editor": 6, "close_window_ev": 6, "def": 6, "other_thread": 6, "someth": [6, 7], "should_close_window": 6, "target": [6, 7], "categori": 6, "fall": 6, "descriptive_nam": 6, "descript": 6, "field": 6, "altern": 6, "has_shared_contain": 6, "uniqu": 6, "again": 6, "synthes": 6, "manufacturer_nam": 6, "manufactur": 6, "raw_stat": 6, "repres": [6, 7], "decod": [6, 7], "encod": [6, 7], "plistlib": 6, "invalid": 6, "take": 6, "bit_depth": [6, 7], "reduc": 6, "depth": [6, 7], "lo": 6, "fi": 6, "vertic": 6, "resolut": 6, "horizont": 6, "per": [6, 7], "quantiz": 6, "integ": [6, 7], "decim": 6, "onto": 6, "pedalboard_n": 6, "rate_hz": 6, "centre_delay_m": 6, "feedback": 6, "frequenc": 6, "respons": 6, "centr": 6, "get": 6, "classic": 6, "m": 6, "low": 6, "feeback": 6, "volum": 6, "flanger": 6, "lower": 6, "lot": 6, "vibrato": 6, "oscil": 6, "hertz": 6, "hard": [6, 7], "threshold": 6, "decibel": 6, "algorithm": [6, 7], "gsmcompressor": 6, "impulse_response_filenam": 6, "suitabl": 6, "simul": 6, "impuls": 6, "either": [6, 7], "dry": 6, "drive_db": 6, "linear": [6, 7], "tanh": 6, "hyperbol": 6, "tangent": 6, "waveshap": 6, "harmon": 6, "pleas": 6, "produc": [6, 7], "roughli": 6, "equival": 6, "x": 6, "db_to_gain": 6, "windowedsinc": [6, 7], "degrad": 6, "gsm": 6, "full": 6, "emul": 6, "2g": 6, "cellular": 6, "phone": 6, "connect": [6, 7], "fix": 6, "8khz": 6, "codec": [6, 7], "although": [6, 7], "decreas": [6, 7], "amplifi": 6, "attenu": 6, "think": 6, "highshelffilt": 6, "cutoff_frequency_hz": 6, "440": 6, "q": 6, "7071067690849304": 6, "high": [6, 7], "shelf": 6, "variabl": [6, 7], "abov": [6, 7], "cutoff": 6, "boost": 6, "first": [6, 7], "order": 6, "roll": 6, "6db": 6, "octav": 6, "3db": 6, "frac": 6, "sqrt": 6, "express": 6, "factor": 6, "further": [6, 7], "iirfilt": 6, "abstract": 6, "kind": 6, "infinit": 6, "iir": 6, "lowshelffilt": 6, "peakfilt": 6, "invert": 6, "flip": 6, "polar": 6, "audibl": 6, "mathemat": 6, "ident": [6, 7], "cancel": 6, "origin": [6, 7], "lpf12": 6, "200": 6, "reson": 6, "drive": 6, "base": [6, 7], "moog": 6, "ladder": 6, "invent": 6, "dr": 6, "bob": 6, "1968": 6, "below": [6, 7], "side": [6, 7], "peak": 6, "architectur": 6, "bpf12": 6, "lpf24": 6, "24": 6, "hpf24": 6, "bpf24": 6, "simpl": 6, "standard": 6, "featur": 6, "clipper": 6, "707x": 6, "vbr_qualiti": 6, "current": [6, 7], "vbr": 6, "better": 6, "11025hz": 6, "12khz": 6, "16khz": 6, "22050hz": 6, "24khz": 6, "32khz": 6, "48khz": 6, "unsupport": [6, 7], "noiseg": 6, "gate": 6, "attack": 6, "expand": 6, "notch": 6, "centre_frequency_hz": 6, "1300": 6, "stage": 6, "sweep": 6, "magnitud": [6, 7], "affect": 6, "chri": 6, "cannam": 6, "wonder": 6, "stretch": 6, "plugincontain": 6, "intend": 6, "direct": [6, 7], "target_sample_r": [6, 7], "8000": 6, "downsampl": 6, "upsampl": 6, "zeroorderhold": 6, "lowest": 6, "fastest": [6, 7], "slightli": 6, "less": [6, 7], "noisi": 6, "simplest": 6, "catmullrom": 6, "moder": 6, "good": 6, "fast": 6, "lagrang": 6, "highest": 6, "slowest": [6, 7], "still": [6, 7], "mere": 6, "damp": 6, "33": 6, "dry_level": 6, "width": 6, "freeze_mod": 6, "stereo": [6, 7], "tune": 6, "freeverb": 6, "http": 6, "ccrma": 6, "stanford": 6, "edu": 6, "jo": 6, "pasp": 6, "html": 6, "_": 6, "oper": [6, 7], "build": 6, "arg0": [6, 7], "load_preset": 6, "preset_file_path": 6, "preset": 6, "vstpreset": 6, "xml": 6, "prefix": 6, "header": [6, 7], "suffix": 6, "null": 6, "stretch_factor": 6, "float64": [6, 7], "pitch_shift_in_semiton": 6, "high_qual": 6, "transient_mod": 6, "crisp": 6, "transient_detector": 6, "compound": 6, "retain_phase_continu": 6, "use_long_fft_window": 6, "use_time_domain_smooth": 6, "preserve_form": 6, "length": [6, 7], "shorten": 6, "doubl": 6, "halv": 6, "dure": [6, 7], "independ": 6, "worri": 6, "thei": 6, "precis": 6, "result": [6, 7], "slower": 6, "024": 6, "23": 6, "millisecond": 6, "grain": 6, "behavior": [6, 7], "stretcher": 6, "default": [6, 7], "transient": 6, "percuss": 6, "smooth": 6, "soft": 6, "phase": 6, "adjac": 6, "bin": 6, "kept": 6, "similar": 6, "softer": 6, "phasier": 6, "fourier": 6, "situat": [6, 7], "clariti": 6, "crisper": 6, "sharp": 6, "substanti": 6, "profil": 6, "formant": 6, "handl": 7, "behind": 7, "scene": 7, "my_filenam": 7, "441_000": 7, "necessari": 7, "accomplish": 7, "readableaudiofil": 7, "yourself": 7, "writeableaudiofil": 7, "resampledreadableaudiofil": 7, "probabl": 7, "cover": 7, "liter": 7, "r": 7, "file_lik": 7, "binaryio": 7, "memoryview": 7, "16": 7, "readabl": 7, "writeabl": 7, "unlik": 7, "typic": 7, "trail": 7, "b": 7, "redund": 7, "exist": 7, "seekabl": 7, "bytesio": 7, "stringio": 7, "my_fil": 7, "first_ten_second": 7, "ogg_buff": 7, "get_audio_buff": 7, "22_050": 7, "white_nois": 7, "wav_buff": 7, "getvalu": 7, "mp3_buffer": 7, "flac_buff": 7, "160": 7, "kilobit": 7, "re": 7, "four": 7, "1024": 7, "constructor": 7, "actual": 7, "buf": 7, "effici": 7, "consum": 7, "larg": 7, "arbitrari": 7, "recommend": 7, "allow_feedback": 7, "num_input_channel": 7, "num_output_channel": 7, "devic": 7, "microphon": 7, "headphon": 7, "plai": 7, "my_audio_fil": 7, "Or": 7, "loop": 7, "output_devic": 7, "512": 7, "default_input_device_nam": 7, "default_output_device_nam": 7, "In": 7, "delet": 7, "del": 7, "synchron": 7, "context": 7, "manag": 7, "never": 7, "left": 7, "dangl": 7, "__enter__": 7, "nasti": 7, "longer": 7, "reachabl": 7, "scope": 7, "continu": 7, "forev": 7, "won": 7, "exit": 7, "easier": 7, "cleanup": 7, "immedi": 7, "send": 7, "__exit__": 7, "arg1": 7, "arg2": 7, "usabl": 7, "finish": 7, "num_sampl": 7, "record": 7, "doesn": 7, "quickli": 7, "lost": 7, "drop": 7, "disabl": 7, "ignore_dropped_input": 7, "sinc": 7, "retriev": 7, "dropped_input_frame_count": 7, "streamresampl": 7, "hardwar": 7, "buffered_input_sample_count": 7, "rapidli": 7, "prevent": 7, "often": 7, "recent": 7, "unaffect": 7, "otherwis": 7, "wrap": 7, "vorbi": 7, "3g2": 7, "3gp": 7, "adt": 7, "aif": 7, "aifc": 7, "amr": 7, "au": 7, "bwf": 7, "caf": 7, "ec3": 7, "latm": 7, "loa": 7, "m4a": 7, "m4b": 7, "m4r": 7, "mov": 7, "mp1": 7, "mp2": 7, "mp4": 7, "mpa": 7, "mpeg": 7, "qt": 7, "sd2": 7, "snd": 7, "w64": 7, "xhe": 7, "get_supported_read_format": 7, "extens": 7, "certain": 7, "too": 7, "unus": 7, "num_fram": 7, "posit": 7, "decept": 7, "hour": 7, "long": 7, "hand": 7, "megabyt": 7, "decompress": 7, "nearli": 7, "gigabyt": 7, "debug": 7, "problem": 7, "dimension": 7, "fill": 7, "exact_duration_known": 7, "occur": 7, "minimum": 7, "0f": 7, "maximum": 7, "fraction": 7, "01": 7, "00": 7, "read_raw": 7, "int8": 7, "int16": 7, "int32": 7, "constant": 7, "seek": 7, "locat": 7, "futur": 7, "pointer": 7, "divid": 7, "overestim": 7, "exact": 7, "estim": 7, "bitrat": 7, "ever": 7, "file_dtyp": 7, "regardless": 7, "441": 7, "discrep": 7, "due": [6, 7], "fact": 7, "xing": 7, "info": 7, "forc": 7, "pars": 7, "correct": 7, "behaviour": 7, "later": 7, "prior": 7, "lack": 7, "audio_fil": 7, "resampling_qu": 7, "22050": 7, "hood": 7, "potenti": 7, "unbound": 7, "obtain": 7, "benefit": 7, "respect": 7, "push": 7, "optim": 7, "retain": 7, "accuraci": 7, "22": 7, "050": 7, "source_sample_r": 7, "flush": 7, "input_lat": 7, "suppli": 7, "get_supported_write_format": 7, "filename_or_file_lik": 7, "level": 7, "numer": 7, "128": 7, "256": 7, "advanc": 7, "v2": 7, "best": 7, "reliabl": 7, "typeerror": 7, "abl": 7, "infer": 7, "cach": 7, "writableaudiofil": 7, "disambigu": 7, "But": 7, "And": 7, "hint": 7, "anyth": 7, "noth": 7, "far": 7, "increment": 7, "kbp": 7, "v9": 7, "reported_latency_sampl": 6, "latenc": 6, "correctli": 6, "inaccur": 6, "especi": 6, "preset_data": 6, "compens": 6, "purpos": 6}, "objects": {"": [[6, 0, 0, "-", "pedalboard"]], "pedalboard": [[6, 1, 1, "", "AudioProcessorParameter"], [6, 1, 1, "", "AudioUnitPlugin"], [6, 1, 1, "", "Bitcrush"], [6, 1, 1, "", "Chain"], [6, 1, 1, "", "Chorus"], [6, 1, 1, "", "Clipping"], [6, 1, 1, "", "Compressor"], [6, 1, 1, "", "Convolution"], [6, 1, 1, "", "Delay"], [6, 1, 1, "", "Distortion"], [6, 1, 1, "", "ExternalPlugin"], [6, 1, 1, "", "GSMFullRateCompressor"], [6, 1, 1, "", "Gain"], [6, 1, 1, "", "HighShelfFilter"], [6, 1, 1, "", "HighpassFilter"], [6, 1, 1, "", "IIRFilter"], [6, 1, 1, "", "Invert"], [6, 1, 1, "", "LadderFilter"], [6, 1, 1, "", "Limiter"], [6, 1, 1, "", "LowShelfFilter"], [6, 1, 1, "", "LowpassFilter"], [6, 1, 1, "", "MP3Compressor"], [6, 1, 1, "", "Mix"], [6, 1, 1, "", "NoiseGate"], [6, 1, 1, "", "PeakFilter"], [6, 1, 1, "", "Pedalboard"], [6, 1, 1, "", "Phaser"], [6, 1, 1, "", "PitchShift"], [6, 1, 1, "", "Plugin"], [6, 1, 1, "", "PluginContainer"], [6, 1, 1, "", "Resample"], [6, 1, 1, "", "Reverb"], [6, 1, 1, "", "VST3Plugin"], [7, 0, 0, "-", "io"], [6, 5, 1, "", "load_plugin"], [6, 5, 1, "", "time_stretch"]], "pedalboard.AudioProcessorParameter": [[6, 2, 1, "", "label"], [6, 2, 1, "", "units"]], "pedalboard.AudioUnitPlugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "category"], [6, 2, 1, "", "descriptive_name"], [6, 3, 1, "", "get_plugin_names_for_file"], [6, 2, 1, "", "has_shared_container"], [6, 2, 1, "", "identifier"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 2, 1, "", "manufacturer_name"], [6, 2, 1, "", "name"], [6, 3, 1, "", "process"], [6, 2, 1, "", "raw_state"], [6, 2, 1, "", "reported_latency_samples"], [6, 3, 1, "", "reset"], [6, 3, 1, "", "show_editor"], [6, 2, 1, "", "version"]], "pedalboard.Bitcrush": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "bit_depth"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Chain": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.Chorus": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 2, 1, "", "rate_hz"], [6, 3, 1, "", "reset"]], "pedalboard.Clipping": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Compressor": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Convolution": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Delay": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Distortion": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.ExternalPlugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.GSMFullRateCompressor": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Gain": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.HighShelfFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.HighpassFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.IIRFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Invert": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LadderFilter": [[6, 1, 1, "", "Mode"], [6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LadderFilter.Mode": [[6, 4, 1, "", "BPF12"], [6, 4, 1, "", "BPF24"], [6, 4, 1, "", "HPF12"], [6, 4, 1, "", "HPF24"], [6, 4, 1, "", "LPF12"], [6, 4, 1, "", "LPF24"]], "pedalboard.Limiter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LowShelfFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LowpassFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.MP3Compressor": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Mix": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.NoiseGate": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.PeakFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Pedalboard": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.Phaser": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.PitchShift": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Plugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.PluginContainer": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.Resample": [[6, 1, 1, "", "Quality"], [6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 2, 1, "", "quality"], [6, 3, 1, "", "reset"], [6, 2, 1, "", "target_sample_rate"]], "pedalboard.Resample.Quality": [[6, 4, 1, "", "CatmullRom"], [6, 4, 1, "", "Lagrange"], [6, 4, 1, "", "Linear"], [6, 4, 1, "", "WindowedSinc"], [6, 4, 1, "", "ZeroOrderHold"]], "pedalboard.Reverb": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.VST3Plugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "category"], [6, 2, 1, "", "descriptive_name"], [6, 3, 1, "", "get_plugin_names_for_file"], [6, 2, 1, "", "has_shared_container"], [6, 2, 1, "", "identifier"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "load_preset"], [6, 2, 1, "", "manufacturer_name"], [6, 2, 1, "", "name"], [6, 2, 1, "", "preset_data"], [6, 3, 1, "", "process"], [6, 2, 1, "", "raw_state"], [6, 2, 1, "", "reported_latency_samples"], [6, 3, 1, "", "reset"], [6, 3, 1, "", "show_editor"], [6, 2, 1, "", "version"]], "pedalboard.io": [[7, 1, 1, "", "AudioFile"], [7, 1, 1, "", "AudioStream"], [7, 1, 1, "", "ReadableAudioFile"], [7, 1, 1, "", "ResampledReadableAudioFile"], [7, 1, 1, "", "StreamResampler"], [7, 1, 1, "", "WriteableAudioFile"]], "pedalboard.io.AudioFile": [[7, 3, 1, "", "encode"]], "pedalboard.io.AudioStream": [[7, 3, 1, "", "__enter__"], [7, 3, 1, "", "__exit__"], [7, 2, 1, "", "buffer_size"], [7, 2, 1, "", "buffered_input_sample_count"], [7, 3, 1, "", "close"], [7, 2, 1, "", "dropped_input_frame_count"], [7, 2, 1, "", "ignore_dropped_input"], [7, 2, 1, "", "num_input_channels"], [7, 2, 1, "", "num_output_channels"], [7, 3, 1, "", "play"], [7, 2, 1, "", "plugins"], [7, 3, 1, "", "read"], [7, 3, 1, "", "run"], [7, 2, 1, "", "running"], [7, 2, 1, "", "sample_rate"], [7, 3, 1, "", "write"]], "pedalboard.io.ReadableAudioFile": [[7, 3, 1, "", "__enter__"], [7, 3, 1, "", "__exit__"], [7, 3, 1, "", "close"], [7, 2, 1, "", "closed"], [7, 2, 1, "", "duration"], [7, 2, 1, "", "exact_duration_known"], [7, 2, 1, "", "file_dtype"], [7, 2, 1, "", "frames"], [7, 2, 1, "", "name"], [7, 2, 1, "", "num_channels"], [7, 3, 1, "", "read"], [7, 3, 1, "", "read_raw"], [7, 3, 1, "", "resampled_to"], [7, 2, 1, "", "samplerate"], [7, 3, 1, "", "seek"], [7, 3, 1, "", "seekable"], [7, 3, 1, "", "tell"]], "pedalboard.io.ResampledReadableAudioFile": [[7, 3, 1, "", "__enter__"], [7, 3, 1, "", "__exit__"], [7, 3, 1, "", "close"], [7, 2, 1, "", "closed"], [7, 2, 1, "", "duration"], [7, 2, 1, "", "exact_duration_known"], [7, 2, 1, "", "file_dtype"], [7, 2, 1, "", "frames"], [7, 2, 1, "", "name"], [7, 2, 1, "", "num_channels"], [7, 3, 1, "", "read"], [7, 2, 1, "", "resampling_quality"], [7, 2, 1, "", "samplerate"], [7, 3, 1, "", "seek"], [7, 3, 1, "", "seekable"], [7, 3, 1, "", "tell"]], "pedalboard.io.StreamResampler": [[7, 2, 1, "", "input_latency"], [7, 2, 1, "", "num_channels"], [7, 3, 1, "", "process"], [7, 2, 1, "", "quality"], [7, 3, 1, "", "reset"], [7, 2, 1, "", "source_sample_rate"], [7, 2, 1, "", "target_sample_rate"]], "pedalboard.io.WriteableAudioFile": [[7, 3, 1, "", "close"], [7, 2, 1, "", "closed"], [7, 2, 1, "", "file_dtype"], [7, 3, 1, "", "flush"], [7, 2, 1, "", "frames"], [7, 2, 1, "", "num_channels"], [7, 2, 1, "", "quality"], [7, 2, 1, "", "samplerate"], [7, 3, 1, "", "tell"], [7, 3, 1, "", "write"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:attribute", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"]}, "titleterms": {"plugin": [0, 1, 2, 4], "compat": [0, 3], "exampl": 1, "quick": 1, "start": 1, "make": 1, "guitar": 1, "style": 1, "pedalboard": [1, 2, 4, 6, 7], "us": [1, 2], "vst3": 1, "audio": [1, 2], "unit": 1, "instrument": [1, 2], "effect": [1, 2], "creat": 1, "parallel": 1, "chain": 1, "run": 1, "live": [1, 2], "tf": 1, "data": 1, "pipelin": 1, "frequent": 2, "ask": 2, "question": 2, "can": 2, "real": 2, "time": 2, "doe": 2, "support": 2, "chang": 2, "": 2, "paramet": 2, "over": 2, "vst": 2, "instead": 2, "accept": 2, "midi": 2, "featur": 3, "instal": 3, "refer": 3, "document": 3, "intern": 4, "ad": 4, "new": 4, "built": 4, "design": 4, "consider": 4, "licens": 5, "The": [6, 7], "api": [6, 7], "io": 7}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Plugin Compatibility": [[0, "plugin-compatibility"]], "Examples": [[1, "examples"]], "Quick start": [[1, "quick-start"]], "Making a guitar-style pedalboard": [[1, "making-a-guitar-style-pedalboard"]], "Using VST3\u00ae or Audio Unit instrument and effect plugins": [[1, "using-vst3-or-audio-unit-instrument-and-effect-plugins"]], "Creating parallel effects chains": [[1, "creating-parallel-effects-chains"]], "Running Pedalboard on Live Audio": [[1, "running-pedalboard-on-live-audio"]], "Using Pedalboard in tf.data Pipelines": [[1, "using-pedalboard-in-tf-data-pipelines"]], "Frequently Asked Questions": [[2, "frequently-asked-questions"]], "Can Pedalboard be used with live (real-time) audio?": [[2, "can-pedalboard-be-used-with-live-real-time-audio"]], "Does Pedalboard support changing a plugin\u2019s parameters over time?": [[2, "does-pedalboard-support-changing-a-plugin-s-parameters-over-time"]], "Can Pedalboard be used with VST instruments, instead of effects?": [[2, "can-pedalboard-be-used-with-vst-instruments-instead-of-effects"]], "Can Pedalboard plugins accept MIDI?": [[2, "can-pedalboard-plugins-accept-midi"]], "Features": [[3, "features"]], "Installation": [[3, "installation"]], "Compatibility": [[3, "compatibility"]], "Reference": [[3, "reference"]], "Documentation": [[3, "documentation"]], "Pedalboard Internals": [[4, "pedalboard-internals"]], "Adding new built-in Pedalboard plugins": [[4, "adding-new-built-in-pedalboard-plugins"]], "Design considerations": [[4, "design-considerations"]], "License": [[5, "license"]], "The pedalboard API": [[6, "the-pedalboard-api"]], "The pedalboard.io API": [[7, "the-pedalboard-io-api"]]}, "indexentries": {"audioprocessorparameter (class in pedalboard)": [[6, "pedalboard.AudioProcessorParameter"]], "audiounitplugin (class in pedalboard)": [[6, "pedalboard.AudioUnitPlugin"]], "bpf12 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.BPF12"]], "bpf24 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.BPF24"]], "bitcrush (class in pedalboard)": [[6, "pedalboard.Bitcrush"]], "catmullrom (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.CatmullRom"]], "chain (class in pedalboard)": [[6, "pedalboard.Chain"]], "chorus (class in pedalboard)": [[6, "pedalboard.Chorus"]], "clipping (class in pedalboard)": [[6, "pedalboard.Clipping"]], "compressor (class in pedalboard)": [[6, "pedalboard.Compressor"]], "convolution (class in pedalboard)": [[6, "pedalboard.Convolution"]], "delay (class in pedalboard)": [[6, "pedalboard.Delay"]], "distortion (class in pedalboard)": [[6, "pedalboard.Distortion"]], "externalplugin (class in pedalboard)": [[6, "pedalboard.ExternalPlugin"]], "gsmfullratecompressor (class in pedalboard)": [[6, "pedalboard.GSMFullRateCompressor"]], "gain (class in pedalboard)": [[6, "pedalboard.Gain"]], "hpf12 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.HPF12"]], "hpf24 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.HPF24"]], "highshelffilter (class in pedalboard)": [[6, "pedalboard.HighShelfFilter"]], "highpassfilter (class in pedalboard)": [[6, "pedalboard.HighpassFilter"]], "iirfilter (class in pedalboard)": [[6, "pedalboard.IIRFilter"]], "invert (class in pedalboard)": [[6, "pedalboard.Invert"]], "lpf12 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.LPF12"]], "lpf24 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.LPF24"]], "ladderfilter (class in pedalboard)": [[6, "pedalboard.LadderFilter"]], "ladderfilter.mode (class in pedalboard)": [[6, "pedalboard.LadderFilter.Mode"]], "lagrange (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.Lagrange"]], "limiter (class in pedalboard)": [[6, "pedalboard.Limiter"]], "linear (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.Linear"]], "lowshelffilter (class in pedalboard)": [[6, "pedalboard.LowShelfFilter"]], "lowpassfilter (class in pedalboard)": [[6, "pedalboard.LowpassFilter"]], "mp3compressor (class in pedalboard)": [[6, "pedalboard.MP3Compressor"]], "mix (class in pedalboard)": [[6, "pedalboard.Mix"]], "noisegate (class in pedalboard)": [[6, "pedalboard.NoiseGate"]], "peakfilter (class in pedalboard)": [[6, "pedalboard.PeakFilter"]], "pedalboard (class in pedalboard)": [[6, "pedalboard.Pedalboard"]], "phaser (class in pedalboard)": [[6, "pedalboard.Phaser"]], "pitchshift (class in pedalboard)": [[6, "pedalboard.PitchShift"]], "plugin (class in pedalboard)": [[6, "pedalboard.Plugin"]], "plugincontainer (class in pedalboard)": [[6, "pedalboard.PluginContainer"]], "resample (class in pedalboard)": [[6, "pedalboard.Resample"]], "resample.quality (class in pedalboard)": [[6, "pedalboard.Resample.Quality"]], "reverb (class in pedalboard)": [[6, "pedalboard.Reverb"]], "vst3plugin (class in pedalboard)": [[6, "pedalboard.VST3Plugin"]], "windowedsinc (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.WindowedSinc"]], "zeroorderhold (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.ZeroOrderHold"]], "__call__() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.__call__"]], "__call__() (pedalboard.bitcrush method)": [[6, "pedalboard.Bitcrush.__call__"]], "__call__() (pedalboard.chain method)": [[6, "pedalboard.Chain.__call__"]], "__call__() (pedalboard.chorus method)": [[6, "pedalboard.Chorus.__call__"]], "__call__() (pedalboard.clipping method)": [[6, "pedalboard.Clipping.__call__"]], "__call__() (pedalboard.compressor method)": [[6, "pedalboard.Compressor.__call__"]], "__call__() (pedalboard.convolution method)": [[6, "pedalboard.Convolution.__call__"]], "__call__() (pedalboard.delay method)": [[6, "pedalboard.Delay.__call__"]], "__call__() (pedalboard.distortion method)": [[6, "pedalboard.Distortion.__call__"]], "__call__() (pedalboard.externalplugin method)": [[6, "pedalboard.ExternalPlugin.__call__"]], "__call__() (pedalboard.gsmfullratecompressor method)": [[6, "pedalboard.GSMFullRateCompressor.__call__"]], "__call__() (pedalboard.gain method)": [[6, "pedalboard.Gain.__call__"]], "__call__() (pedalboard.highshelffilter method)": [[6, "pedalboard.HighShelfFilter.__call__"]], "__call__() (pedalboard.highpassfilter method)": [[6, "pedalboard.HighpassFilter.__call__"]], "__call__() (pedalboard.iirfilter method)": [[6, "pedalboard.IIRFilter.__call__"]], "__call__() (pedalboard.invert method)": [[6, "pedalboard.Invert.__call__"]], "__call__() (pedalboard.ladderfilter method)": [[6, "pedalboard.LadderFilter.__call__"]], "__call__() (pedalboard.limiter method)": [[6, "pedalboard.Limiter.__call__"]], "__call__() (pedalboard.lowshelffilter method)": [[6, "pedalboard.LowShelfFilter.__call__"]], "__call__() (pedalboard.lowpassfilter method)": [[6, "pedalboard.LowpassFilter.__call__"]], "__call__() (pedalboard.mp3compressor method)": [[6, "pedalboard.MP3Compressor.__call__"]], "__call__() (pedalboard.mix method)": [[6, "pedalboard.Mix.__call__"]], "__call__() (pedalboard.noisegate method)": [[6, "pedalboard.NoiseGate.__call__"]], "__call__() (pedalboard.peakfilter method)": [[6, "pedalboard.PeakFilter.__call__"]], "__call__() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.__call__"]], "__call__() (pedalboard.phaser method)": [[6, "pedalboard.Phaser.__call__"]], "__call__() (pedalboard.pitchshift method)": [[6, "pedalboard.PitchShift.__call__"]], "__call__() (pedalboard.plugin method)": [[6, "pedalboard.Plugin.__call__"]], "__call__() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.__call__"]], "__call__() (pedalboard.resample method)": [[6, "pedalboard.Resample.__call__"]], "__call__() (pedalboard.reverb method)": [[6, "pedalboard.Reverb.__call__"]], "__call__() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.__call__"]], "append() (pedalboard.chain method)": [[6, "pedalboard.Chain.append"]], "append() (pedalboard.mix method)": [[6, "pedalboard.Mix.append"]], "append() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.append"]], "append() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.append"]], "bit_depth (pedalboard.bitcrush property)": [[6, "pedalboard.Bitcrush.bit_depth"]], "category (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.category"]], "category (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.category"]], "descriptive_name (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.descriptive_name"]], "descriptive_name (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.descriptive_name"]], "get_plugin_names_for_file() (pedalboard.audiounitplugin static method)": [[6, "pedalboard.AudioUnitPlugin.get_plugin_names_for_file"]], "get_plugin_names_for_file() (pedalboard.vst3plugin static method)": [[6, "pedalboard.VST3Plugin.get_plugin_names_for_file"]], "has_shared_container (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.has_shared_container"]], "has_shared_container (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.has_shared_container"]], "identifier (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.identifier"]], "identifier (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.identifier"]], "insert() (pedalboard.chain method)": [[6, "pedalboard.Chain.insert"]], "insert() (pedalboard.mix method)": [[6, "pedalboard.Mix.insert"]], "insert() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.insert"]], "insert() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.insert"]], "is_effect (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.is_effect"]], "is_effect (pedalboard.bitcrush property)": [[6, "pedalboard.Bitcrush.is_effect"]], "is_effect (pedalboard.chain property)": [[6, "pedalboard.Chain.is_effect"]], "is_effect (pedalboard.chorus property)": [[6, "pedalboard.Chorus.is_effect"]], "is_effect (pedalboard.clipping property)": [[6, "pedalboard.Clipping.is_effect"]], "is_effect (pedalboard.compressor property)": [[6, "pedalboard.Compressor.is_effect"]], "is_effect (pedalboard.convolution property)": [[6, "pedalboard.Convolution.is_effect"]], "is_effect (pedalboard.delay property)": [[6, "pedalboard.Delay.is_effect"]], "is_effect (pedalboard.distortion property)": [[6, "pedalboard.Distortion.is_effect"]], "is_effect (pedalboard.externalplugin property)": [[6, "pedalboard.ExternalPlugin.is_effect"]], "is_effect (pedalboard.gsmfullratecompressor property)": [[6, "pedalboard.GSMFullRateCompressor.is_effect"]], "is_effect (pedalboard.gain property)": [[6, "pedalboard.Gain.is_effect"]], "is_effect (pedalboard.highshelffilter property)": [[6, "pedalboard.HighShelfFilter.is_effect"]], "is_effect (pedalboard.highpassfilter property)": [[6, "pedalboard.HighpassFilter.is_effect"]], "is_effect (pedalboard.iirfilter property)": [[6, "pedalboard.IIRFilter.is_effect"]], "is_effect (pedalboard.invert property)": [[6, "pedalboard.Invert.is_effect"]], "is_effect (pedalboard.ladderfilter property)": [[6, "pedalboard.LadderFilter.is_effect"]], "is_effect (pedalboard.limiter property)": [[6, "pedalboard.Limiter.is_effect"]], "is_effect (pedalboard.lowshelffilter property)": [[6, "pedalboard.LowShelfFilter.is_effect"]], "is_effect (pedalboard.lowpassfilter property)": [[6, "pedalboard.LowpassFilter.is_effect"]], "is_effect (pedalboard.mp3compressor property)": [[6, "pedalboard.MP3Compressor.is_effect"]], "is_effect (pedalboard.mix property)": [[6, "pedalboard.Mix.is_effect"]], "is_effect (pedalboard.noisegate property)": [[6, "pedalboard.NoiseGate.is_effect"]], "is_effect (pedalboard.peakfilter property)": [[6, "pedalboard.PeakFilter.is_effect"]], "is_effect (pedalboard.pedalboard property)": [[6, "pedalboard.Pedalboard.is_effect"]], "is_effect (pedalboard.phaser property)": [[6, "pedalboard.Phaser.is_effect"]], "is_effect (pedalboard.pitchshift property)": [[6, "pedalboard.PitchShift.is_effect"]], "is_effect (pedalboard.plugin property)": [[6, "pedalboard.Plugin.is_effect"]], "is_effect (pedalboard.plugincontainer property)": [[6, "pedalboard.PluginContainer.is_effect"]], "is_effect (pedalboard.resample property)": [[6, "pedalboard.Resample.is_effect"]], "is_effect (pedalboard.reverb property)": [[6, "pedalboard.Reverb.is_effect"]], "is_effect (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.is_effect"]], "is_instrument (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.is_instrument"]], "is_instrument (pedalboard.bitcrush property)": [[6, "pedalboard.Bitcrush.is_instrument"]], "is_instrument (pedalboard.chain property)": [[6, "pedalboard.Chain.is_instrument"]], "is_instrument (pedalboard.chorus property)": [[6, "pedalboard.Chorus.is_instrument"]], "is_instrument (pedalboard.clipping property)": [[6, "pedalboard.Clipping.is_instrument"]], "is_instrument (pedalboard.compressor property)": [[6, "pedalboard.Compressor.is_instrument"]], "is_instrument (pedalboard.convolution property)": [[6, "pedalboard.Convolution.is_instrument"]], "is_instrument (pedalboard.delay property)": [[6, "pedalboard.Delay.is_instrument"]], "is_instrument (pedalboard.distortion property)": [[6, "pedalboard.Distortion.is_instrument"]], "is_instrument (pedalboard.externalplugin property)": [[6, "pedalboard.ExternalPlugin.is_instrument"]], "is_instrument (pedalboard.gsmfullratecompressor property)": [[6, "pedalboard.GSMFullRateCompressor.is_instrument"]], "is_instrument (pedalboard.gain property)": [[6, "pedalboard.Gain.is_instrument"]], "is_instrument (pedalboard.highshelffilter property)": [[6, "pedalboard.HighShelfFilter.is_instrument"]], "is_instrument (pedalboard.highpassfilter property)": [[6, "pedalboard.HighpassFilter.is_instrument"]], "is_instrument (pedalboard.iirfilter property)": [[6, "pedalboard.IIRFilter.is_instrument"]], "is_instrument (pedalboard.invert property)": [[6, "pedalboard.Invert.is_instrument"]], "is_instrument (pedalboard.ladderfilter property)": [[6, "pedalboard.LadderFilter.is_instrument"]], "is_instrument (pedalboard.limiter property)": [[6, "pedalboard.Limiter.is_instrument"]], "is_instrument (pedalboard.lowshelffilter property)": [[6, "pedalboard.LowShelfFilter.is_instrument"]], "is_instrument (pedalboard.lowpassfilter property)": [[6, "pedalboard.LowpassFilter.is_instrument"]], "is_instrument (pedalboard.mp3compressor property)": [[6, "pedalboard.MP3Compressor.is_instrument"]], "is_instrument (pedalboard.mix property)": [[6, "pedalboard.Mix.is_instrument"]], "is_instrument (pedalboard.noisegate property)": [[6, "pedalboard.NoiseGate.is_instrument"]], "is_instrument (pedalboard.peakfilter property)": [[6, "pedalboard.PeakFilter.is_instrument"]], "is_instrument (pedalboard.pedalboard property)": [[6, "pedalboard.Pedalboard.is_instrument"]], "is_instrument (pedalboard.phaser property)": [[6, "pedalboard.Phaser.is_instrument"]], "is_instrument (pedalboard.pitchshift property)": [[6, "pedalboard.PitchShift.is_instrument"]], "is_instrument (pedalboard.plugin property)": [[6, "pedalboard.Plugin.is_instrument"]], "is_instrument (pedalboard.plugincontainer property)": [[6, "pedalboard.PluginContainer.is_instrument"]], "is_instrument (pedalboard.resample property)": [[6, "pedalboard.Resample.is_instrument"]], "is_instrument (pedalboard.reverb property)": [[6, "pedalboard.Reverb.is_instrument"]], "is_instrument (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.is_instrument"]], "label (pedalboard.audioprocessorparameter property)": [[6, "pedalboard.AudioProcessorParameter.label"]], "load_plugin() (in module pedalboard)": [[6, "pedalboard.load_plugin"]], "load_preset() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.load_preset"]], "manufacturer_name (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.manufacturer_name"]], "manufacturer_name (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.manufacturer_name"]], "module": [[6, "module-pedalboard"], [7, "module-pedalboard.io"]], "name (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.name"]], "name (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.name"]], "pedalboard": [[6, "module-pedalboard"]], "preset_data (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.preset_data"]], "process() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.process"]], "process() (pedalboard.bitcrush method)": [[6, "pedalboard.Bitcrush.process"]], "process() (pedalboard.chain method)": [[6, "pedalboard.Chain.process"]], "process() (pedalboard.chorus method)": [[6, "pedalboard.Chorus.process"]], "process() (pedalboard.clipping method)": [[6, "pedalboard.Clipping.process"]], "process() (pedalboard.compressor method)": [[6, "pedalboard.Compressor.process"]], "process() (pedalboard.convolution method)": [[6, "pedalboard.Convolution.process"]], "process() (pedalboard.delay method)": [[6, "pedalboard.Delay.process"]], "process() (pedalboard.distortion method)": [[6, "pedalboard.Distortion.process"]], "process() (pedalboard.externalplugin method)": [[6, "pedalboard.ExternalPlugin.process"]], "process() (pedalboard.gsmfullratecompressor method)": [[6, "pedalboard.GSMFullRateCompressor.process"]], "process() (pedalboard.gain method)": [[6, "pedalboard.Gain.process"]], "process() (pedalboard.highshelffilter method)": [[6, "pedalboard.HighShelfFilter.process"]], "process() (pedalboard.highpassfilter method)": [[6, "pedalboard.HighpassFilter.process"]], "process() (pedalboard.iirfilter method)": [[6, "pedalboard.IIRFilter.process"]], "process() (pedalboard.invert method)": [[6, "pedalboard.Invert.process"]], "process() (pedalboard.ladderfilter method)": [[6, "pedalboard.LadderFilter.process"]], "process() (pedalboard.limiter method)": [[6, "pedalboard.Limiter.process"]], "process() (pedalboard.lowshelffilter method)": [[6, "pedalboard.LowShelfFilter.process"]], "process() (pedalboard.lowpassfilter method)": [[6, "pedalboard.LowpassFilter.process"]], "process() (pedalboard.mp3compressor method)": [[6, "pedalboard.MP3Compressor.process"]], "process() (pedalboard.mix method)": [[6, "pedalboard.Mix.process"]], "process() (pedalboard.noisegate method)": [[6, "pedalboard.NoiseGate.process"]], "process() (pedalboard.peakfilter method)": [[6, "pedalboard.PeakFilter.process"]], "process() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.process"]], "process() (pedalboard.phaser method)": [[6, "pedalboard.Phaser.process"]], "process() (pedalboard.pitchshift method)": [[6, "pedalboard.PitchShift.process"]], "process() (pedalboard.plugin method)": [[6, "pedalboard.Plugin.process"]], "process() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.process"]], "process() (pedalboard.resample method)": [[6, "pedalboard.Resample.process"]], "process() (pedalboard.reverb method)": [[6, "pedalboard.Reverb.process"]], "process() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.process"]], "quality (pedalboard.resample property)": [[6, "pedalboard.Resample.quality"]], "rate_hz (pedalboard.chorus property)": [[6, "pedalboard.Chorus.rate_hz"]], "raw_state (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.raw_state"]], "raw_state (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.raw_state"]], "remove() (pedalboard.chain method)": [[6, "pedalboard.Chain.remove"]], "remove() (pedalboard.mix method)": [[6, "pedalboard.Mix.remove"]], "remove() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.remove"]], "remove() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.remove"]], "reported_latency_samples (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.reported_latency_samples"]], "reported_latency_samples (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.reported_latency_samples"]], "reset() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.reset"]], "reset() (pedalboard.bitcrush method)": [[6, "pedalboard.Bitcrush.reset"]], "reset() (pedalboard.chain method)": [[6, "pedalboard.Chain.reset"]], "reset() (pedalboard.chorus method)": [[6, "pedalboard.Chorus.reset"]], "reset() (pedalboard.clipping method)": [[6, "pedalboard.Clipping.reset"]], "reset() (pedalboard.compressor method)": [[6, "pedalboard.Compressor.reset"]], "reset() (pedalboard.convolution method)": [[6, "pedalboard.Convolution.reset"]], "reset() (pedalboard.delay method)": [[6, "pedalboard.Delay.reset"]], "reset() (pedalboard.distortion method)": [[6, "pedalboard.Distortion.reset"]], "reset() (pedalboard.externalplugin method)": [[6, "pedalboard.ExternalPlugin.reset"]], "reset() (pedalboard.gsmfullratecompressor method)": [[6, "pedalboard.GSMFullRateCompressor.reset"]], "reset() (pedalboard.gain method)": [[6, "pedalboard.Gain.reset"]], "reset() (pedalboard.highshelffilter method)": [[6, "pedalboard.HighShelfFilter.reset"]], "reset() (pedalboard.highpassfilter method)": [[6, "pedalboard.HighpassFilter.reset"]], "reset() (pedalboard.iirfilter method)": [[6, "pedalboard.IIRFilter.reset"]], "reset() (pedalboard.invert method)": [[6, "pedalboard.Invert.reset"]], "reset() (pedalboard.ladderfilter method)": [[6, "pedalboard.LadderFilter.reset"]], "reset() (pedalboard.limiter method)": [[6, "pedalboard.Limiter.reset"]], "reset() (pedalboard.lowshelffilter method)": [[6, "pedalboard.LowShelfFilter.reset"]], "reset() (pedalboard.lowpassfilter method)": [[6, "pedalboard.LowpassFilter.reset"]], "reset() (pedalboard.mp3compressor method)": [[6, "pedalboard.MP3Compressor.reset"]], "reset() (pedalboard.mix method)": [[6, "pedalboard.Mix.reset"]], "reset() (pedalboard.noisegate method)": [[6, "pedalboard.NoiseGate.reset"]], "reset() (pedalboard.peakfilter method)": [[6, "pedalboard.PeakFilter.reset"]], "reset() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.reset"]], "reset() (pedalboard.phaser method)": [[6, "pedalboard.Phaser.reset"]], "reset() (pedalboard.pitchshift method)": [[6, "pedalboard.PitchShift.reset"]], "reset() (pedalboard.plugin method)": [[6, "pedalboard.Plugin.reset"]], "reset() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.reset"]], "reset() (pedalboard.resample method)": [[6, "pedalboard.Resample.reset"]], "reset() (pedalboard.reverb method)": [[6, "pedalboard.Reverb.reset"]], "reset() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.reset"]], "show_editor() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.show_editor"]], "show_editor() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.show_editor"]], "target_sample_rate (pedalboard.resample property)": [[6, "pedalboard.Resample.target_sample_rate"]], "time_stretch() (in module pedalboard)": [[6, "pedalboard.time_stretch"]], "units (pedalboard.audioprocessorparameter property)": [[6, "pedalboard.AudioProcessorParameter.units"]], "version (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.version"]], "version (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.version"]], "audiofile (class in pedalboard.io)": [[7, "pedalboard.io.AudioFile"]], "audiostream (class in pedalboard.io)": [[7, "pedalboard.io.AudioStream"]], "readableaudiofile (class in pedalboard.io)": [[7, "pedalboard.io.ReadableAudioFile"]], "resampledreadableaudiofile (class in pedalboard.io)": [[7, "pedalboard.io.ResampledReadableAudioFile"]], "streamresampler (class in pedalboard.io)": [[7, "pedalboard.io.StreamResampler"]], "writeableaudiofile (class in pedalboard.io)": [[7, "pedalboard.io.WriteableAudioFile"]], "__enter__() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.__enter__"]], "__enter__() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.__enter__"]], "__enter__() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.__enter__"]], "__exit__() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.__exit__"]], "__exit__() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.__exit__"]], "__exit__() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.__exit__"]], "buffer_size (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.buffer_size"]], "buffered_input_sample_count (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.buffered_input_sample_count"]], "close() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.close"]], "close() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.close"]], "close() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.close"]], "close() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.close"]], "closed (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.closed"]], "closed (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.closed"]], "closed (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.closed"]], "dropped_input_frame_count (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.dropped_input_frame_count"]], "duration (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.duration"]], "duration (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.duration"]], "encode() (pedalboard.io.audiofile static method)": [[7, "pedalboard.io.AudioFile.encode"]], "exact_duration_known (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.exact_duration_known"]], "exact_duration_known (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.exact_duration_known"]], "file_dtype (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.file_dtype"]], "file_dtype (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.file_dtype"]], "file_dtype (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.file_dtype"]], "flush() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.flush"]], "frames (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.frames"]], "frames (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.frames"]], "frames (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.frames"]], "ignore_dropped_input (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.ignore_dropped_input"]], "input_latency (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.input_latency"]], "name (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.name"]], "name (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.name"]], "num_channels (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.num_channels"]], "num_channels (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.num_channels"]], "num_channels (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.num_channels"]], "num_channels (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.num_channels"]], "num_input_channels (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.num_input_channels"]], "num_output_channels (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.num_output_channels"]], "pedalboard.io": [[7, "module-pedalboard.io"]], "play() (pedalboard.io.audiostream static method)": [[7, "pedalboard.io.AudioStream.play"]], "plugins (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.plugins"]], "process() (pedalboard.io.streamresampler method)": [[7, "pedalboard.io.StreamResampler.process"]], "quality (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.quality"]], "quality (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.quality"]], "read() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.read"]], "read() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.read"]], "read() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.read"]], "read_raw() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.read_raw"]], "resampled_to() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.resampled_to"]], "resampling_quality (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.resampling_quality"]], "reset() (pedalboard.io.streamresampler method)": [[7, "pedalboard.io.StreamResampler.reset"]], "run() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.run"]], "running (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.running"]], "sample_rate (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.sample_rate"]], "samplerate (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.samplerate"]], "samplerate (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.samplerate"]], "samplerate (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.samplerate"]], "seek() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.seek"]], "seek() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.seek"]], "seekable() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.seekable"]], "seekable() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.seekable"]], "source_sample_rate (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.source_sample_rate"]], "target_sample_rate (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.target_sample_rate"]], "tell() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.tell"]], "tell() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.tell"]], "tell() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.tell"]], "write() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.write"]], "write() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.write"]]}}) \ No newline at end of file +Search.setIndex({"docnames": ["compatibility", "examples", "faq", "index", "internals", "license", "reference/pedalboard", "reference/pedalboard.io"], "filenames": ["compatibility.rst", "examples.rst", "faq.rst", "index.rst", "internals.rst", "license.rst", "reference/pedalboard.rst", "reference/pedalboard.io.rst"], "titles": ["Plugin Compatibility", "Examples", "Frequently Asked Questions", "Features", "Pedalboard Internals", "License", "The pedalboard API", "The pedalboard.io API"], "terms": {"pedalboard": [0, 3, 5], "allow": [0, 1, 3, 6, 7], "load": [0, 1, 3, 4, 6], "vst3": [0, 3, 4, 5, 6], "audio": [0, 3, 4, 5, 6, 7], "unit": [0, 2, 3, 4, 6], "which": [0, 5, 6, 7], "could": [0, 6, 7], "contain": [0, 1, 6, 7], "ani": [0, 2, 4, 6, 7], "code": [0, 2, 4, 5, 7], "most": [0, 3, 4, 6, 7], "have": [0, 4, 6, 7], "been": [0, 7], "test": [0, 3, 4], "work": [0, 1, 3, 6, 7], "just": [0, 1, 4, 6, 7], "fine": [0, 6], "some": [0, 1, 4, 6, 7], "mai": [0, 4, 6, 7], "worst": [0, 7], "even": [0, 3, 7], "crash": [0, 6, 7], "python": [0, 1, 3, 4, 6, 7], "interpret": [0, 3, 7], "without": [0, 3, 6, 7], "warn": [0, 7], "abil": [0, 6], "catch": 0, "error": [0, 6, 7], "ar": [0, 1, 3, 4, 5, 6, 7], "well": [0, 4, 6, 7], "behav": [0, 1], "conform": 0, "set": [0, 1, 2, 6, 7], "convent": 0, "how": [0, 1, 6], "suppos": 0, "mani": [0, 3, 6, 7], "do": [0, 1, 6, 7], "specif": [0, 6], "attempt": [0, 7], "detect": [0, 6], "common": [0, 3], "program": [0, 1, 6, 7], "can": [0, 1, 3, 4, 6, 7], "around": [0, 4, 6], "issu": [0, 4, 6], "includ": [0, 1, 3, 4, 5, 6], "automat": [0, 3, 6, 7], "don": [0, 1, 6, 7], "t": [0, 1, 2, 6, 7], "clear": [0, 6], "intern": [0, 3, 6, 7], "state": [0, 6, 7], "when": [0, 3, 4, 6, 7], "ask": [0, 3], "so": [0, 1, 2, 6, 7], "misbehav": 0, "notic": 0, "If": [0, 1, 3, 6, 7], "i": [0, 1, 2, 3, 4, 5, 6, 7], "being": [0, 7], "render": [0, 1, 2, 3, 6, 7], "incorrectli": 0, "leak": [0, 7], "from": [0, 1, 2, 3, 5, 6, 7], "one": [0, 1, 3, 6, 7], "process": [0, 1, 2, 3, 4, 5, 6, 7], "call": [0, 6, 7], "next": 0, "an": [0, 1, 4, 6, 7], "undesir": 0, "fashion": 0, "try": [0, 6, 7], "pass": [0, 1, 2, 6, 7], "silenc": 0, "between": [0, 2, 6, 7], "ensur": [0, 2, 4, 6, 7], "reverb": [0, 1, 2, 3, 6, 7], "tail": [0, 2, 6], "other": [0, 1, 3, 6, 7], "ha": [0, 1, 6, 7], "time": [0, 1, 3, 6, 7], "fade": 0, "reload": 0, "everi": [0, 4, 6, 7], "load_plugin": [0, 1, 3, 4, 6], "note": [1, 6, 7], "you": [1, 3, 6, 7], "d": [1, 7], "rather": [1, 7], "watch": 1, "video": 1, "instead": [1, 3, 6, 7], "read": [1, 2, 3, 6, 7], "document": [1, 6, 7], "feat": 1, "youtub": 1, "import": [1, 2, 4, 6, 7], "choru": [1, 3, 6], "io": [1, 2, 3, 6], "audiofil": [1, 2, 6, 7], "object": [1, 6, 7], "multipl": [1, 3, 6, 7], "board": [1, 2], "room_siz": [1, 6], "0": [1, 2, 6, 7], "25": [1, 6], "open": [1, 2, 4, 6, 7], "file": [1, 2, 3, 4, 6, 7], "like": [1, 3, 6, 7], "regular": [1, 6, 7], "wav": [1, 2, 3, 6, 7], "f": [1, 6, 7], "write": [1, 2, 3, 6, 7], "output": [1, 2, 6, 7], "w": [1, 2, 6, 7], "sampler": [1, 2, 6, 7], "num_channel": [1, 2, 6, 7], "o": [1, 2, 3, 6, 7], "second": [1, 6, 7], "until": [1, 6, 7], "empti": [1, 6], "while": [1, 2, 6, 7], "tell": [1, 7], "frame": [1, 2, 7], "chunk": [1, 2, 6, 7], "through": [1, 2, 6, 7], "our": [1, 2], "reset": [1, 2, 6, 7], "fals": [1, 2, 6, 7], "For": [1, 6, 7], "more": [1, 2, 3, 4, 6, 7], "inform": [1, 6, 7], "about": [1, 6, 7], "paramet": [1, 3, 6, 7], "see": [1, 2, 6, 7], "It": [1, 3], "thi": [1, 2, 5, 6, 7], "smaller": [1, 2, 6, 7], "whole": 1, "resampl": [1, 3, 6, 7], "desir": 1, "sampl": [1, 2, 6, 7], "rate": [1, 2, 6, 7], "44100": [1, 6, 7], "input": [1, 6, 7], "resampled_to": [1, 7], "pretti": 1, "interest": 1, "sound": [1, 6], "compressor": [1, 2, 3, 6], "threshold_db": [1, 6], "50": [1, 6], "ratio": [1, 6], "gain": [1, 3, 6], "gain_db": [1, 6], "30": [1, 7], "ladderfilt": [1, 3, 6], "mode": [1, 6, 7], "hpf12": [1, 6], "cutoff_hz": [1, 6], "900": 1, "phaser": [1, 3, 6], "convolut": [1, 3, 6], "guitar_amp": 1, "1": [1, 2, 3, 6, 7], "list": [1, 6, 7], "add": [1, 3, 4, 6, 7], "append": [1, 6, 7], "10": [1, 3, 6, 7], "limit": [1, 3, 6], "chang": [1, 3, 6, 7], "easili": 1, "40": 1, "back": [1, 6, 7], "shape": [1, 2, 7], "mido": [1, 6], "messag": [1, 2, 6], "part": [1, 6, 7], "conveni": [1, 6, 7], "known": 1, "path": [1, 6, 7], "disk": [1, 7], "vst": [1, 3, 5], "magical8bitplug2": 1, "roughrider3": 1, "print": [1, 6, 7], "kei": [1, 6], "dict_kei": 1, "sc_hpf_hz": 1, "input_lvl_db": 1, "sensitivity_db": 1, "attack_m": [1, 6], "release_m": [1, 6], "makeup_db": 1, "mix": [1, 6], "output_lvl_db": 1, "sc_activ": 1, "full_bandwidth": 1, "bypass": 1, "15": 1, "midi": [1, 3, 6], "sample_r": [1, 6, 7], "note_on": [1, 6], "60": [1, 6, 7], "note_off": [1, 6], "5": [1, 6], "durat": [1, 6, 7], "appli": [1, 6], "put": 1, "same": [1, 4, 6, 7], "instanc": [1, 4, 6, 7], "delai": [1, 3, 6], "pitch": [1, 3, 6], "shift": [1, 6], "themselv": [1, 6], "nest": [1, 6], "them": [1, 6], "much": [1, 6, 7], "distort": [1, 3, 6], "pitchshift": [1, 3, 5, 6], "passthrough": 1, "delay_and_pitch_shift": 1, "delay_second": [1, 6], "semiton": [1, 6], "7": [1, 2, 6, 7], "3": [1, 3, 6, 7], "delay_longer_and_more_pitch_shift": 1, "12": [1, 3, 6, 7], "6": [1, 5, 6, 7], "front": 1, "all": [1, 3, 4, 6, 7], "simultan": 1, "final": 1, "On": 1, "maco": [1, 3, 4, 6, 7], "window": [1, 3, 4, 6, 7], "support": [1, 3, 4, 6, 7], "stream": [1, 3, 6, 7], "audiostream": [1, 2, 3, 7], "real": [1, 3, 6, 7], "manipul": 1, "ad": [1, 3, 6, 7], "up": [1, 3, 5, 6], "input_device_nam": [1, 7], "apoge": 1, "jam": 1, "interfac": [1, 4, 6, 7], "output_device_nam": [1, 7], "macbook": 1, "pro": 1, "speaker": [1, 6, 7], "now": [1, 7], "out": [1, 3, 6, 7], "your": [1, 7], "press": [1, 6], "enter": [1, 7], "stop": [1, 7], "The": [1, 4, 5], "close": [1, 6, 7], "tensorflow": [1, 3], "sr": [1, 7], "48000": 1, "whatev": 1, "here": 1, "dataset": 1, "random": [1, 7], "nois": [1, 6], "train": 1, "": [1, 3, 4, 6, 7], "where": [1, 4, 6, 7], "want": [1, 7], "somehow": 1, "from_tensor_slic": 1, "np": [1, 7], "rand": [1, 7], "map": 1, "lambda": 1, "numpy_funct": 1, "float32": [1, 6, 7], "dummi": 1, "ml": 1, "model": [1, 3, 6], "kera": 1, "sequenti": 1, "layer": 1, "inputlay": 1, "input_shap": 1, "dens": 1, "compil": [1, 4, 5], "loss": 1, "mse": 1, "fit": 1, "batch": 1, "epoch": 1, "folder": 1, "repositori": [1, 4], "demo": 1, "colab": 1, "notebook": 1, "peter": 1, "sobot": 1, "europython": 1, "2022": 1, "interact": [1, 6, 7], "web": 1, "hug": 1, "face": 1, "space": 1, "gradio": 1, "via": [1, 3, 6, 7], "ak391": 1, "As": 2, "version": [2, 6, 7], "ye": 2, "class": [2, 6, 7], "detail": [2, 7], "built": [2, 3, 6], "function": [2, 4, 5, 6, 7], "possibl": [2, 3, 6, 7], "vari": [2, 6], "manual": [2, 3], "tqdm": 2, "step": 2, "size": [2, 4, 6, 7], "would": [2, 4, 6, 7], "give": [2, 6], "smoother": [2, 6], "transit": 2, "expens": [2, 6, 7], "speed": [2, 3, 4, 5, 6], "step_size_in_sampl": 2, "100": [2, 6, 7], "_n_": 2, "af": 2, "we": 2, "directli": [2, 6, 7], "save": [2, 6], "memori": [2, 3, 6, 7], "creat": [2, 3, 6, 7], "progress": 2, "bar": 2, "show": [2, 4, 6], "total": [2, 7], "pbar": 2, "rang": [2, 3, 6], "wet": [2, 6], "equal": [2, 3, 6, 7], "percentag": [2, 6], "track": [2, 6], "e": [2, 6, 7], "make": [2, 3, 7], "ramp": 2, "percentage_through_track": 2, "wet_level": [2, 6, 7], "updat": 2, "number": [2, 3, 5, 6, 7], "receiv": [2, 6, 7], "aren": 2, "cut": [2, 6], "off": [2, 6], "With": 2, "techniqu": [2, 6], "autom": 2, "usual": [2, 6, 7], "somewher": 2, "000": [2, 7], "2m": 2, "22m": 2, "44": [2, 6, 7], "1khz": [2, 6], "small": 2, "enough": [2, 7], "avoid": [2, 7], "hear": 2, "artifact": [2, 6], "big": 2, "slow": [2, 6], "down": [2, 6], "dramat": 2, "4": [2, 6], "vst3plugin": [2, 6], "audiounitplugin": [2, 6], "both": [2, 3, 6, 7], "howev": [2, 6, 7], "cannot": [2, 4, 6, 7], "yet": 2, "data": [2, 3, 6, 7], "librari": [3, 4, 5, 6, 7], "effect": [3, 4, 6, 7], "popular": 3, "format": [3, 6, 7], "box": 3, "also": [3, 4, 5, 6, 7], "us": [3, 4, 5, 6, 7], "third": [3, 6], "parti": [3, 6], "softwar": [3, 4], "instrument": [3, 6], "wa": [3, 6, 7], "spotifi": [3, 5], "intellig": 3, "lab": 3, "enabl": [3, 6], "studio": 3, "qualiti": [3, 6, 7], "within": [3, 4, 6, 7], "augment": 3, "improv": 3, "machin": [3, 4], "learn": [3, 4], "help": 3, "power": [3, 6], "ai": 3, "dj": 3, "voic": [3, 6], "translat": 3, "content": [3, 7], "creation": 3, "digit": [3, 4, 6], "workstat": 3, "util": [3, 6], "aiff": [3, 7], "flac": [3, 7], "mp3": [3, 6, 7], "ogg": [3, 7], "platform": [3, 4, 6, 7], "depend": [3, 4, 6, 7], "addit": [3, 4, 6, 7], "aac": [3, 7], "ac3": [3, 7], "wma": [3, 7], "fly": [3, 7], "usag": [3, 6], "live": [3, 7], "basic": [3, 6, 7], "transform": [3, 6], "guitar": [3, 6], "style": 3, "clip": [3, 6], "loud": [3, 6], "dynam": [3, 6], "filter": [3, 6], "highpassfilt": [3, 6], "lowpassfilt": [3, 6], "spatial": 3, "lossi": [3, 6], "compress": [3, 6, 7], "gsmfullratecompressor": [3, 5, 6], "mp3compressor": [3, 5, 6], "reduct": [3, 6], "bitcrush": [3, 6], "plugin": [3, 5, 6, 7], "linux": [3, 4, 6, 7], "strong": 3, "thread": [3, 4, 6, 7], "safeti": 3, "guarante": [3, 7], "releas": [3, 6, 7], "global": [3, 7], "lock": [3, 7], "gil": [3, 7], "cpu": [3, 6], "core": [3, 5], "No": [3, 6], "need": [3, 4, 7], "multiprocess": 3, "onli": [3, 6, 7], "300x": 3, "faster": 3, "than": [3, 4, 6, 7], "pysox": 3, "singl": [3, 6], "2": [3, 6, 7], "5x": 3, "soxbind": 3, "icorv": 3, "4x": 3, "librosa": 3, "case": [3, 4, 6, 7], "tf": 3, "pipelin": 3, "avail": [3, 4, 6, 7], "pypi": 3, "wheel": [3, 4], "pip": 3, "That": 3, "requir": [3, 4, 6, 7], "new": [3, 7], "follow": [3, 4, 5, 6, 7], "md": 3, "robust": 3, "guid": 3, "thoroughli": 3, "8": [3, 6], "9": [3, 6, 7], "11": 3, "experiment": [], "heavili": 3, "product": 3, "github": [3, 6], "manylinux": 3, "musllinux": 3, "x86_64": 3, "intel": 3, "amd": 3, "aarch64": 3, "arm": 3, "appl": [3, 6], "silicon": 3, "rel": 3, "modern": 3, "glibc": 3, "27": 3, "wide": [3, 6], "amd64": 3, "x86": 3, "64": [3, 6], "api": [3, 4], "exampl": [3, 4, 6, 7], "quick": 3, "start": [3, 6, 7], "parallel": [3, 6], "chain": [3, 6, 7], "run": [3, 6, 7], "frequent": [3, 6], "question": 3, "doe": [3, 4, 6, 7], "over": [3, 6], "accept": [3, 6, 7], "design": [3, 6], "consider": 3, "licens": [3, 4], "repo": 3, "wrapper": [4, 6], "juce": [4, 5], "sourc": [4, 7], "cross": [4, 6], "c": [4, 6, 7], "develop": 4, "applic": 4, "written": [4, 7], "pybind11": 4, "bind": 4, "goal": [4, 7], "expos": [4, 6], "signal": [4, 6], "idiomat": 4, "wai": 4, "provid": [4, 6, 7], "raw": [4, 6, 7], "perform": [4, 7], "dsp": 4, "hide": 4, "complex": 4, "programm": 4, "intuit": 4, "itself": [4, 6], "varieti": 4, "reason": 4, "wider": 4, "compat": [4, 5, 6], "Not": [4, 6, 7], "notabl": 4, "rare": [4, 6], "fewer": [4, 6], "simpler": 4, "remov": [4, 6], "copi": 4, "associ": 4, "resourc": [4, 6, 7], "option": [4, 6, 7], "might": 4, "meant": 4, "music": 4, "appropri": [4, 6], "vice": 4, "versa": 4, "stabil": 4, "environ": 4, "implement": [4, 6, 7], "logic": 4, "portabl": 4, "safe": [4, 7], "constraint": 4, "should": [4, 6, 7], "consid": [4, 6, 7], "gplv3": [4, 5], "static": [4, 5, 6, 7], "link": 4, "vendor": 4, "git": 4, "submodul": 4, "binari": [4, 6, 7], "distribut": 4, "Will": [4, 7], "increas": [4, 6, 7], "amount": [4, 6, 7], "runtim": 4, "user": 4, "instal": [4, 6, 7], "complic": 4, "simplic": 4, "packag": [4, 6], "copyright": 5, "2021": 5, "2024": 5, "ab": 5, "under": [5, 7], "gnu": 5, "gener": [5, 6], "public": 5, "v3": 5, "carri": 5, "pull": 5, "dual": 5, "commerci": 5, "sdk": 5, "bundl": [5, 6], "own": [5, 6], "steinberg": [5, 6], "media": 5, "technologi": 5, "gmbh": [5, 6], "time_stretch": [5, 6], "rubber": [5, 6], "band": [5, 6], "gplv2": 5, "newer": 5, "fftw": 5, "libmp3lam": 5, "lame": [5, 6, 7], "project": 5, "lgplv2": 5, "upgrad": 5, "inclus": 5, "permit": 5, "libgsm": 5, "isc": 5, "regist": 5, "trademark": 5, "modul": [6, 7], "subclass": 6, "each": [6, 7], "buffer": [6, 7], "name": [6, 7], "after": [6, 7], "concept": 6, "musician": 6, "variou": 6, "pedal": 6, "togeth": 6, "complet": [6, 7], "control": [6, 7], "its": [6, 7], "main": 6, "my_pedalboard": 6, "treat": 6, "output_audio": 6, "input_audio": 6, "input_audio_sampler": 6, "zero": [6, 7], "composit": 6, "type": [6, 7], "audioprocessorparamet": 6, "externalplugin": 6, "parameter_nam": 6, "str": [6, 7], "search_step": 6, "int": [6, 7], "1000": 6, "A": [6, 7], "differ": [6, 7], "implicit": 6, "my_plugin": 6, "my": 6, "cool": 6, "delay_time_m": 6, "foobar": 6, "access": [6, 7], "were": [6, 7], "attribut": [6, 7], "400": 6, "tri": 6, "guess": 6, "valid": 6, "valu": [6, 7], "instanti": 6, "alwai": [6, 7], "accur": [6, 7], "underli": [6, 7], "had": 6, "raw_valu": 6, "bound": [6, 7], "properti": [6, 7], "label": 6, "hz": [6, 7], "db": 6, "etc": [6, 7], "none": [6, 7], "fail": 6, "alia": 6, "__call__": 6, "input_arrai": 6, "ndarrai": [6, 7], "float": [6, 7], "buffer_s": [6, 7], "8192": 6, "bool": [6, 7], "true": [6, 7], "dtype": [6, 7], "midi_messag": 6, "return": [6, 7], "32": [6, 7], "bit": [6, 7], "numpi": [6, 7], "arrai": [6, 7], "expect": [6, 7], "insid": 6, "To": [6, 7], "remain": [6, 7], "anoth": 6, "datatyp": [6, 7], "convert": [6, 7], "must": [6, 7], "byte": [6, 7], "method": [6, 7], "tupl": 6, "look": 6, "midi_byt": 6, "timestamp_in_second": 6, "worth": 6, "sent": 6, "timestamp": 6, "indic": [6, 7], "end": [6, 7], "whose": 6, "greater": 6, "ignor": 6, "argument": [6, 7], "onc": [6, 7], "higher": 6, "caus": [6, 7], "flag": 6, "determin": [6, 7], "befor": [6, 7], "begin": [6, 7], "previou": 6, "invok": 6, "extern": 6, "assert": [6, 7], "is_effect": 6, "is_instru": 6, "introduc": [6, 7], "v0": [6, 7], "iff": [6, 7], "store": [6, 7], "g": 6, "line": [6, 7], "lfo": 6, "unchang": 6, "seri": [6, 7], "act": 6, "come": [6, 7], "alias": 6, "entir": [6, 7], "those": [6, 7], "insert": 6, "index": 6, "specifi": [6, 7], "point": [6, 7], "layout": [6, 7], "assum": [6, 7], "dimens": [6, 7], "correspond": [6, 7], "channel": [6, 7], "last": [6, 7], "explicitli": 6, "path_to_plugin_fil": 6, "parameter_valu": 6, "dict": 6, "union": [6, 7], "plugin_nam": 6, "initialization_timeout": 6, "two": 6, "dictionari": 6, "initi": [6, 7], "match": [6, 7], "report": 6, "normal": 6, "string": [6, 7], "identifi": 6, "These": 6, "multi": [6, 7], "except": [6, 7], "thrown": [6, 7], "spend": 6, "asynchron": 6, "background": [6, 7], "startup": 6, "larger": 6, "properli": 6, "throw": [6, 7], "importerror": 6, "found": [6, 7], "runtimeerror": [6, 7], "unavail": 6, "non": [6, 7], "system": [6, 7], "loadabl": 6, "plug": [6, 7], "Ins": 6, "compon": 6, "hang": 6, "incorrect": 6, "outright": 6, "find": [6, 7], "incompat": 6, "auv3": 6, "appex": 6, "get_plugin_names_for_fil": 6, "filenam": [6, 7], "given": [6, 7], "scan": [6, 7], "rais": [6, 7], "present": [6, 7], "what": 6, "show_editor": 6, "close_ev": 6, "event": 6, "ui": 6, "nativ": [6, 7], "block": [6, 7], "thing": 6, "happen": [6, 7], "click": 6, "button": 6, "keyboard": 6, "shortcut": 6, "keyboardinterrupt": [6, 7], "ctrl": [6, 7], "programmat": 6, "editor": 6, "close_window_ev": 6, "def": 6, "other_thread": 6, "someth": [6, 7], "should_close_window": 6, "target": [6, 7], "categori": 6, "fall": 6, "descriptive_nam": 6, "descript": 6, "field": 6, "altern": 6, "has_shared_contain": 6, "uniqu": 6, "again": 6, "synthes": 6, "manufacturer_nam": 6, "manufactur": 6, "raw_stat": 6, "repres": [6, 7], "decod": [6, 7], "encod": [6, 7], "plistlib": 6, "invalid": 6, "take": 6, "bit_depth": [6, 7], "reduc": 6, "depth": [6, 7], "lo": 6, "fi": 6, "vertic": 6, "resolut": 6, "horizont": 6, "per": [6, 7], "quantiz": 6, "integ": [6, 7], "decim": 6, "onto": 6, "pedalboard_n": [], "rate_hz": 6, "centre_delay_m": 6, "feedback": 6, "frequenc": 6, "respons": 6, "centr": 6, "get": 6, "classic": 6, "m": 6, "low": 6, "feeback": 6, "volum": 6, "flanger": 6, "lower": 6, "lot": 6, "vibrato": 6, "oscil": 6, "hertz": 6, "hard": [6, 7], "threshold": 6, "decibel": 6, "algorithm": [6, 7], "gsmcompressor": 6, "impulse_response_filenam": 6, "suitabl": 6, "simul": 6, "impuls": 6, "either": [6, 7], "dry": 6, "drive_db": 6, "linear": [6, 7], "tanh": 6, "hyperbol": 6, "tangent": 6, "waveshap": 6, "harmon": 6, "pleas": 6, "produc": [6, 7], "roughli": 6, "equival": 6, "x": 6, "db_to_gain": 6, "windowedsinc": [6, 7], "degrad": 6, "gsm": 6, "full": 6, "emul": 6, "2g": 6, "cellular": 6, "phone": 6, "connect": [6, 7], "fix": 6, "8khz": 6, "codec": [6, 7], "although": [6, 7], "decreas": [6, 7], "amplifi": 6, "attenu": 6, "think": 6, "highshelffilt": 6, "cutoff_frequency_hz": 6, "440": 6, "q": 6, "7071067690849304": 6, "high": [6, 7], "shelf": 6, "variabl": [6, 7], "abov": [6, 7], "cutoff": 6, "boost": 6, "first": [6, 7], "order": 6, "roll": 6, "6db": 6, "octav": 6, "3db": 6, "frac": 6, "sqrt": 6, "express": 6, "factor": 6, "further": [6, 7], "iirfilt": 6, "abstract": 6, "kind": 6, "infinit": 6, "iir": 6, "lowshelffilt": 6, "peakfilt": 6, "invert": 6, "flip": 6, "polar": 6, "audibl": 6, "mathemat": 6, "ident": [6, 7], "cancel": 6, "origin": [6, 7], "lpf12": 6, "200": 6, "reson": 6, "drive": 6, "base": [6, 7], "moog": 6, "ladder": 6, "invent": 6, "dr": 6, "bob": 6, "1968": 6, "below": [6, 7], "side": [6, 7], "peak": 6, "architectur": 6, "bpf12": 6, "lpf24": 6, "24": 6, "hpf24": 6, "bpf24": 6, "simpl": 6, "standard": 6, "featur": 6, "clipper": 6, "707x": 6, "vbr_qualiti": 6, "current": [6, 7], "vbr": 6, "better": 6, "11025hz": 6, "12khz": 6, "16khz": 6, "22050hz": 6, "24khz": 6, "32khz": 6, "48khz": 6, "unsupport": [6, 7], "noiseg": 6, "gate": 6, "attack": 6, "expand": 6, "notch": 6, "centre_frequency_hz": 6, "1300": 6, "stage": 6, "sweep": 6, "magnitud": [6, 7], "affect": 6, "chri": 6, "cannam": 6, "wonder": 6, "stretch": 6, "plugincontain": 6, "intend": 6, "direct": [6, 7], "target_sample_r": [6, 7], "8000": 6, "downsampl": 6, "upsampl": 6, "zeroorderhold": 6, "lowest": 6, "fastest": [6, 7], "slightli": 6, "less": [6, 7], "noisi": 6, "simplest": 6, "catmullrom": 6, "moder": 6, "good": 6, "fast": 6, "lagrang": 6, "highest": 6, "slowest": [6, 7], "still": [6, 7], "mere": 6, "damp": 6, "33": 6, "dry_level": 6, "width": 6, "freeze_mod": 6, "stereo": [6, 7], "tune": 6, "freeverb": 6, "http": 6, "ccrma": 6, "stanford": 6, "edu": 6, "jo": 6, "pasp": 6, "html": 6, "_": 6, "oper": [6, 7], "build": 6, "arg0": [6, 7], "load_preset": 6, "preset_file_path": 6, "preset": 6, "vstpreset": 6, "xml": 6, "prefix": 6, "header": [6, 7], "suffix": 6, "null": 6, "stretch_factor": 6, "float64": [6, 7], "pitch_shift_in_semiton": 6, "high_qual": 6, "transient_mod": 6, "crisp": 6, "transient_detector": 6, "compound": 6, "retain_phase_continu": 6, "use_long_fft_window": 6, "use_time_domain_smooth": 6, "preserve_form": 6, "length": [6, 7], "shorten": 6, "doubl": 6, "halv": 6, "dure": [6, 7], "independ": 6, "worri": 6, "thei": 6, "precis": 6, "result": [6, 7], "slower": 6, "024": 6, "23": 6, "millisecond": 6, "grain": 6, "behavior": [6, 7], "stretcher": 6, "default": [6, 7], "transient": 6, "percuss": 6, "smooth": 6, "soft": 6, "phase": 6, "adjac": 6, "bin": 6, "kept": 6, "similar": 6, "softer": 6, "phasier": 6, "fourier": 6, "situat": [6, 7], "clariti": 6, "crisper": 6, "sharp": 6, "substanti": 6, "profil": 6, "formant": 6, "handl": 7, "behind": 7, "scene": 7, "my_filenam": 7, "441_000": 7, "necessari": 7, "accomplish": 7, "readableaudiofil": 7, "yourself": 7, "writeableaudiofil": 7, "resampledreadableaudiofil": 7, "probabl": 7, "cover": 7, "liter": 7, "r": 7, "file_lik": 7, "binaryio": 7, "memoryview": 7, "16": 7, "readabl": 7, "writeabl": 7, "unlik": 7, "typic": 7, "trail": 7, "b": 7, "redund": 7, "exist": 7, "seekabl": 7, "bytesio": 7, "stringio": 7, "my_fil": 7, "first_ten_second": 7, "ogg_buff": 7, "get_audio_buff": 7, "22_050": 7, "white_nois": 7, "wav_buff": 7, "getvalu": 7, "mp3_buffer": 7, "flac_buff": 7, "160": 7, "kilobit": 7, "re": 7, "four": 7, "1024": 7, "constructor": 7, "actual": 7, "buf": 7, "effici": 7, "consum": 7, "larg": 7, "arbitrari": 7, "recommend": 7, "allow_feedback": 7, "num_input_channel": 7, "num_output_channel": 7, "devic": 7, "microphon": 7, "headphon": 7, "plai": 7, "my_audio_fil": 7, "Or": 7, "loop": 7, "output_devic": 7, "512": 7, "default_input_device_nam": 7, "default_output_device_nam": 7, "In": 7, "delet": 7, "del": 7, "synchron": 7, "context": 7, "manag": 7, "never": 7, "left": 7, "dangl": 7, "__enter__": 7, "nasti": 7, "longer": 7, "reachabl": 7, "scope": 7, "continu": 7, "forev": 7, "won": 7, "exit": 7, "easier": 7, "cleanup": 7, "immedi": 7, "send": 7, "__exit__": 7, "arg1": 7, "arg2": 7, "usabl": 7, "finish": 7, "num_sampl": 7, "record": 7, "doesn": 7, "quickli": 7, "lost": 7, "drop": 7, "disabl": 7, "ignore_dropped_input": 7, "sinc": 7, "retriev": 7, "dropped_input_frame_count": 7, "streamresampl": 7, "hardwar": 7, "buffered_input_sample_count": 7, "rapidli": 7, "prevent": 7, "often": 7, "recent": 7, "unaffect": 7, "otherwis": 7, "wrap": 7, "vorbi": 7, "3g2": 7, "3gp": 7, "adt": 7, "aif": 7, "aifc": 7, "amr": 7, "au": 7, "bwf": 7, "caf": 7, "ec3": 7, "latm": 7, "loa": 7, "m4a": 7, "m4b": 7, "m4r": 7, "mov": 7, "mp1": 7, "mp2": 7, "mp4": 7, "mpa": 7, "mpeg": 7, "qt": 7, "sd2": 7, "snd": 7, "w64": 7, "xhe": 7, "get_supported_read_format": 7, "extens": 7, "certain": 7, "too": 7, "unus": 7, "num_fram": 7, "posit": 7, "decept": 7, "hour": 7, "long": 7, "hand": 7, "megabyt": 7, "decompress": 7, "nearli": 7, "gigabyt": 7, "debug": 7, "problem": 7, "dimension": 7, "fill": 7, "exact_duration_known": 7, "occur": 7, "minimum": 7, "0f": 7, "maximum": 7, "fraction": 7, "01": 7, "00": 7, "read_raw": 7, "int8": 7, "int16": 7, "int32": 7, "constant": 7, "seek": 7, "locat": 7, "futur": 7, "pointer": 7, "divid": 7, "overestim": 7, "exact": 7, "estim": 7, "bitrat": 7, "ever": 7, "file_dtyp": 7, "regardless": 7, "441": 7, "discrep": 7, "due": [6, 7], "fact": 7, "xing": 7, "info": 7, "forc": 7, "pars": 7, "correct": 7, "behaviour": 7, "later": 7, "prior": 7, "lack": 7, "audio_fil": 7, "resampling_qu": 7, "22050": 7, "hood": 7, "potenti": 7, "unbound": 7, "obtain": 7, "benefit": 7, "respect": 7, "push": 7, "optim": 7, "retain": 7, "accuraci": 7, "22": 7, "050": 7, "source_sample_r": 7, "flush": 7, "input_lat": 7, "suppli": 7, "get_supported_write_format": 7, "filename_or_file_lik": 7, "level": 7, "numer": 7, "128": 7, "256": 7, "advanc": 7, "v2": 7, "best": 7, "reliabl": 7, "typeerror": 7, "abl": 7, "infer": 7, "cach": 7, "writableaudiofil": 7, "disambigu": 7, "But": 7, "And": 7, "hint": 7, "anyth": 7, "noth": 7, "far": 7, "increment": 7, "kbp": 7, "v9": 7, "reported_latency_sampl": 6, "latenc": 6, "correctli": 6, "inaccur": 6, "especi": 6, "preset_data": 6, "compens": 6, "purpos": 6, "13": 3}, "objects": {"": [[6, 0, 0, "-", "pedalboard"]], "pedalboard": [[6, 1, 1, "", "AudioProcessorParameter"], [6, 1, 1, "", "AudioUnitPlugin"], [6, 1, 1, "", "Bitcrush"], [6, 1, 1, "", "Chain"], [6, 1, 1, "", "Chorus"], [6, 1, 1, "", "Clipping"], [6, 1, 1, "", "Compressor"], [6, 1, 1, "", "Convolution"], [6, 1, 1, "", "Delay"], [6, 1, 1, "", "Distortion"], [6, 1, 1, "", "ExternalPlugin"], [6, 1, 1, "", "GSMFullRateCompressor"], [6, 1, 1, "", "Gain"], [6, 1, 1, "", "HighShelfFilter"], [6, 1, 1, "", "HighpassFilter"], [6, 1, 1, "", "IIRFilter"], [6, 1, 1, "", "Invert"], [6, 1, 1, "", "LadderFilter"], [6, 1, 1, "", "Limiter"], [6, 1, 1, "", "LowShelfFilter"], [6, 1, 1, "", "LowpassFilter"], [6, 1, 1, "", "MP3Compressor"], [6, 1, 1, "", "Mix"], [6, 1, 1, "", "NoiseGate"], [6, 1, 1, "", "PeakFilter"], [6, 1, 1, "", "Pedalboard"], [6, 1, 1, "", "Phaser"], [6, 1, 1, "", "PitchShift"], [6, 1, 1, "", "Plugin"], [6, 1, 1, "", "PluginContainer"], [6, 1, 1, "", "Resample"], [6, 1, 1, "", "Reverb"], [6, 1, 1, "", "VST3Plugin"], [7, 0, 0, "-", "io"], [6, 5, 1, "", "load_plugin"], [6, 5, 1, "", "time_stretch"]], "pedalboard.AudioProcessorParameter": [[6, 2, 1, "", "label"], [6, 2, 1, "", "units"]], "pedalboard.AudioUnitPlugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "category"], [6, 2, 1, "", "descriptive_name"], [6, 3, 1, "", "get_plugin_names_for_file"], [6, 2, 1, "", "has_shared_container"], [6, 2, 1, "", "identifier"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 2, 1, "", "manufacturer_name"], [6, 2, 1, "", "name"], [6, 3, 1, "", "process"], [6, 2, 1, "", "raw_state"], [6, 2, 1, "", "reported_latency_samples"], [6, 3, 1, "", "reset"], [6, 3, 1, "", "show_editor"], [6, 2, 1, "", "version"]], "pedalboard.Bitcrush": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "bit_depth"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Chain": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.Chorus": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 2, 1, "", "rate_hz"], [6, 3, 1, "", "reset"]], "pedalboard.Clipping": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Compressor": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Convolution": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Delay": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Distortion": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.ExternalPlugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.GSMFullRateCompressor": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Gain": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.HighShelfFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.HighpassFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.IIRFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Invert": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LadderFilter": [[6, 1, 1, "", "Mode"], [6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LadderFilter.Mode": [[6, 4, 1, "", "BPF12"], [6, 4, 1, "", "BPF24"], [6, 4, 1, "", "HPF12"], [6, 4, 1, "", "HPF24"], [6, 4, 1, "", "LPF12"], [6, 4, 1, "", "LPF24"]], "pedalboard.Limiter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LowShelfFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.LowpassFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.MP3Compressor": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Mix": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.NoiseGate": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.PeakFilter": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Pedalboard": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.Phaser": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.PitchShift": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.Plugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.PluginContainer": [[6, 3, 1, "", "__call__"], [6, 3, 1, "", "append"], [6, 3, 1, "", "insert"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "remove"], [6, 3, 1, "", "reset"]], "pedalboard.Resample": [[6, 1, 1, "", "Quality"], [6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 2, 1, "", "quality"], [6, 3, 1, "", "reset"], [6, 2, 1, "", "target_sample_rate"]], "pedalboard.Resample.Quality": [[6, 4, 1, "", "CatmullRom"], [6, 4, 1, "", "Lagrange"], [6, 4, 1, "", "Linear"], [6, 4, 1, "", "WindowedSinc"], [6, 4, 1, "", "ZeroOrderHold"]], "pedalboard.Reverb": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "process"], [6, 3, 1, "", "reset"]], "pedalboard.VST3Plugin": [[6, 3, 1, "", "__call__"], [6, 2, 1, "", "category"], [6, 2, 1, "", "descriptive_name"], [6, 3, 1, "", "get_plugin_names_for_file"], [6, 2, 1, "", "has_shared_container"], [6, 2, 1, "", "identifier"], [6, 2, 1, "", "is_effect"], [6, 2, 1, "", "is_instrument"], [6, 3, 1, "", "load_preset"], [6, 2, 1, "", "manufacturer_name"], [6, 2, 1, "", "name"], [6, 2, 1, "", "preset_data"], [6, 3, 1, "", "process"], [6, 2, 1, "", "raw_state"], [6, 2, 1, "", "reported_latency_samples"], [6, 3, 1, "", "reset"], [6, 3, 1, "", "show_editor"], [6, 2, 1, "", "version"]], "pedalboard.io": [[7, 1, 1, "", "AudioFile"], [7, 1, 1, "", "AudioStream"], [7, 1, 1, "", "ReadableAudioFile"], [7, 1, 1, "", "ResampledReadableAudioFile"], [7, 1, 1, "", "StreamResampler"], [7, 1, 1, "", "WriteableAudioFile"]], "pedalboard.io.AudioFile": [[7, 3, 1, "", "encode"]], "pedalboard.io.AudioStream": [[7, 3, 1, "", "__enter__"], [7, 3, 1, "", "__exit__"], [7, 2, 1, "", "buffer_size"], [7, 2, 1, "", "buffered_input_sample_count"], [7, 3, 1, "", "close"], [7, 2, 1, "", "dropped_input_frame_count"], [7, 2, 1, "", "ignore_dropped_input"], [7, 2, 1, "", "num_input_channels"], [7, 2, 1, "", "num_output_channels"], [7, 3, 1, "", "play"], [7, 2, 1, "", "plugins"], [7, 3, 1, "", "read"], [7, 3, 1, "", "run"], [7, 2, 1, "", "running"], [7, 2, 1, "", "sample_rate"], [7, 3, 1, "", "write"]], "pedalboard.io.ReadableAudioFile": [[7, 3, 1, "", "__enter__"], [7, 3, 1, "", "__exit__"], [7, 3, 1, "", "close"], [7, 2, 1, "", "closed"], [7, 2, 1, "", "duration"], [7, 2, 1, "", "exact_duration_known"], [7, 2, 1, "", "file_dtype"], [7, 2, 1, "", "frames"], [7, 2, 1, "", "name"], [7, 2, 1, "", "num_channels"], [7, 3, 1, "", "read"], [7, 3, 1, "", "read_raw"], [7, 3, 1, "", "resampled_to"], [7, 2, 1, "", "samplerate"], [7, 3, 1, "", "seek"], [7, 3, 1, "", "seekable"], [7, 3, 1, "", "tell"]], "pedalboard.io.ResampledReadableAudioFile": [[7, 3, 1, "", "__enter__"], [7, 3, 1, "", "__exit__"], [7, 3, 1, "", "close"], [7, 2, 1, "", "closed"], [7, 2, 1, "", "duration"], [7, 2, 1, "", "exact_duration_known"], [7, 2, 1, "", "file_dtype"], [7, 2, 1, "", "frames"], [7, 2, 1, "", "name"], [7, 2, 1, "", "num_channels"], [7, 3, 1, "", "read"], [7, 2, 1, "", "resampling_quality"], [7, 2, 1, "", "samplerate"], [7, 3, 1, "", "seek"], [7, 3, 1, "", "seekable"], [7, 3, 1, "", "tell"]], "pedalboard.io.StreamResampler": [[7, 2, 1, "", "input_latency"], [7, 2, 1, "", "num_channels"], [7, 3, 1, "", "process"], [7, 2, 1, "", "quality"], [7, 3, 1, "", "reset"], [7, 2, 1, "", "source_sample_rate"], [7, 2, 1, "", "target_sample_rate"]], "pedalboard.io.WriteableAudioFile": [[7, 3, 1, "", "close"], [7, 2, 1, "", "closed"], [7, 2, 1, "", "file_dtype"], [7, 3, 1, "", "flush"], [7, 2, 1, "", "frames"], [7, 2, 1, "", "num_channels"], [7, 2, 1, "", "quality"], [7, 2, 1, "", "samplerate"], [7, 3, 1, "", "tell"], [7, 3, 1, "", "write"]]}, "objtypes": {"0": "py:module", "1": "py:class", "2": "py:property", "3": "py:method", "4": "py:attribute", "5": "py:function"}, "objnames": {"0": ["py", "module", "Python module"], "1": ["py", "class", "Python class"], "2": ["py", "property", "Python property"], "3": ["py", "method", "Python method"], "4": ["py", "attribute", "Python attribute"], "5": ["py", "function", "Python function"]}, "titleterms": {"plugin": [0, 1, 2, 4], "compat": [0, 3], "exampl": 1, "quick": 1, "start": 1, "make": 1, "guitar": 1, "style": 1, "pedalboard": [1, 2, 4, 6, 7], "us": [1, 2], "vst3": 1, "audio": [1, 2], "unit": 1, "instrument": [1, 2], "effect": [1, 2], "creat": 1, "parallel": 1, "chain": 1, "run": 1, "live": [1, 2], "tf": 1, "data": 1, "pipelin": 1, "frequent": 2, "ask": 2, "question": 2, "can": 2, "real": 2, "time": 2, "doe": 2, "support": 2, "chang": 2, "": 2, "paramet": 2, "over": 2, "vst": 2, "instead": 2, "accept": 2, "midi": 2, "featur": 3, "instal": 3, "refer": 3, "document": 3, "intern": 4, "ad": 4, "new": 4, "built": 4, "design": 4, "consider": 4, "licens": 5, "The": [6, 7], "api": [6, 7], "io": 7}, "envversion": {"sphinx.domains.c": 2, "sphinx.domains.changeset": 1, "sphinx.domains.citation": 1, "sphinx.domains.cpp": 8, "sphinx.domains.index": 1, "sphinx.domains.javascript": 2, "sphinx.domains.math": 2, "sphinx.domains.python": 3, "sphinx.domains.rst": 2, "sphinx.domains.std": 2, "sphinx.ext.intersphinx": 1, "sphinx": 57}, "alltitles": {"Plugin Compatibility": [[0, "plugin-compatibility"]], "Examples": [[1, "examples"]], "Quick start": [[1, "quick-start"]], "Making a guitar-style pedalboard": [[1, "making-a-guitar-style-pedalboard"]], "Using VST3\u00ae or Audio Unit instrument and effect plugins": [[1, "using-vst3-or-audio-unit-instrument-and-effect-plugins"]], "Creating parallel effects chains": [[1, "creating-parallel-effects-chains"]], "Running Pedalboard on Live Audio": [[1, "running-pedalboard-on-live-audio"]], "Using Pedalboard in tf.data Pipelines": [[1, "using-pedalboard-in-tf-data-pipelines"]], "Frequently Asked Questions": [[2, "frequently-asked-questions"]], "Can Pedalboard be used with live (real-time) audio?": [[2, "can-pedalboard-be-used-with-live-real-time-audio"]], "Does Pedalboard support changing a plugin\u2019s parameters over time?": [[2, "does-pedalboard-support-changing-a-plugin-s-parameters-over-time"]], "Can Pedalboard be used with VST instruments, instead of effects?": [[2, "can-pedalboard-be-used-with-vst-instruments-instead-of-effects"]], "Can Pedalboard plugins accept MIDI?": [[2, "can-pedalboard-plugins-accept-midi"]], "Features": [[3, "features"]], "Installation": [[3, "installation"]], "Compatibility": [[3, "compatibility"]], "Reference": [[3, "reference"]], "Documentation": [[3, "documentation"]], "Pedalboard Internals": [[4, "pedalboard-internals"]], "Adding new built-in Pedalboard plugins": [[4, "adding-new-built-in-pedalboard-plugins"]], "Design considerations": [[4, "design-considerations"]], "License": [[5, "license"]], "The pedalboard API": [[6, "the-pedalboard-api"]], "The pedalboard.io API": [[7, "the-pedalboard-io-api"]]}, "indexentries": {"audioprocessorparameter (class in pedalboard)": [[6, "pedalboard.AudioProcessorParameter"]], "audiounitplugin (class in pedalboard)": [[6, "pedalboard.AudioUnitPlugin"]], "bpf12 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.BPF12"]], "bpf24 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.BPF24"]], "bitcrush (class in pedalboard)": [[6, "pedalboard.Bitcrush"]], "catmullrom (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.CatmullRom"]], "chain (class in pedalboard)": [[6, "pedalboard.Chain"]], "chorus (class in pedalboard)": [[6, "pedalboard.Chorus"]], "clipping (class in pedalboard)": [[6, "pedalboard.Clipping"]], "compressor (class in pedalboard)": [[6, "pedalboard.Compressor"]], "convolution (class in pedalboard)": [[6, "pedalboard.Convolution"]], "delay (class in pedalboard)": [[6, "pedalboard.Delay"]], "distortion (class in pedalboard)": [[6, "pedalboard.Distortion"]], "externalplugin (class in pedalboard)": [[6, "pedalboard.ExternalPlugin"]], "gsmfullratecompressor (class in pedalboard)": [[6, "pedalboard.GSMFullRateCompressor"]], "gain (class in pedalboard)": [[6, "pedalboard.Gain"]], "hpf12 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.HPF12"]], "hpf24 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.HPF24"]], "highshelffilter (class in pedalboard)": [[6, "pedalboard.HighShelfFilter"]], "highpassfilter (class in pedalboard)": [[6, "pedalboard.HighpassFilter"]], "iirfilter (class in pedalboard)": [[6, "pedalboard.IIRFilter"]], "invert (class in pedalboard)": [[6, "pedalboard.Invert"]], "lpf12 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.LPF12"]], "lpf24 (pedalboard.ladderfilter.mode attribute)": [[6, "pedalboard.LadderFilter.Mode.LPF24"]], "ladderfilter (class in pedalboard)": [[6, "pedalboard.LadderFilter"]], "ladderfilter.mode (class in pedalboard)": [[6, "pedalboard.LadderFilter.Mode"]], "lagrange (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.Lagrange"]], "limiter (class in pedalboard)": [[6, "pedalboard.Limiter"]], "linear (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.Linear"]], "lowshelffilter (class in pedalboard)": [[6, "pedalboard.LowShelfFilter"]], "lowpassfilter (class in pedalboard)": [[6, "pedalboard.LowpassFilter"]], "mp3compressor (class in pedalboard)": [[6, "pedalboard.MP3Compressor"]], "mix (class in pedalboard)": [[6, "pedalboard.Mix"]], "noisegate (class in pedalboard)": [[6, "pedalboard.NoiseGate"]], "peakfilter (class in pedalboard)": [[6, "pedalboard.PeakFilter"]], "pedalboard (class in pedalboard)": [[6, "pedalboard.Pedalboard"]], "phaser (class in pedalboard)": [[6, "pedalboard.Phaser"]], "pitchshift (class in pedalboard)": [[6, "pedalboard.PitchShift"]], "plugin (class in pedalboard)": [[6, "pedalboard.Plugin"]], "plugincontainer (class in pedalboard)": [[6, "pedalboard.PluginContainer"]], "resample (class in pedalboard)": [[6, "pedalboard.Resample"]], "resample.quality (class in pedalboard)": [[6, "pedalboard.Resample.Quality"]], "reverb (class in pedalboard)": [[6, "pedalboard.Reverb"]], "vst3plugin (class in pedalboard)": [[6, "pedalboard.VST3Plugin"]], "windowedsinc (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.WindowedSinc"]], "zeroorderhold (pedalboard.resample.quality attribute)": [[6, "pedalboard.Resample.Quality.ZeroOrderHold"]], "__call__() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.__call__"]], "__call__() (pedalboard.bitcrush method)": [[6, "pedalboard.Bitcrush.__call__"]], "__call__() (pedalboard.chain method)": [[6, "pedalboard.Chain.__call__"]], "__call__() (pedalboard.chorus method)": [[6, "pedalboard.Chorus.__call__"]], "__call__() (pedalboard.clipping method)": [[6, "pedalboard.Clipping.__call__"]], "__call__() (pedalboard.compressor method)": [[6, "pedalboard.Compressor.__call__"]], "__call__() (pedalboard.convolution method)": [[6, "pedalboard.Convolution.__call__"]], "__call__() (pedalboard.delay method)": [[6, "pedalboard.Delay.__call__"]], "__call__() (pedalboard.distortion method)": [[6, "pedalboard.Distortion.__call__"]], "__call__() (pedalboard.externalplugin method)": [[6, "pedalboard.ExternalPlugin.__call__"]], "__call__() (pedalboard.gsmfullratecompressor method)": [[6, "pedalboard.GSMFullRateCompressor.__call__"]], "__call__() (pedalboard.gain method)": [[6, "pedalboard.Gain.__call__"]], "__call__() (pedalboard.highshelffilter method)": [[6, "pedalboard.HighShelfFilter.__call__"]], "__call__() (pedalboard.highpassfilter method)": [[6, "pedalboard.HighpassFilter.__call__"]], "__call__() (pedalboard.iirfilter method)": [[6, "pedalboard.IIRFilter.__call__"]], "__call__() (pedalboard.invert method)": [[6, "pedalboard.Invert.__call__"]], "__call__() (pedalboard.ladderfilter method)": [[6, "pedalboard.LadderFilter.__call__"]], "__call__() (pedalboard.limiter method)": [[6, "pedalboard.Limiter.__call__"]], "__call__() (pedalboard.lowshelffilter method)": [[6, "pedalboard.LowShelfFilter.__call__"]], "__call__() (pedalboard.lowpassfilter method)": [[6, "pedalboard.LowpassFilter.__call__"]], "__call__() (pedalboard.mp3compressor method)": [[6, "pedalboard.MP3Compressor.__call__"]], "__call__() (pedalboard.mix method)": [[6, "pedalboard.Mix.__call__"]], "__call__() (pedalboard.noisegate method)": [[6, "pedalboard.NoiseGate.__call__"]], "__call__() (pedalboard.peakfilter method)": [[6, "pedalboard.PeakFilter.__call__"]], "__call__() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.__call__"]], "__call__() (pedalboard.phaser method)": [[6, "pedalboard.Phaser.__call__"]], "__call__() (pedalboard.pitchshift method)": [[6, "pedalboard.PitchShift.__call__"]], "__call__() (pedalboard.plugin method)": [[6, "pedalboard.Plugin.__call__"]], "__call__() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.__call__"]], "__call__() (pedalboard.resample method)": [[6, "pedalboard.Resample.__call__"]], "__call__() (pedalboard.reverb method)": [[6, "pedalboard.Reverb.__call__"]], "__call__() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.__call__"]], "append() (pedalboard.chain method)": [[6, "pedalboard.Chain.append"]], "append() (pedalboard.mix method)": [[6, "pedalboard.Mix.append"]], "append() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.append"]], "append() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.append"]], "bit_depth (pedalboard.bitcrush property)": [[6, "pedalboard.Bitcrush.bit_depth"]], "category (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.category"]], "category (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.category"]], "descriptive_name (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.descriptive_name"]], "descriptive_name (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.descriptive_name"]], "get_plugin_names_for_file() (pedalboard.audiounitplugin static method)": [[6, "pedalboard.AudioUnitPlugin.get_plugin_names_for_file"]], "get_plugin_names_for_file() (pedalboard.vst3plugin static method)": [[6, "pedalboard.VST3Plugin.get_plugin_names_for_file"]], "has_shared_container (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.has_shared_container"]], "has_shared_container (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.has_shared_container"]], "identifier (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.identifier"]], "identifier (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.identifier"]], "insert() (pedalboard.chain method)": [[6, "pedalboard.Chain.insert"]], "insert() (pedalboard.mix method)": [[6, "pedalboard.Mix.insert"]], "insert() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.insert"]], "insert() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.insert"]], "is_effect (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.is_effect"]], "is_effect (pedalboard.bitcrush property)": [[6, "pedalboard.Bitcrush.is_effect"]], "is_effect (pedalboard.chain property)": [[6, "pedalboard.Chain.is_effect"]], "is_effect (pedalboard.chorus property)": [[6, "pedalboard.Chorus.is_effect"]], "is_effect (pedalboard.clipping property)": [[6, "pedalboard.Clipping.is_effect"]], "is_effect (pedalboard.compressor property)": [[6, "pedalboard.Compressor.is_effect"]], "is_effect (pedalboard.convolution property)": [[6, "pedalboard.Convolution.is_effect"]], "is_effect (pedalboard.delay property)": [[6, "pedalboard.Delay.is_effect"]], "is_effect (pedalboard.distortion property)": [[6, "pedalboard.Distortion.is_effect"]], "is_effect (pedalboard.externalplugin property)": [[6, "pedalboard.ExternalPlugin.is_effect"]], "is_effect (pedalboard.gsmfullratecompressor property)": [[6, "pedalboard.GSMFullRateCompressor.is_effect"]], "is_effect (pedalboard.gain property)": [[6, "pedalboard.Gain.is_effect"]], "is_effect (pedalboard.highshelffilter property)": [[6, "pedalboard.HighShelfFilter.is_effect"]], "is_effect (pedalboard.highpassfilter property)": [[6, "pedalboard.HighpassFilter.is_effect"]], "is_effect (pedalboard.iirfilter property)": [[6, "pedalboard.IIRFilter.is_effect"]], "is_effect (pedalboard.invert property)": [[6, "pedalboard.Invert.is_effect"]], "is_effect (pedalboard.ladderfilter property)": [[6, "pedalboard.LadderFilter.is_effect"]], "is_effect (pedalboard.limiter property)": [[6, "pedalboard.Limiter.is_effect"]], "is_effect (pedalboard.lowshelffilter property)": [[6, "pedalboard.LowShelfFilter.is_effect"]], "is_effect (pedalboard.lowpassfilter property)": [[6, "pedalboard.LowpassFilter.is_effect"]], "is_effect (pedalboard.mp3compressor property)": [[6, "pedalboard.MP3Compressor.is_effect"]], "is_effect (pedalboard.mix property)": [[6, "pedalboard.Mix.is_effect"]], "is_effect (pedalboard.noisegate property)": [[6, "pedalboard.NoiseGate.is_effect"]], "is_effect (pedalboard.peakfilter property)": [[6, "pedalboard.PeakFilter.is_effect"]], "is_effect (pedalboard.pedalboard property)": [[6, "pedalboard.Pedalboard.is_effect"]], "is_effect (pedalboard.phaser property)": [[6, "pedalboard.Phaser.is_effect"]], "is_effect (pedalboard.pitchshift property)": [[6, "pedalboard.PitchShift.is_effect"]], "is_effect (pedalboard.plugin property)": [[6, "pedalboard.Plugin.is_effect"]], "is_effect (pedalboard.plugincontainer property)": [[6, "pedalboard.PluginContainer.is_effect"]], "is_effect (pedalboard.resample property)": [[6, "pedalboard.Resample.is_effect"]], "is_effect (pedalboard.reverb property)": [[6, "pedalboard.Reverb.is_effect"]], "is_effect (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.is_effect"]], "is_instrument (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.is_instrument"]], "is_instrument (pedalboard.bitcrush property)": [[6, "pedalboard.Bitcrush.is_instrument"]], "is_instrument (pedalboard.chain property)": [[6, "pedalboard.Chain.is_instrument"]], "is_instrument (pedalboard.chorus property)": [[6, "pedalboard.Chorus.is_instrument"]], "is_instrument (pedalboard.clipping property)": [[6, "pedalboard.Clipping.is_instrument"]], "is_instrument (pedalboard.compressor property)": [[6, "pedalboard.Compressor.is_instrument"]], "is_instrument (pedalboard.convolution property)": [[6, "pedalboard.Convolution.is_instrument"]], "is_instrument (pedalboard.delay property)": [[6, "pedalboard.Delay.is_instrument"]], "is_instrument (pedalboard.distortion property)": [[6, "pedalboard.Distortion.is_instrument"]], "is_instrument (pedalboard.externalplugin property)": [[6, "pedalboard.ExternalPlugin.is_instrument"]], "is_instrument (pedalboard.gsmfullratecompressor property)": [[6, "pedalboard.GSMFullRateCompressor.is_instrument"]], "is_instrument (pedalboard.gain property)": [[6, "pedalboard.Gain.is_instrument"]], "is_instrument (pedalboard.highshelffilter property)": [[6, "pedalboard.HighShelfFilter.is_instrument"]], "is_instrument (pedalboard.highpassfilter property)": [[6, "pedalboard.HighpassFilter.is_instrument"]], "is_instrument (pedalboard.iirfilter property)": [[6, "pedalboard.IIRFilter.is_instrument"]], "is_instrument (pedalboard.invert property)": [[6, "pedalboard.Invert.is_instrument"]], "is_instrument (pedalboard.ladderfilter property)": [[6, "pedalboard.LadderFilter.is_instrument"]], "is_instrument (pedalboard.limiter property)": [[6, "pedalboard.Limiter.is_instrument"]], "is_instrument (pedalboard.lowshelffilter property)": [[6, "pedalboard.LowShelfFilter.is_instrument"]], "is_instrument (pedalboard.lowpassfilter property)": [[6, "pedalboard.LowpassFilter.is_instrument"]], "is_instrument (pedalboard.mp3compressor property)": [[6, "pedalboard.MP3Compressor.is_instrument"]], "is_instrument (pedalboard.mix property)": [[6, "pedalboard.Mix.is_instrument"]], "is_instrument (pedalboard.noisegate property)": [[6, "pedalboard.NoiseGate.is_instrument"]], "is_instrument (pedalboard.peakfilter property)": [[6, "pedalboard.PeakFilter.is_instrument"]], "is_instrument (pedalboard.pedalboard property)": [[6, "pedalboard.Pedalboard.is_instrument"]], "is_instrument (pedalboard.phaser property)": [[6, "pedalboard.Phaser.is_instrument"]], "is_instrument (pedalboard.pitchshift property)": [[6, "pedalboard.PitchShift.is_instrument"]], "is_instrument (pedalboard.plugin property)": [[6, "pedalboard.Plugin.is_instrument"]], "is_instrument (pedalboard.plugincontainer property)": [[6, "pedalboard.PluginContainer.is_instrument"]], "is_instrument (pedalboard.resample property)": [[6, "pedalboard.Resample.is_instrument"]], "is_instrument (pedalboard.reverb property)": [[6, "pedalboard.Reverb.is_instrument"]], "is_instrument (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.is_instrument"]], "label (pedalboard.audioprocessorparameter property)": [[6, "pedalboard.AudioProcessorParameter.label"]], "load_plugin() (in module pedalboard)": [[6, "pedalboard.load_plugin"]], "load_preset() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.load_preset"]], "manufacturer_name (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.manufacturer_name"]], "manufacturer_name (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.manufacturer_name"]], "module": [[6, "module-pedalboard"], [7, "module-pedalboard.io"]], "name (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.name"]], "name (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.name"]], "pedalboard": [[6, "module-pedalboard"]], "preset_data (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.preset_data"]], "process() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.process"]], "process() (pedalboard.bitcrush method)": [[6, "pedalboard.Bitcrush.process"]], "process() (pedalboard.chain method)": [[6, "pedalboard.Chain.process"]], "process() (pedalboard.chorus method)": [[6, "pedalboard.Chorus.process"]], "process() (pedalboard.clipping method)": [[6, "pedalboard.Clipping.process"]], "process() (pedalboard.compressor method)": [[6, "pedalboard.Compressor.process"]], "process() (pedalboard.convolution method)": [[6, "pedalboard.Convolution.process"]], "process() (pedalboard.delay method)": [[6, "pedalboard.Delay.process"]], "process() (pedalboard.distortion method)": [[6, "pedalboard.Distortion.process"]], "process() (pedalboard.externalplugin method)": [[6, "pedalboard.ExternalPlugin.process"]], "process() (pedalboard.gsmfullratecompressor method)": [[6, "pedalboard.GSMFullRateCompressor.process"]], "process() (pedalboard.gain method)": [[6, "pedalboard.Gain.process"]], "process() (pedalboard.highshelffilter method)": [[6, "pedalboard.HighShelfFilter.process"]], "process() (pedalboard.highpassfilter method)": [[6, "pedalboard.HighpassFilter.process"]], "process() (pedalboard.iirfilter method)": [[6, "pedalboard.IIRFilter.process"]], "process() (pedalboard.invert method)": [[6, "pedalboard.Invert.process"]], "process() (pedalboard.ladderfilter method)": [[6, "pedalboard.LadderFilter.process"]], "process() (pedalboard.limiter method)": [[6, "pedalboard.Limiter.process"]], "process() (pedalboard.lowshelffilter method)": [[6, "pedalboard.LowShelfFilter.process"]], "process() (pedalboard.lowpassfilter method)": [[6, "pedalboard.LowpassFilter.process"]], "process() (pedalboard.mp3compressor method)": [[6, "pedalboard.MP3Compressor.process"]], "process() (pedalboard.mix method)": [[6, "pedalboard.Mix.process"]], "process() (pedalboard.noisegate method)": [[6, "pedalboard.NoiseGate.process"]], "process() (pedalboard.peakfilter method)": [[6, "pedalboard.PeakFilter.process"]], "process() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.process"]], "process() (pedalboard.phaser method)": [[6, "pedalboard.Phaser.process"]], "process() (pedalboard.pitchshift method)": [[6, "pedalboard.PitchShift.process"]], "process() (pedalboard.plugin method)": [[6, "pedalboard.Plugin.process"]], "process() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.process"]], "process() (pedalboard.resample method)": [[6, "pedalboard.Resample.process"]], "process() (pedalboard.reverb method)": [[6, "pedalboard.Reverb.process"]], "process() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.process"]], "quality (pedalboard.resample property)": [[6, "pedalboard.Resample.quality"]], "rate_hz (pedalboard.chorus property)": [[6, "pedalboard.Chorus.rate_hz"]], "raw_state (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.raw_state"]], "raw_state (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.raw_state"]], "remove() (pedalboard.chain method)": [[6, "pedalboard.Chain.remove"]], "remove() (pedalboard.mix method)": [[6, "pedalboard.Mix.remove"]], "remove() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.remove"]], "remove() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.remove"]], "reported_latency_samples (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.reported_latency_samples"]], "reported_latency_samples (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.reported_latency_samples"]], "reset() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.reset"]], "reset() (pedalboard.bitcrush method)": [[6, "pedalboard.Bitcrush.reset"]], "reset() (pedalboard.chain method)": [[6, "pedalboard.Chain.reset"]], "reset() (pedalboard.chorus method)": [[6, "pedalboard.Chorus.reset"]], "reset() (pedalboard.clipping method)": [[6, "pedalboard.Clipping.reset"]], "reset() (pedalboard.compressor method)": [[6, "pedalboard.Compressor.reset"]], "reset() (pedalboard.convolution method)": [[6, "pedalboard.Convolution.reset"]], "reset() (pedalboard.delay method)": [[6, "pedalboard.Delay.reset"]], "reset() (pedalboard.distortion method)": [[6, "pedalboard.Distortion.reset"]], "reset() (pedalboard.externalplugin method)": [[6, "pedalboard.ExternalPlugin.reset"]], "reset() (pedalboard.gsmfullratecompressor method)": [[6, "pedalboard.GSMFullRateCompressor.reset"]], "reset() (pedalboard.gain method)": [[6, "pedalboard.Gain.reset"]], "reset() (pedalboard.highshelffilter method)": [[6, "pedalboard.HighShelfFilter.reset"]], "reset() (pedalboard.highpassfilter method)": [[6, "pedalboard.HighpassFilter.reset"]], "reset() (pedalboard.iirfilter method)": [[6, "pedalboard.IIRFilter.reset"]], "reset() (pedalboard.invert method)": [[6, "pedalboard.Invert.reset"]], "reset() (pedalboard.ladderfilter method)": [[6, "pedalboard.LadderFilter.reset"]], "reset() (pedalboard.limiter method)": [[6, "pedalboard.Limiter.reset"]], "reset() (pedalboard.lowshelffilter method)": [[6, "pedalboard.LowShelfFilter.reset"]], "reset() (pedalboard.lowpassfilter method)": [[6, "pedalboard.LowpassFilter.reset"]], "reset() (pedalboard.mp3compressor method)": [[6, "pedalboard.MP3Compressor.reset"]], "reset() (pedalboard.mix method)": [[6, "pedalboard.Mix.reset"]], "reset() (pedalboard.noisegate method)": [[6, "pedalboard.NoiseGate.reset"]], "reset() (pedalboard.peakfilter method)": [[6, "pedalboard.PeakFilter.reset"]], "reset() (pedalboard.pedalboard method)": [[6, "pedalboard.Pedalboard.reset"]], "reset() (pedalboard.phaser method)": [[6, "pedalboard.Phaser.reset"]], "reset() (pedalboard.pitchshift method)": [[6, "pedalboard.PitchShift.reset"]], "reset() (pedalboard.plugin method)": [[6, "pedalboard.Plugin.reset"]], "reset() (pedalboard.plugincontainer method)": [[6, "pedalboard.PluginContainer.reset"]], "reset() (pedalboard.resample method)": [[6, "pedalboard.Resample.reset"]], "reset() (pedalboard.reverb method)": [[6, "pedalboard.Reverb.reset"]], "reset() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.reset"]], "show_editor() (pedalboard.audiounitplugin method)": [[6, "pedalboard.AudioUnitPlugin.show_editor"]], "show_editor() (pedalboard.vst3plugin method)": [[6, "pedalboard.VST3Plugin.show_editor"]], "target_sample_rate (pedalboard.resample property)": [[6, "pedalboard.Resample.target_sample_rate"]], "time_stretch() (in module pedalboard)": [[6, "pedalboard.time_stretch"]], "units (pedalboard.audioprocessorparameter property)": [[6, "pedalboard.AudioProcessorParameter.units"]], "version (pedalboard.audiounitplugin property)": [[6, "pedalboard.AudioUnitPlugin.version"]], "version (pedalboard.vst3plugin property)": [[6, "pedalboard.VST3Plugin.version"]], "audiofile (class in pedalboard.io)": [[7, "pedalboard.io.AudioFile"]], "audiostream (class in pedalboard.io)": [[7, "pedalboard.io.AudioStream"]], "readableaudiofile (class in pedalboard.io)": [[7, "pedalboard.io.ReadableAudioFile"]], "resampledreadableaudiofile (class in pedalboard.io)": [[7, "pedalboard.io.ResampledReadableAudioFile"]], "streamresampler (class in pedalboard.io)": [[7, "pedalboard.io.StreamResampler"]], "writeableaudiofile (class in pedalboard.io)": [[7, "pedalboard.io.WriteableAudioFile"]], "__enter__() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.__enter__"]], "__enter__() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.__enter__"]], "__enter__() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.__enter__"]], "__exit__() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.__exit__"]], "__exit__() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.__exit__"]], "__exit__() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.__exit__"]], "buffer_size (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.buffer_size"]], "buffered_input_sample_count (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.buffered_input_sample_count"]], "close() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.close"]], "close() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.close"]], "close() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.close"]], "close() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.close"]], "closed (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.closed"]], "closed (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.closed"]], "closed (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.closed"]], "dropped_input_frame_count (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.dropped_input_frame_count"]], "duration (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.duration"]], "duration (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.duration"]], "encode() (pedalboard.io.audiofile static method)": [[7, "pedalboard.io.AudioFile.encode"]], "exact_duration_known (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.exact_duration_known"]], "exact_duration_known (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.exact_duration_known"]], "file_dtype (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.file_dtype"]], "file_dtype (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.file_dtype"]], "file_dtype (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.file_dtype"]], "flush() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.flush"]], "frames (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.frames"]], "frames (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.frames"]], "frames (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.frames"]], "ignore_dropped_input (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.ignore_dropped_input"]], "input_latency (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.input_latency"]], "name (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.name"]], "name (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.name"]], "num_channels (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.num_channels"]], "num_channels (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.num_channels"]], "num_channels (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.num_channels"]], "num_channels (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.num_channels"]], "num_input_channels (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.num_input_channels"]], "num_output_channels (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.num_output_channels"]], "pedalboard.io": [[7, "module-pedalboard.io"]], "play() (pedalboard.io.audiostream static method)": [[7, "pedalboard.io.AudioStream.play"]], "plugins (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.plugins"]], "process() (pedalboard.io.streamresampler method)": [[7, "pedalboard.io.StreamResampler.process"]], "quality (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.quality"]], "quality (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.quality"]], "read() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.read"]], "read() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.read"]], "read() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.read"]], "read_raw() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.read_raw"]], "resampled_to() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.resampled_to"]], "resampling_quality (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.resampling_quality"]], "reset() (pedalboard.io.streamresampler method)": [[7, "pedalboard.io.StreamResampler.reset"]], "run() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.run"]], "running (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.running"]], "sample_rate (pedalboard.io.audiostream property)": [[7, "pedalboard.io.AudioStream.sample_rate"]], "samplerate (pedalboard.io.readableaudiofile property)": [[7, "pedalboard.io.ReadableAudioFile.samplerate"]], "samplerate (pedalboard.io.resampledreadableaudiofile property)": [[7, "pedalboard.io.ResampledReadableAudioFile.samplerate"]], "samplerate (pedalboard.io.writeableaudiofile property)": [[7, "pedalboard.io.WriteableAudioFile.samplerate"]], "seek() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.seek"]], "seek() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.seek"]], "seekable() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.seekable"]], "seekable() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.seekable"]], "source_sample_rate (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.source_sample_rate"]], "target_sample_rate (pedalboard.io.streamresampler property)": [[7, "pedalboard.io.StreamResampler.target_sample_rate"]], "tell() (pedalboard.io.readableaudiofile method)": [[7, "pedalboard.io.ReadableAudioFile.tell"]], "tell() (pedalboard.io.resampledreadableaudiofile method)": [[7, "pedalboard.io.ResampledReadableAudioFile.tell"]], "tell() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.tell"]], "write() (pedalboard.io.audiostream method)": [[7, "pedalboard.io.AudioStream.write"]], "write() (pedalboard.io.writeableaudiofile method)": [[7, "pedalboard.io.WriteableAudioFile.write"]]}}) \ No newline at end of file diff --git a/pedalboard/version.py b/pedalboard/version.py index 9e84b002..80cc5767 100644 --- a/pedalboard/version.py +++ b/pedalboard/version.py @@ -17,6 +17,6 @@ MAJOR = 0 MINOR = 9 -PATCH = 12 +PATCH = 13 __version__ = "%d.%d.%d" % (MAJOR, MINOR, PATCH) diff --git a/pedalboard_native/__init__.pyi b/pedalboard_native/__init__.pyi index cd97d28d..11f5df4c 100644 --- a/pedalboard_native/__init__.pyi +++ b/pedalboard_native/__init__.pyi @@ -1467,7 +1467,7 @@ class PluginContainer(Plugin): Get a plugin by its index. Index may be negative. If the index is out of range, an IndexError will be thrown. """ - def __init__(self, plugins: list[Plugin]) -> None: ... + def __init__(self, plugins: typing.List[Plugin]) -> None: ... def __iter__(self) -> typing.Iterator[Plugin]: ... def __len__(self) -> int: """ diff --git a/pedalboard_native/io/__init__.pyi b/pedalboard_native/io/__init__.pyi index 6243d95e..bb321790 100644 --- a/pedalboard_native/io/__init__.pyi +++ b/pedalboard_native/io/__init__.pyi @@ -427,8 +427,8 @@ class AudioStream: """ - default_input_device_name = "MacBook Pro Microphone" - default_output_device_name = "MacBook Pro Speakers" + default_input_device_name: Optional[str] = None + default_output_device_name: Optional[str] = None input_device_names: typing.List[str] = [] output_device_names: typing.List[str] = [] pass diff --git a/scripts/generate_type_stubs_and_docs.py b/scripts/generate_type_stubs_and_docs.py index a8d95d05..5e72b317 100644 --- a/scripts/generate_type_stubs_and_docs.py +++ b/scripts/generate_type_stubs_and_docs.py @@ -2,6 +2,7 @@ import difflib import importlib import inspect +import io import os import pathlib import re @@ -10,10 +11,13 @@ import sys import traceback import typing +from collections import defaultdict from contextlib import contextmanager +from pathlib import Path from tempfile import TemporaryDirectory from typing import Dict, List +import black import mypy.stubtest import psutil import sphinx.ext.autodoc.importer @@ -23,7 +27,268 @@ from pybind11_stubgen import main as pybind11_stubgen_main from sphinx.cmd.build import main as sphinx_build_main -from scripts.postprocess_type_hints import main as postprocess_type_hints_main +REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) + +""" +This script is intended to postprocess type hint (.pyi) files produced by pybind11-stubgen. + +A number of changes must be made to produce valid type hint files out-of-the-box. +Think of this as a more intelligent (or less intelligent) application of `git patch`. +""" + +OMIT_FILES = [] + +# Any lines containing any of these substrings will be omitted from the pedalboard_native stubs: +OMIT_LINES_CONTAINING = [ + "installed_plugins = [", + "typing._GenericAlias", + "typing._VariadicGenericAlias", + "typing._SpecialForm", + "__annotations__: dict", + "_AVAILABLE_PLUGIN_CLASSES: list", +] + +MULTILINE_REPLACEMENTS = [ + # Users don't want "Peter Sobotโ€™s iPhone Microphone" to show up in their type hints: + (r"input_device_names = \[[^]]*\]\n", "input_device_names: typing.List[str] = []\n"), + ( + r"output_device_names = \[[^]]*\]\n", + "output_device_names: typing.List[str] = []\n", + ), +] + +REPLACEMENTS = [ + # object is a superclass of `str`, which would make these declarations ambiguous: + ( + r"file_like: object, mode: str = 'r'", + r"file_like: typing.Union[typing.BinaryIO, memoryview], mode: str = 'r'", + ), + ( + r"file_like: object\) -> ReadableAudioFile:", + "file_like: typing.Union[typing.BinaryIO, memoryview]) -> ReadableAudioFile:", + ), + ("file_like: object", "file_like: typing.BinaryIO"), + # "r" is the default file open/reading mode: + ("mode: str = 'r'", r'mode: Literal["r"] = "r"'), + # ... but when using "w", "w" needs to be specified explicitly (no default): + ("mode: str = 'w'", r'mode: Literal["w"]'), + # ndarrays need to be corrected as well: + (r"numpy\.ndarray\[(.*?)\]", r"numpy.ndarray[typing.Any, numpy.dtype[\1]]"), + ( + r"import typing", + "\n".join( + [ + "import typing", + "from typing_extensions import Literal", + "from enum import Enum", + "import threading", + ] + ), + ), + ( + r"default_input_device_name = [\"'].*?[\"']", + "default_input_device_name: Optional[str] = None", + ), + ( + r"default_output_device_name = [\"'].*?[\"']", + "default_output_device_name: Optional[str] = None", + ), + # None of our enums are properly detected by pybind11-stubgen. These are brittle hacks: + (r"0, quality: Resample\.Quality", "0, quality: Quality"), + ( + r"self, quality: Resample\.Quality = Quality", + "self, quality: Resample.Quality = Resample.Quality", + ), + ( + r"pedalboard_native\.Resample\.Quality = Quality", + "pedalboard_native.Resample.Quality = pedalboard_native.Resample.Quality", + ), + ( + r".*: pedalboard_native.ExternalPluginReloadType.*", + "", + ), + # Enum values that should not be in __all__: + (r'.*"ClearsAudioOnReset",.*', ""), + (r'.*"PersistsAudioOnReset",.*', ""), + (r'.*"Unknown",.*', ""), + (r'.*"ExternalPluginReloadType",.*', ""), + # Remove type hints in docstrings, added unnecessarily by pybind11-stubgen + (r".*?:type:.*$", ""), + # MyPy chokes on classes that contain both __new__ and __init__. + # Remove all bare, arg-free inits: + (r"def __init__\(self\) -> None: ...", ""), + # Sphinx gets confused when inheriting twice from the same base class: + (r"\(ExternalPlugin, Plugin\)", "(ExternalPlugin)"), + # Python <3.9 doesn't like bare lists in type hints: + (r"-> list\[", "-> typing.List["), + (r": list\[", ": typing.List["), + # pybind11 has trouble when trying to include a type hint for a Python type from C++: + (r"close_event: object = None", r"close_event: typing.Optional[threading.Event] = None"), + # We allow passing an optional py::object to ExternalPlugin, but in truth, + # that needs to be Dict[str, Union[str, float, int, bool]]: + # (r": object = None", ": typing.Dict[str, typing.Union[str, float, int, bool]] = {}"), + ( + "import typing", + """ +import typing + +original_overload = typing.overload +__OVERLOADED_DOCSTRINGS = {} + +def patch_overload(func): + original_overload(func) + if func.__doc__: + __OVERLOADED_DOCSTRINGS[func.__qualname__] = func.__doc__ + else: + func.__doc__ = __OVERLOADED_DOCSTRINGS.get(func.__qualname__) + if func.__doc__: + # Work around the fact that pybind11-stubgen generates + # duplicate docstrings sometimes, once for each overload: + docstring = func.__doc__ + if docstring[len(docstring) // 2:].strip() == docstring[:-len(docstring) // 2].strip(): + func.__doc__ = docstring[len(docstring) // 2:].strip() + return func + +typing.overload = patch_overload + """, + ), +] + +REMOVE_INDENTED_BLOCKS_STARTING_WITH = [ + # TODO(psobot): Add a conditional to _AudioUnitPlugin + # to ensure type stubs only show up on macOS: + # "class _AudioUnitPlugin(Plugin):" + "class ExternalPluginReloadType", +] + +# .pyi files usually don't care about dependent types being present in order in the file; +# but if we want to use Sphinx, our Python files need to be both lexically and semantically +# valid as regular Python files. So... +INDENTED_BLOCKS_TO_MOVE_TO_END = ["class GSMFullRateCompressor"] + +LINES_TO_IGNORE_FOR_MATCH = {"from __future__ import annotations"} + + +def stub_files_match(a: str, b: str) -> bool: + a = "".join( + [x for x in a.split("\n") if x.strip() and x.strip() not in LINES_TO_IGNORE_FOR_MATCH] + ) + b = "".join( + [x for x in b.split("\n") if x.strip() and x.strip() not in LINES_TO_IGNORE_FOR_MATCH] + ) + return a == b + + +def postprocess_type_hints_main(args=None): + parser = argparse.ArgumentParser( + description="Post-process type hint files produced by pybind11-stubgen for Pedalboard." + ) + parser.add_argument( + "source_directory", + default=os.path.join(REPO_ROOT, "pybind11-stubgen-output"), + ) + parser.add_argument( + "target_directory", + default=os.path.join(REPO_ROOT, "pedalboard"), + ) + parser.add_argument( + "--check", + action="store_true", + help=( + "Return a non-zero exit code if files on disk don't match what this script would" + " generate." + ), + ) + args = parser.parse_args(args) + + output_file_to_source_files = defaultdict(list) + for source_path in Path(args.source_directory).rglob("*.pyi"): + output_file_to_source_files[str(source_path)].append(str(source_path)) + + for output_file_name, source_files in output_file_to_source_files.items(): + os.makedirs(os.path.dirname(output_file_name), exist_ok=True) + + print(f"Writing stub file {output_file_name}...") + + file_contents = io.StringIO() + end_of_file_contents = io.StringIO() + for source_file in source_files: + module_name = output_file_name.replace("__init__.pyi", "").replace("/", ".").rstrip(".") + with open(source_file) as f: + source_file_contents = f.read() + for find, replace in MULTILINE_REPLACEMENTS: + source_file_contents = re.sub( + find, replace, source_file_contents, flags=re.DOTALL + ) + lines = [x + "\n" for x in source_file_contents.split("\n")] + + in_excluded_indented_block = False + in_moved_indented_block = False + for line in lines: + if all(x not in line for x in OMIT_LINES_CONTAINING): + if any(line.startswith(x) for x in REMOVE_INDENTED_BLOCKS_STARTING_WITH): + in_excluded_indented_block = True + continue + elif any(line.startswith(x) for x in INDENTED_BLOCKS_TO_MOVE_TO_END): + in_excluded_indented_block = False + in_moved_indented_block = True + elif line.strip() and not line.startswith(" "): + in_excluded_indented_block = False + in_moved_indented_block = False + + if in_excluded_indented_block: + continue + + for _tuple in REPLACEMENTS: + if len(_tuple) == 2: + find, replace = _tuple + only_in_module = None + else: + find, replace, only_in_module = _tuple + if only_in_module and only_in_module != module_name: + continue + results = re.findall(find, line) + if results: + line = re.sub(find, replace, line) + + if in_moved_indented_block: + end_of_file_contents.write(line) + else: + file_contents.write(line) + print(f"\tRead {f.tell():,} bytes of stubs from {source_file}.") + + # Append end-of-file contents at the end: + file_contents.write("\n") + file_contents.write(end_of_file_contents.getvalue()) + + # Run black: + try: + output = black.format_file_contents( + file_contents.getvalue(), + fast=False, + mode=black.FileMode(is_pyi=True, line_length=100), + ) + except black.report.NothingChanged: + output = file_contents.getvalue() + + if args.check: + with open(output_file_name, "r") as f: + existing = f.read() + if not stub_files_match(existing, output): + error = f"File that would be generated ({output_file_name}) " + error += "does not match existing file!\n" + error += f"Existing file had {len(existing):,} bytes, " + error += f"expected {len(output):,} bytes.\nDiff was:\n" + diff = difflib.context_diff(existing.split("\n"), output.split("\n")) + error += "\n".join([x.strip() for x in diff]) + raise ValueError(error) + else: + with open(output_file_name, "w") as o: + o.write(output) + print(f"\tWrote {o.tell():,} bytes of stubs to {output_file_name}.") + + print("Done!") + MAX_DIFF_LINE_LENGTH = 150 diff --git a/scripts/postprocess_type_hints.py b/scripts/postprocess_type_hints.py deleted file mode 100644 index a6129241..00000000 --- a/scripts/postprocess_type_hints.py +++ /dev/null @@ -1,264 +0,0 @@ -""" -This script is intended to postprocess type hint (.pyi) files produced by pybind11-stubgen. - -A number of changes must be made to produce valid type hint files out-of-the-box. -Think of this as a more intelligent (or less intelligent) application of `git patch`. -""" - -import argparse -import difflib -import io -import os -import re -from collections import defaultdict -from pathlib import Path - -import black - -REPO_ROOT = os.path.abspath(os.path.join(os.path.dirname(__file__), "..")) - -OMIT_FILES = [] - -# Any lines containing any of these substrings will be omitted from the pedalboard_native stubs: -OMIT_LINES_CONTAINING = [ - "installed_plugins = [", - "typing._GenericAlias", - "typing._VariadicGenericAlias", - "typing._SpecialForm", - "__annotations__: dict", - "_AVAILABLE_PLUGIN_CLASSES: list", -] - -MULTILINE_REPLACEMENTS = [ - # Users don't want "Peter Sobotโ€™s iPhone Microphone" to show up in their type hints: - (r"input_device_names = \[[^]]*\]\n", "input_device_names: typing.List[str] = []\n"), - ( - r"output_device_names = \[[^]]*\]\n", - "output_device_names: typing.List[str] = []\n", - ), -] - -REPLACEMENTS = [ - # object is a superclass of `str`, which would make these declarations ambiguous: - ( - r"file_like: object, mode: str = 'r'", - r"file_like: typing.Union[typing.BinaryIO, memoryview], mode: str = 'r'", - ), - ( - r"file_like: object\) -> ReadableAudioFile:", - "file_like: typing.Union[typing.BinaryIO, memoryview]) -> ReadableAudioFile:", - ), - ("file_like: object", "file_like: typing.BinaryIO"), - # "r" is the default file open/reading mode: - ("mode: str = 'r'", r'mode: Literal["r"] = "r"'), - # ... but when using "w", "w" needs to be specified explicitly (no default): - ("mode: str = 'w'", r'mode: Literal["w"]'), - # ndarrays need to be corrected as well: - (r"numpy\.ndarray\[(.*?)\]", r"numpy.ndarray[typing.Any, numpy.dtype[\1]]"), - ( - r"import typing", - "\n".join( - [ - "import typing", - "from typing_extensions import Literal", - "from enum import Enum", - "import threading", - ] - ), - ), - # None of our enums are properly detected by pybind11-stubgen. These are brittle hacks: - (r"0, quality: Resample\.Quality", "0, quality: Quality"), - ( - r"self, quality: Resample\.Quality = Quality", - "self, quality: Resample.Quality = Resample.Quality", - ), - ( - r"pedalboard_native\.Resample\.Quality = Quality", - "pedalboard_native.Resample.Quality = pedalboard_native.Resample.Quality", - ), - ( - r".*: pedalboard_native.ExternalPluginReloadType.*", - "", - ), - # Enum values that should not be in __all__: - (r'.*"ClearsAudioOnReset",.*', ""), - (r'.*"PersistsAudioOnReset",.*', ""), - (r'.*"Unknown",.*', ""), - (r'.*"ExternalPluginReloadType",.*', ""), - # Remove type hints in docstrings, added unnecessarily by pybind11-stubgen - (r".*?:type:.*$", ""), - # MyPy chokes on classes that contain both __new__ and __init__. - # Remove all bare, arg-free inits: - (r"def __init__\(self\) -> None: ...", ""), - # Sphinx gets confused when inheriting twice from the same base class: - (r"\(ExternalPlugin, Plugin\)", "(ExternalPlugin)"), - # pybind11 has trouble when trying to include a type hint for a Python type from C++: - (r"close_event: object = None", r"close_event: typing.Optional[threading.Event] = None"), - # We allow passing an optional py::object to ExternalPlugin, but in truth, - # that needs to be Dict[str, Union[str, float, int, bool]]: - # (r": object = None", ": typing.Dict[str, typing.Union[str, float, int, bool]] = {}"), - ( - "import typing", - """ -import typing - -original_overload = typing.overload -__OVERLOADED_DOCSTRINGS = {} - -def patch_overload(func): - original_overload(func) - if func.__doc__: - __OVERLOADED_DOCSTRINGS[func.__qualname__] = func.__doc__ - else: - func.__doc__ = __OVERLOADED_DOCSTRINGS.get(func.__qualname__) - if func.__doc__: - # Work around the fact that pybind11-stubgen generates - # duplicate docstrings sometimes, once for each overload: - docstring = func.__doc__ - if docstring[len(docstring) // 2:].strip() == docstring[:-len(docstring) // 2].strip(): - func.__doc__ = docstring[len(docstring) // 2:].strip() - return func - -typing.overload = patch_overload - """, - ), -] - -REMOVE_INDENTED_BLOCKS_STARTING_WITH = [ - # TODO(psobot): Add a conditional to _AudioUnitPlugin - # to ensure type stubs only show up on macOS: - # "class _AudioUnitPlugin(Plugin):" - "class ExternalPluginReloadType", -] - -# .pyi files usually don't care about dependent types being present in order in the file; -# but if we want to use Sphinx, our Python files need to be both lexically and semantically -# valid as regular Python files. So... -INDENTED_BLOCKS_TO_MOVE_TO_END = ["class GSMFullRateCompressor"] - -LINES_TO_IGNORE_FOR_MATCH = {"from __future__ import annotations"} - - -def stub_files_match(a: str, b: str) -> bool: - a = "".join( - [x for x in a.split("\n") if x.strip() and x.strip() not in LINES_TO_IGNORE_FOR_MATCH] - ) - b = "".join( - [x for x in b.split("\n") if x.strip() and x.strip() not in LINES_TO_IGNORE_FOR_MATCH] - ) - return a == b - - -def main(args=None): - parser = argparse.ArgumentParser( - description="Post-process type hint files produced by pybind11-stubgen for Pedalboard." - ) - parser.add_argument( - "source_directory", - default=os.path.join(REPO_ROOT, "pybind11-stubgen-output"), - ) - parser.add_argument( - "target_directory", - default=os.path.join(REPO_ROOT, "pedalboard"), - ) - parser.add_argument( - "--check", - action="store_true", - help=( - "Return a non-zero exit code if files on disk don't match what this script would" - " generate." - ), - ) - args = parser.parse_args(args) - - output_file_to_source_files = defaultdict(list) - for source_path in Path(args.source_directory).rglob("*.pyi"): - output_file_to_source_files[str(source_path)].append(str(source_path)) - - for output_file_name, source_files in output_file_to_source_files.items(): - os.makedirs(os.path.dirname(output_file_name), exist_ok=True) - - print(f"Writing stub file {output_file_name}...") - - file_contents = io.StringIO() - end_of_file_contents = io.StringIO() - for source_file in source_files: - module_name = output_file_name.replace("__init__.pyi", "").replace("/", ".").rstrip(".") - with open(source_file) as f: - source_file_contents = f.read() - for find, replace in MULTILINE_REPLACEMENTS: - source_file_contents = re.sub( - find, replace, source_file_contents, flags=re.DOTALL - ) - lines = [x + "\n" for x in source_file_contents.split("\n")] - - in_excluded_indented_block = False - in_moved_indented_block = False - for line in lines: - if all(x not in line for x in OMIT_LINES_CONTAINING): - if any(line.startswith(x) for x in REMOVE_INDENTED_BLOCKS_STARTING_WITH): - in_excluded_indented_block = True - continue - elif any(line.startswith(x) for x in INDENTED_BLOCKS_TO_MOVE_TO_END): - in_excluded_indented_block = False - in_moved_indented_block = True - elif line.strip() and not line.startswith(" "): - in_excluded_indented_block = False - in_moved_indented_block = False - - if in_excluded_indented_block: - continue - - for _tuple in REPLACEMENTS: - if len(_tuple) == 2: - find, replace = _tuple - only_in_module = None - else: - find, replace, only_in_module = _tuple - if only_in_module and only_in_module != module_name: - continue - results = re.findall(find, line) - if results: - line = re.sub(find, replace, line) - - if in_moved_indented_block: - end_of_file_contents.write(line) - else: - file_contents.write(line) - print(f"\tRead {f.tell():,} bytes of stubs from {source_file}.") - - # Append end-of-file contents at the end: - file_contents.write("\n") - file_contents.write(end_of_file_contents.getvalue()) - - # Run black: - try: - output = black.format_file_contents( - file_contents.getvalue(), - fast=False, - mode=black.FileMode(is_pyi=True, line_length=100), - ) - except black.report.NothingChanged: - output = file_contents.getvalue() - - if args.check: - with open(output_file_name, "r") as f: - existing = f.read() - if not stub_files_match(existing, output): - error = f"File that would be generated ({output_file_name}) " - error += "does not match existing file!\n" - error += f"Existing file had {len(existing):,} bytes, " - error += f"expected {len(output):,} bytes.\nDiff was:\n" - diff = difflib.context_diff(existing.split("\n"), output.split("\n")) - error += "\n".join([x.strip() for x in diff]) - raise ValueError(error) - else: - with open(output_file_name, "w") as o: - o.write(output) - print(f"\tWrote {o.tell():,} bytes of stubs to {output_file_name}.") - - print("Done!") - - -if __name__ == "__main__": - main()