pedalboard
هي مكتبة Python للعمل مع الصوت: القراءة والكتابة والعرض وإضافة التأثيرات والمزيد. وهو يدعم تنسيقات الملفات الصوتية الأكثر شيوعًا وعددًا من المؤثرات الصوتية الشائعة، كما يسمح أيضًا باستخدام تنسيقات VST3® وAudio Unit لتحميل أدوات وتأثيرات برامج الطرف الثالث.
تم إنشاء pedalboard
بواسطة مختبر الذكاء الصوتي التابع لـ Spotify لتمكين استخدام المؤثرات الصوتية بجودة الاستوديو من داخل Python وTensorFlow. داخليًا في Spotify، يتم استخدام pedalboard
لزيادة البيانات لتحسين نماذج التعلم الآلي وللمساعدة في تشغيل ميزات مثل AI DJ وAI Voice Translation من Spotify. تساعد 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 (عبر Platform Wheels):
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.
manylinux
و musllinux
مصممة لـ x86_64
(Intel/AMD) و aarch64
(ARM/Apple Silicon)amd64
(x86-64، Intel/AMD) ملاحظة : إذا كنت تفضل مشاهدة مقطع فيديو بدلاً من قراءة الأمثلة أو الوثائق، فشاهد العمل مع الصوت في Python (feat. Pedalboard) على 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 )
ملاحظة : لمزيد من المعلومات حول كيفية معالجة الصوت من خلال مكونات Pedalboard الإضافية، بما في ذلك كيفية عمل معلمة
reset
، راجع وثائق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
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
مرخصة بموجب رخصة جنو العامة v3. تتضمن pedalboard
عددًا من المكتبات التي تم تجميعها بشكل ثابت، والتي تحمل التراخيص التالية:
PitchShift
ووظائف time_stretch
مكتبة الشريط المطاطي، المرخصة بشكل مزدوج بموجب ترخيص تجاري وGPLv2 (أو أحدث). تم تضمين FFTW أيضًا لتسريع الشريط المطاطي، وهو مرخص بموجب GPLv2 (أو الأحدث).MP3Compressor
libmp3lame من مشروع LAME، المرخص بموجب LGPLv2 وتم ترقيته إلى GPLv3 لتضمينه في هذا المشروع (كما يسمح به LGPLv2).GSMFullRateCompressor
libgsm، المرخص بموجب ترخيص ISC والمتوافق مع GPLv3.VST هي علامة تجارية مسجلة لشركة Steinberg Media Technologies GmbH.