pedalboard
es una biblioteca de Python para trabajar con audio: leer, escribir, renderizar, agregar efectos y más. Admite los formatos de archivos de audio más populares y una serie de efectos de audio comunes listos para usar, y también permite el uso de formatos VST3® y Audio Unit para cargar instrumentos y efectos de software de terceros.
pedalboard
fue creada por Audio Intelligence Lab de Spotify para permitir el uso de efectos de audio con calidad de estudio desde Python y TensorFlow. Internamente en Spotify, pedalboard
se utiliza para aumentar los datos a fin de mejorar los modelos de aprendizaje automático y ayudar a potenciar funciones como AI DJ y AI Voice Translation de Spotify. pedalboard
también ayuda en el proceso de creación de contenido, permitiendo agregar efectos al audio sin usar una estación de trabajo de audio digital.
O(1)
AudioStream
Chorus
, Distortion
, Phaser
, Clipping
Compressor
, Gain
, Limiter
HighpassFilter
, LadderFilter
, LowpassFilter
Convolution
, Delay
, Reverb
PitchShift
GSMFullRateCompressor
, MP3Compressor
Resample
, Bitcrush
pedalboard.load_plugin
)multiprocessing
!tf.data
! pedalboard
está disponible a través de PyPI (a través de Platform Wheels):
pip install pedalboard # That's it! No other dependencies required.
Si es nuevo en Python, siga INSTALLATION.md para obtener una guía completa.
pedalboard
se prueba exhaustivamente con Python 3.8, 3.9, 3.10, 3.11, 3.12 y 3.13.
manylinux
y musllinux
wheels construidas para x86_64
(Intel/AMD) y aarch64
(ARM/Apple Silicon)amd64
(x86-64, Intel/AMD) Nota : si prefieres ver un vídeo en lugar de leer ejemplos o documentación, mira Trabajar con audio en Python (con Pedalboard) en YouTube .
from pedalboard import Pedalboard , Chorus , Reverb
from pedalboard . io import AudioFile
# Make a Pedalboard object, containing multiple audio plugins:
board = Pedalboard ([ Chorus (), Reverb ( room_size = 0.25 )])
# Open an audio file for reading, just like a regular file:
with AudioFile ( 'some-file.wav' ) as f :
# Open an audio file to write to:
with AudioFile ( 'output.wav' , 'w' , f . samplerate , f . num_channels ) as o :
# Read one second of audio at a time, until the file is empty:
while f . tell () < f . frames :
chunk = f . read ( f . samplerate )
# Run the audio through our pedalboard:
effected = board ( chunk , f . samplerate , reset = False )
# Write the output to our output file:
o . write ( effected )
Nota : Para obtener más información sobre cómo procesar audio a través de complementos de Pedalboard, incluido cómo funciona el parámetro
reset
, consulte la documentación depedalboard.Plugin.process
.
# Don't do import *! (It just makes this example smaller)
from pedalboard import *
from pedalboard . io import AudioFile
# Read in a whole file, resampling to our desired sample rate:
samplerate = 44100.0
with AudioFile ( 'guitar-input.wav' ). resampled_to ( samplerate ) as f :
audio = f . read ( f . frames )
# Make a pretty interesting sounding guitar pedalboard:
board = Pedalboard ([
Compressor ( threshold_db = - 50 , ratio = 25 ),
Gain ( gain_db = 30 ),
Chorus (),
LadderFilter ( mode = LadderFilter . Mode . HPF12 , cutoff_hz = 900 ),
Phaser (),
Convolution ( "./guitar_amp.wav" , 1.0 ),
Reverb ( room_size = 0.25 ),
])
# Pedalboard objects behave like lists, so you can add plugins:
board . append ( Compressor ( threshold_db = - 25 , ratio = 10 ))
board . append ( Gain ( gain_db = 10 ))
board . append ( Limiter ())
# ... or change parameters easily:
board [ 0 ]. threshold_db = - 40
# Run the audio through this pedalboard!
effected = board ( audio , samplerate )
# Write the audio back as a wav file:
with AudioFile ( 'processed-output.wav' , 'w' , samplerate , effected . shape [ 0 ]) as f :
f . write ( effected )
from pedalboard import Pedalboard , Reverb , load_plugin
from pedalboard . io import AudioFile
from mido import Message # not part of Pedalboard, but convenient!
# Load a VST3 or Audio Unit plugin from a known path on disk:
instrument = load_plugin ( "./VSTs/Magical8BitPlug2.vst3" )
effect = load_plugin ( "./VSTs/RoughRider3.vst3" )
print ( effect . parameters . keys ())
# dict_keys([
# 'sc_hpf_hz', 'input_lvl_db', 'sensitivity_db',
# 'ratio', 'attack_ms', 'release_ms', 'makeup_db',
# 'mix', 'output_lvl_db', 'sc_active',
# 'full_bandwidth', 'bypass', 'program',
# ])
# Set the "ratio" parameter to 15
effect . ratio = 15
# Render some audio by passing MIDI to an instrument:
sample_rate = 44100
audio = instrument (
[ Message ( "note_on" , note = 60 ), Message ( "note_off" , note = 60 , time = 5 )],
duration = 5 , # seconds
sample_rate = sample_rate ,
)
# Apply effects to this audio:
effected = effect ( audio , sample_rate )
# ...or put the effect into a chain with other plugins:
board = Pedalboard ([ effect , Reverb ()])
# ...and run that pedalboard with the same VST instance!
effected = board ( audio , sample_rate )
Este ejemplo crea un efecto de cambio de tono retardado ejecutando múltiples pedaleras en paralelo en el mismo audio. Los objetos Pedalboard
son en sí mismos objetos Plugin
, por lo que puedes anidarlos tanto como quieras:
from pedalboard import Pedalboard , Compressor , Delay , Distortion , Gain , PitchShift , Reverb , Mix
passthrough = Gain ( gain_db = 0 )
delay_and_pitch_shift = Pedalboard ([
Delay ( delay_seconds = 0.25 , mix = 1.0 ),
PitchShift ( semitones = 7 ),
Gain ( gain_db = - 3 ),
])
delay_longer_and_more_pitch_shift = Pedalboard ([
Delay ( delay_seconds = 0.5 , mix = 1.0 ),
PitchShift ( semitones = 12 ),
Gain ( gain_db = - 6 ),
])
board = Pedalboard ([
# Put a compressor at the front of the chain:
Compressor (),
# Run all of these pedalboards simultaneously with the Mix plugin:
Mix ([
passthrough ,
delay_and_pitch_shift ,
delay_longer_and_more_pitch_shift ,
]),
# Add a reverb on the final mix:
Reverb ()
])
pedalboard
admite la transmisión de audio en vivo a través de un objeto AudioStream
, lo que permite la manipulación del audio en tiempo real agregando efectos en Python.
from pedalboard import Pedalboard , Chorus , Compressor , Delay , Gain , Reverb , Phaser
from pedalboard . io import AudioStream
# Open up an audio stream:
with AudioStream (
input_device_name = "Apogee Jam+" , # Guitar interface
output_device_name = "MacBook Pro Speakers"
) as stream :
# Audio is now streaming through this pedalboard and out of your speakers!
stream . plugins = Pedalboard ([
Compressor ( threshold_db = - 50 , ratio = 25 ),
Gain ( gain_db = 30 ),
Chorus (),
Phaser (),
Convolution ( "./guitar_amp.wav" , 1.0 ),
Reverb ( room_size = 0.25 ),
])
input ( "Press enter to stop streaming..." )
# The live AudioStream is now closed, and audio has stopped.
tf.data
Pipelines import tensorflow as tf
sr = 48000
# Put whatever plugins you like in here:
plugins = pedalboard . Pedalboard ([ pedalboard . Gain (), pedalboard . Reverb ()])
# Make a dataset containing random noise:
# NOTE: for real training, here's where you'd want to load your audio somehow:
ds = tf . data . Dataset . from_tensor_slices ([ np . random . rand ( sr )])
# Apply our Pedalboard instance to the tf.data Pipeline:
ds = ds . map ( lambda audio : tf . numpy_function ( plugins . process , [ audio , sr ], tf . float32 ))
# Create and train a (dummy) ML model on this audio:
model = tf . keras . models . Sequential ([ tf . keras . layers . InputLayer ( input_shape = ( sr ,)), tf . keras . layers . Dense ( 1 )])
model . compile ( loss = "mse" )
model . fit ( ds . map ( lambda effected : ( effected , 1 )). batch ( 1 ), epochs = 10 )
Para más ejemplos, consulte:
¡Las contribuciones a pedalboard
son bienvenidas! Consulte CONTRIBUTING.md para obtener más detalles.
Para citar pedalboard
en trabajos académicos, utilice su entrada en Zenodo:
Para citar vía BibTeX:
@software{sobot_peter_2023_7817838,
author = {Sobot, Peter},
title = {Pedalboard},
month = jul,
year = 2021,
publisher = {Zenodo},
doi = {10.5281/zenodo.7817838},
url = {https://doi.org/10.5281/zenodo.7817838}
}
pedalboard
tiene derechos de autor 2021-2024 Spotify AB.
pedalboard
tiene la licencia GNU General Public License v3. pedalboard
incluye una serie de bibliotecas que están compiladas estáticamente y que cuentan con las siguientes licencias:
PitchShift
y las funciones time_stretch
utilizan la biblioteca Rubber Band, que tiene doble licencia comercial y GPLv2 (o más reciente). FFTW también se incluye para acelerar Rubber Band y tiene licencia GPLv2 (o más reciente).MP3Compressor
utiliza libmp3lame del proyecto LAME, que tiene licencia LGPLv2 y se actualizó a GPLv3 para su inclusión en este proyecto (según lo permitido por LGPLv2).GSMFullRateCompressor
utiliza libgsm, que tiene la licencia ISC y es compatible con GPLv3.VST es una marca registrada de Steinberg Media Technologies GmbH.