pedalboard
는 오디오 작업(읽기, 쓰기, 렌더링, 효과 추가 등)을 위한 Python 라이브러리입니다. 가장 널리 사용되는 오디오 파일 형식과 다양한 일반 오디오 효과를 즉시 지원하며, 타사 소프트웨어 악기 및 효과를 로드하기 위해 VST3® 및 Audio Unit 형식을 사용할 수도 있습니다.
pedalboard
Python 및 TensorFlow 내에서 스튜디오 품질의 오디오 효과를 사용할 수 있도록 Spotify의 Audio Intelligence Lab에서 제작되었습니다. Spotify 내부적으로 pedalboard
기계 학습 모델을 개선하고 Spotify의 AI DJ 및 AI 음성 번역과 같은 기능을 강화하기 위한 데이터 증강에 사용됩니다. 또한 pedalboard
디지털 오디오 워크스테이션을 사용하지 않고도 오디오에 효과를 추가할 수 있어 콘텐츠 제작 과정에도 도움이 됩니다.
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
PyPI(플랫폼 휠을 통해)를 통해 사용할 수 있습니다.
pip install pedalboard # That's it! No other dependencies required.
Python을 처음 사용하는 경우 INSTALLATION.md를 따라 강력한 가이드를 확인하세요.
pedalboard
Python 3.8, 3.9, 3.10, 3.11, 3.12 및 3.13에서 철저하게 테스트되었습니다.
x86_64
(Intel/AMD) 및 aarch64
(ARM/Apple Silicon)용으로 제작된 플랫폼 manylinux
및 musllinux
휠amd64
(x86-64, Intel/AMD)에 사용 가능한 플랫폼 휠 참고 : 예제나 문서를 읽는 대신 비디오를 시청하려면 YouTube에서 Working with Audio in Python(feat. Pedalboard)을 시청하세요 .
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 )
참고 :
reset
매개변수의 작동 방식을 포함하여 Pedalboard 플러그인을 통해 오디오를 처리하는 방법에 대한 자세한 내용은pedalboard.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 )
이 예에서는 동일한 오디오에서 여러 페달보드를 병렬로 실행하여 지연된 피치 이동 효과를 만듭니다. Pedalboard
객체는 그 자체로 Plugin
객체이므로 원하는 만큼 중첩할 수 있습니다.
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
AudioStream
개체를 통해 라이브 오디오 스트리밍을 지원하므로 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
파이프라인에서 Pedalboard 사용 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 )
더 많은 예를 보려면 다음을 참조하세요.
pedalboard
에 대한 기여를 환영합니다! 자세한 내용은 CONTRIBUTING.md를 참조하세요.
학술 작업에서 pedalboard
인용하려면 Zenodo의 항목을 사용하세요.
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
저작권은 2021-2024 Spotify AB입니다.
pedalboard
GNU General Public License v3에 따라 라이센스가 부여됩니다. pedalboard
정적으로 컴파일되고 다음 라이센스를 전달하는 여러 라이브러리가 포함되어 있습니다.
PitchShift
플러그인과 time_stretch
기능은 상업용 라이센스와 GPLv2(또는 그 이상)에 따라 이중 라이센스가 부여된 Rubber Band Library를 사용합니다. FFTW는 Rubber Band 속도를 높이기 위해 포함되어 있으며 GPLv2(또는 그 이상)에 따라 라이센스가 부여됩니다.MP3Compressor
플러그인은 LGPLv2에 따라 라이센스가 부여되고 이 프로젝트에 포함하기 위해 GPLv3으로 업그레이드된 LAME 프로젝트의 libmp3lame을 사용합니다(LGPLv2에서 허용하는 대로).GSMFullRateCompressor
플러그인은 ISC 라이센스에 따라 라이센스가 부여되고 GPLv3과 호환되는 libgsm을 사용합니다.VST는 Steinberg Media Technologies GmbH의 등록 상표입니다.