今回はSpotifyの音声エフェクトライブラリ
Pedalboardを試してみました。

解説動画はこちら

 


Pedalboard

spotify pedalboard

Spotifyの開発した
音声用のエフェクトライブラリです。

本来のペダルボードは
ss_pedal

こんな感じのイメージで
ギタリストが良く使う
足踏みエフェクター群を
沢山置いた板(エフェクトセット)
という意味合いかと思います。

それを再現出来るライブラリということになります。

pedalboardの
中にはたくさんのエフェクターが
内包されています。


インストール方法

Google Colabでの使用方法ですが
一般PCも同じ方法でコマンド一発です。
!pip3 install pedalboard


ライブラリのインポート

pedalboardを使用するには
始めにたくさんのライブラリを
読み込んでおく必要があります。
import librosa
from pedalboard.io import AudioFile
from pedalboard import (
    Pedalboard,
    Gain,
    Chorus,
    Phaser,
    Reverb,
    Compressor,
    LadderFilter,
)
import IPython.display as display
from matplotlib import pyplot as plt
librosaは音声用のライブラリです。
matplotlibに関しては後ほど
音声波形の可視化に使用します。



エフェクターの種類

一般的な音声エフェクターと同じ
エフェクトが存在します。

Compressor:音を圧縮する
Gain 音量を上げる
Chorus:コーラスをつける(ちょっと厚みを付ける)
Phaser:位相を変え、うねりを付加する(シュワシュワさせる)
LadderFilter:フィルターをかける
Reverb:反響音をつける



サンプルコード


音声ファイルの読み込み

まずはじめに音声ファイルの読み込みを行います。

librosaのサンプル音声ファイルの「trumpet」
を使っていきます。
(サンプリングレート44.1KHz、モノラル、音の長さ5秒)
# サンプル音源を読み込む
audio, sr = librosa.load(librosa.example('trumpet', hq=True), sr=44100)
print(type(audio))
print(audio.size)

display.Audio(audio, rate=sr)

どんな音声になるかは
動画を見てみて下さいね。



エフェクトをかける

ライブラリで読み込んだ関数
Pedalboard を用いて音声を変換できます。
変換後の音声の変数 = Pedalboard([エフェクト関数 , ・・・])

Pedalboardの引数には
エフェクト関数をリストで渡します。

読み込みしたライブラリ のエフェクト関数が
それに該当します。


コンプレッサー
ゲイン
コーラスをかけるコードはこうなります。
# コンプレッサー、ゲイン、コーラス
board = Pedalboard([
    Compressor(threshold_db=-50, ratio=25),
    Gain(gain_db=30),
    Chorus(),
])
effected_audio = board(audio ,sr)

# エフェクトかけた音源を再生 display.Audio(effected_audio, rate=sr)

エフェクト関数にはそれぞれ
引数が指定できるものも有りますが
ここでは割愛しますので
細かく設定したい方はSpotifyの資料を
みてみて下さい。


オリジナル音声との波形の違い


オリジナルの音声と
エフェクトをかけた後の音声の違いを
可視化するコードはこちらです。
# オリジナル音源
plt.figure()
plt.subplot(2, 1, 1)
librosa.display.waveshow(audio, sr=sr, color='b')
plt.title('Original')

# エフェクトかけた音源
plt.subplot(2, 1, 2)
librosa.display.waveshow(effected_audio, sr=sr, color='r')
plt.title('Effected')

plt.tight_layout()
plt.show()
download

こんな感じで結果が見れます。


音声を保存する


Colabでも、エフェクトをかけた音声を保存できます。
# オーディオファイルの保存
with AudioFile('ファイル名.wav', 'w', sr, num_channels=1) as f:
    f.write(effected_audio)

指定したファイル置き場に音声ファイルが出力されます。



最後に

ギターは弾けませんが
BOSSのエフェクターとか結構好きで
あれを沢山集めるのって
すごく憧れが有るんですよねー

それをデジタル上で再現できてしまう
ライブラリになるので
色々遊んでみて下さい。

それでは。