Skip to main content

Cython-based simple VST 2.4 Host and VST Plugins wrapper. Fast work and clean python object-oriented interface

Project description

py-neil-vst

Cython-based simple VST 2.4 Host and VST Plugins wrapper. Fast work and clean python object-oriented interface, minimum memory required for the one VST HOST instance.

  • Supported platforms: Windows 64bit
  • Supported python versions: 3.7, 3.8, 3.9
  • Supported VST Plugins: only 64-bit/VST2

Create VST host and the one VST plugin (XILS DeeS) example:

from neil_vst import VstHost, VstPlugin
# create VST host
vst_host = VstHost(samplerate=44100, buffer_size=1024, log_level="DEBUG")
# create VST plugin effect
plugin = VstPlugin(
    host=vst_host,
    vst_path_lib="C:/Program Files/Common Files/VST2/XILS DeeS.dll",
    sample_rate=44100,
    block_size=1024,
    max_channels=4,
    self_buffers=True,
    log_level="DEBUG",
)

print( plugin.info() )

Process stereo audio file with Raum VST plugin:

import numpy
from soundfile import SoundFile
from neil_vst import VstHost, VstPlugin

# open input audio file
in_file = SoundFile(infilepath, mode='r', closefd=True)
# create output audio file
out_file = SoundFile(
    outfilepath,
    mode='w',
    samplerate=in_file.samplerate,
    channels=in_file.channels,
    subtype=in_file.subtype,
    closefd=True
)
# sample buffer size
buffer_size = 1024
# create VST host
vst_host = VstHost(samplerate=in_file.samplerate, buffer_size=buffer_size, log_level="DEBUG")
# create VST plugin effect
plugin = VstPlugin(
    host=vst_host,
    vst_path_lib="C:/Program Files/Common Files/VST2/Raum.dll",
    sample_rate=in_file.samplerate,
    block_size=buffer_size,
    max_channels=8,
    self_buffers=True,
    log_level="DEBUG",
)
# process stereo audio file
for block in in_file.blocks(blocksize=self._buffer_size, always_2d=True):
    # prepare buffer from numpy array
    block_rl = block.transpose()
    buf_in = [
        block_rl[0].astype(numpy.float32).ctypes.data,
        block_rl[1].astype(numpy.float32).ctypes.data ]
    # VST process replasing
    plugin.process_replacing( buf_in, plugin.out_buffers, len(block) )
    # get back to numpy array for save to output audio file
    out_left = numpy.ctypeslib.as_array(
        ctypes.cast(plugin.out_buffers[0], ctypes.POINTER(ctypes.c_float)), shape=(len(block),)
    )
    out_right = numpy.ctypeslib.as_array(
        ctypes.cast(plugin.out_buffers[1], ctypes.POINTER(ctypes.c_float)), shape=(len(block),)
    )
    # write out data to output audio file
    out_file.write( [out_left, out_right] )

Open VST plugin GUI with PyQt5 QWidget with callback example:

import sys
import logging
from PyQt5 import QtWidgets
from neil_vst import VstHost, VstPlugin

class VSTPluginWindowExample(QtWidgets.QWidget):
    def __init__(self, plugin, parent=None):
        super(VSTPluginWindowExample, self).__init__(parent)
        # set self window name
        self.setWindowTitle(plugin.name)
        # set self size corresponding to plugin size
        rect = plugin.edit_get_rect()
        self.resize(rect["right"], rect["bottom"])
        # open plugin GUI to self
        plugin.edit_open(int(self.winId()))
        # self show
        self.show()

if __name__ == '__main__':
    app = QtWidgets.QApplication(sys.argv)
    vst_host = VstHost(44100, log_level=logging.DEBUG)
    plugin = VstPlugin(vst_host, "C:/Program Files/Common Files/VST2/TDR VOS SlickEQ.dll", log_level=logging.DEBUG)
    plugin_window = VSTPluginWindowExample(plugin)
    sys.exit(app.exec_())

CLI util example:

>>> neil_vst_chain -h

usage: neil_vst_chain [-h] [-f FOLDER] [-j JOB] [-o OUTPUT] [-b BUFFERSIZE] [-v] [-i]

optional arguments:
  -h, --help            show this help message and exit
  -f FOLDER, --folder FOLDER
                        folder with input audio files (default: .)
  -j JOB, --job JOB     JSON job file
  -o OUTPUT, --output OUTPUT
                        output folder for audio files (default: ./out)
  -b BUFFERSIZE, --buffersize BUFFERSIZE
                        buffer size in bytes [1024...65536] (default: 8096)
  -v, --verbose         verbose logging (default: False)
  -i, --info            show all parameters info for loaded VST (default: False)

Process all files in selected folder from CLI example:

>>> neil_vst_chain -f in_folder -j job_file.json -o out_folder -b 16192
or
>>> neil_vst_chain --folder in_folder --job job_file.json --output out_folder --buffersize 16192

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

neil_vst-0.2.7.tar.gz (310.9 kB view details)

Uploaded Source

Built Distribution

neil_vst-0.2.7-cp39-cp39-win_amd64.whl (534.5 kB view details)

Uploaded CPython 3.9Windows x86-64

File details

Details for the file neil_vst-0.2.7.tar.gz.

File metadata

  • Download URL: neil_vst-0.2.7.tar.gz
  • Upload date:
  • Size: 310.9 kB
  • Tags: Source
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.0

File hashes

Hashes for neil_vst-0.2.7.tar.gz
Algorithm Hash digest
SHA256 6d365add22e565f7e37c087a4efa6241dd6bf93548c23a5595fcc460ba296217
MD5 e25997e6737df1a3847a7466e2c65a81
BLAKE2b-256 f388830eaf97462924a82295602d3465e87249bfc46fc373206305e79b8a8bad

See more details on using hashes here.

File details

Details for the file neil_vst-0.2.7-cp39-cp39-win_amd64.whl.

File metadata

  • Download URL: neil_vst-0.2.7-cp39-cp39-win_amd64.whl
  • Upload date:
  • Size: 534.5 kB
  • Tags: CPython 3.9, Windows x86-64
  • Uploaded using Trusted Publishing? No
  • Uploaded via: twine/3.4.2 importlib_metadata/4.8.1 pkginfo/1.7.1 requests/2.24.0 requests-toolbelt/0.9.1 tqdm/4.62.2 CPython/3.9.0

File hashes

Hashes for neil_vst-0.2.7-cp39-cp39-win_amd64.whl
Algorithm Hash digest
SHA256 7428335e59848f36b452164a1adb1aa2d0a402841a68b20a3879f414658e06b8
MD5 233a92250c49cbdd13235306e712b824
BLAKE2b-256 6293eeb714449b6a3d54687b094f1b0329180f9b7a050cd9c383f2ff3d126a36

See more details on using hashes here.

Supported by

AWS Cloud computing and Security Sponsor Datadog Monitoring Fastly CDN Google Download Analytics Pingdom Monitoring Sentry Error logging StatusPage Status page