SFZサンプル音源の編集(例2:ピアノベロシティレイヤーを組む)

(2020.08.29執筆)


前回の記事では、簡易なオルゴール音源を元に.sfzを1から組み上げました。
今回は、音源を組むのに一番重要な「ダイナミクス変化」のベロシティについて。ピアノのベロシティレイヤーを例にメモを書き記します。

ベロシティの加減(大小)が流れるように調整

ピアノの場合、昨今の有料音源にもなると18段階ベロシティレイヤとか24段階とか。すっごい容量食いの音源に化けてます。 それくらいピアノの音はベロシティの加減が繊細で、キータッチでの音量だったり音質の変化が重要な音源です。

生楽器の音源を一から組むに辺り、小さな音から大きな音までを、どう自然な流れに組み上げるか?というのが音源制作の最も、最も重要な所でしょう。 ピアノの場合はベロシティレイヤーの調整が肝。

既に完成された、信頼のおける有料音源を使うなら、基本そのままでOKでしょう。
しかしこの記事の目的は、音は良いが元々レイヤー数の少ない、入門者向けのサンプル音源を最大限まで活かすこと。
この経験は、ピアノだけでなく色んな打楽器、ギターやハープなどにも活用できると思います。
(メモリ消費が極小で済むというメリットも◎)

例:Logic EXS24 SteinweyGrandPiano

付属音源として愛用者の多いLogicのSteinwayGrandPianoは、ベロシティレイヤー4つというのが難です。 これを一度バラして、ベロシティレイヤー組み直しでどう変わるか実験してみます。

《Logic9 Steinway Grand Piano 初期状態》



Logicでの初期設定をSFZで再現.

ベロシティ0~39でV2のサンプル
ベロシティ40~59でV3のサンプル
ベロシティ60~105でV4のサンプル
ベロシティ106~127でV5のサンプル

と、完全にサンプルが使われる領域が別れているため、音の切り替わる境目が目立ちます。初期設定での難所です。 動画は数値で確認できる範囲でのみsfzで再現したため、実際の挙動とは異なる点もあると思います。ご了承ください。

コレをうまく調整してあげると、↓のように変わります。

《SFZカスタマイズ後のSteinway Grand Piano》




...意外と、音量の異なる複数のサンプルを整理するのって難しいんですよ。 .sfz形式では音量を弄る設定だけでも、

volume
lovel, hivel(velocity)
amp_veltrack
amp_velcurve_数字

とあるので、レイヤー毎に適切な音量を設定するのは普通に骨が折れます。
しかしピアノや「はじく」弦、打楽器等の場合は、ベロシティクロスフェードを使うことでスムーズな音量推移が実現できます。

ベロシティクロスフェードを活用する

今回のベロシティクロスフェード記述例を記すと、以下のような感じです。
<global>
amp_veltrack=48
xf_velcurve=power
ampeg_release=0.4

<group> //V2
volume=-10
lovel=0 hivel=63 xfout_lovel=31 xfout_hivel=63
<region> //・・・
<region> lokey=56 pitch_keycenter=57 hikey=58 sample=Steinway V2 057.wav
<region> //・・・

<group> //V3
volume=-4
lovel=31 hivel=96 xfin_lovel=31 xfin_hivel=63 xfout_lovel=64 xfout_hivel=96
<region> //・・・
<region> lokey=56 pitch_keycenter=57 hikey=58 sample=Steinway V3 057.wav
<region> //・・・

<group> //V4
volume=-2
lovel=64 hivel=127 xfin_lovel=64 xfin_hivel=96 xfout_lovel=96 xfout_hivel=127
<region> //・・・
<region> lokey=56 pitch_keycenter=57 hikey=58 sample=Steinway V4 057.wav
<region> //・・・

<group> //V5
lovel=96 hivel=127 xfin_lovel=96 xfin_hivel=127
<region> //〜省略
<region> lokey=56 pitch_keycenter=57 hikey=58 sample=Steinway V5 057.wav
<region> //続く〜

ベロシティクロスフェードは、lovelとhivelで再生範囲を指定した後に、xfin_lovel、xfin_hivel、xfout_lovel、xfout_hivel、をグループ毎に記述するとOKです。
今回の記述の場合は

ベロシティ0~31でV2のサンプル
ベロシティ31~63の間でV2とV3のクロスフェード
ベロシティ64~96の間でV3とV4のクロスフェード
ベロシティ96~127の間でV4とV5のクロスフェード

と、おおよそ無段階なベロシティレイヤーが成立しています。
繊細なタッチでピアノを表現することを想定して、弱いベロシティの領域を広めに確保してる。

それぞれの数値は演奏スタイルに合わせてカスタマイズです、これで自分にしっくりくるピアノ音源を形作れると思います。手持ちの音源で物足りない方は是非試してみてください。

クロスフェードの被せ加減も、今回の例ではがっつり行ってますが、サンプルの構成とか、自分の感覚で色々試してみると良いです。

補足1:xf_velcurveについて

<global>
xf_velcurve=gain
<global>
xf_velcurve=power
「xf_velcurve」ベロシティクロスフェードのバランスをどうするかのパラメータ。 "gain"か"power"のいずれかなんですが、どっちが良いかは実際に試してみてください。

私の体感だと、最近の音源であればgainで安定。

一昔前の、小さく鳴らすサンプルにもノーマライズが掛かっている音源だとpowerなのかな?って感じでした。 sfzのような昔からある規格だと、サンプルを大きく鳴らすのにvolumeで+6dbまでの制限が掛かっているんですよね。下は-144dbまで落とせる謎。 だから、昔は小さなサンプル音でも最大限の音量で.wavに収録してた。というのが何となく見えてきます。

補足2:ペダル(cc64)でのサンプル切り替えについて

Logicのsteinwayは、ペダルON時のサンプルが別で用意されてます。locc64=0 hicc64=63など使って以下のように書くと、ノートオン時のペダルCC64の位置で再生されるサンプルが切り替わります。
<group> //Pedalなしのサンプル
locc64=0 hicc64=63
<region> //・・・
<region> lokey=59 pitch_keycenter=60 hikey=61 sample=Steinway V2 060.wav
<region> //・・・

<group> //Pedalを踏んだ状態のサンプル
locc64=64 hicc64=127
<region> //〜省略
<region> lokey=59 pitch_keycenter=60 hikey=61 sample=Stw ped v1 060.wav
<region> //続く〜


加えてハーフペダル。ペダルの踏み加減による響き具合を調整する場合、ここでもクロスフェードの考えが役に立ちます。
<global>
ampeg_release=0.4
ampeg_releasecc64=5.5 //疑似ハーフペダル、ペダルを踏むほどリリースを長めに

amp_veltrack=36
xf_velcurve=power


<group> //Pedalなしのサンプル
locc64=0 hicc64=59
<region> //・・・
<region> lokey=59 pitch_keycenter=60 hikey=61 sample=Steinway V2 060.wav
<region> //・・・


//ハーフペダル用リージョン
<group> //Pedalなしのサンプル //ハーフペダル用
locc64=60 hicc64=63
amp_velcurve_127=0.36 //音量半分になるよう0~0.5の間くらいで調整
<region> //・・・
<region> lokey=59 pitch_keycenter=60 hikey=61 sample=Steinway V2 060.wav
<region> //・・・

<group> //Pedalを踏んだ状態のサンプル //ハーフペダル用
locc64=60 hicc64=63
amp_velcurve_127=0.36 //音量半分になるよう0~0.5の間くらいで調整
<region> //〜省略
<region> lokey=59 pitch_keycenter=60 hikey=61 sample=Stw ped v1 060.wav
<region> //続く〜
//ハーフペダル用リージョンここまで


<group> //Pedalを踏んだ状態のサンプル
locc64=64 hicc64=127
<region> //〜省略
<region> lokey=59 pitch_keycenter=60 hikey=61 sample=Stw ped v1 060.wav
<region> //続く〜

locc64=60 hicc64=63
amp_velcurve_127=0.5 //リージョンの音量半分
上記はnonペダルとOnペダルのサンプルを半分ずつ混ぜる考え方でハーフペダルを再現してます。


ampeg_releasecc64=5.5 //数字は秒単位
仕上げはペダルの踏み加減によるリリースタイムの増減。
ペダルをゆっくり上げた時の音のリリースが再現できると思います。

補足3:FilterやEQで高音域の調整

クロスフェードに並行して、ベロシティが上がる毎にEQの高域を増やしたり、ローパスFilterのカットオフ値を上げたりといったのも効果的です。

サンプルコード

<group>
//filter
fil_type=lpf_1p
cutoff=14400
fil_veltrack=2400

//EQ
eq3_freq=6400
eq3_bw=0.71
eq3_vel2gain=4.8

必要に応じて、各グループにFilterもしくはEQの設定をしてあげます。 コードの意味は、ベロシティが低いほど音の高音域を下げる(カットする)。強く弾くほど、高音域を少し強調させるといったニュアンスです。

すると、ベロシティ推移がこのように立体的に鳴ります。

FilterやEQも踏まえた調整後



FilterやEQの調整前(クロスフェードのみ差分)



前回のと聴き比べると、平坦な感じが何となく変わってるのが分かる。


sfz音源

各グループのEQやフィルターの周波数帯をどの辺りにするかは、ReaEQなどのプラグインを挿して波形を確認しながら調整すると吉です。

なお、こういう見えないエフェクトは設定してるとやりすぎることが在る、後日の見直しで控えめにすると調度いいかも。

まとめ

sfz音源、突き詰めるほど柔軟な音のカスタマイズが出来る感じです。叩いたり弾いたりなど単純な奏法であれば、SFZ.Lv1(基本の設定項目)だけでも十分に実用範囲です。