[[sfz規格]]

sfz規格

sfz規格(sfz format)とは、音源を定義する規格の名称。「.sfz」という拡張子を持つ。

音源となるwavファイルやoggファイル群があったとして、それらのファイルをどのようにMIDI信号と関連付けるかをテキストベースで記述する。
例えば「MIDIでラの音が鳴らされたら、このフォルダにあるA.wavを鳴らします」ということを1つ1つ指定する。

テキスト主体のため、サウンドフォントより柔軟性が高い。
ドラムセットのsfzがあったとして、キックの音だけを入れ替えたり、パンを少し左に寄せたり、ということが簡単に行える。

Cakewalk(rgc:audio)から無償で配布されている「sfz」というサンプルプレイヤーVSTiがあるが、それとは別。だがsfz規格を定めているのはCakewalkであるため、全く無関係ではない。このややこしい名称を何とかしてもらいたい

sfz規格で記述されたファイル(sfzファイル)は、sfzプレイヤーで読み込める。
他にも読み込めるサンプルプレイヤーはある。ひとまず以下の2つが挙げられる。

  • Camel Audio - Alchemy Player
    • sfzファイルの他にも独自規格のサンプルを読み込める(というかそちらが主?)
  • Plogue - sforzando
    • 64bit対応。CPUパフォーマンスはsfz playerよりよいらしい。

以降の説明では、単に「sfz」という場合はsfz規格を指す。

記法

公式解説はCakewalk、一部を日本語訳したものがToday's Soundfontにある。感謝。

まだ全ての設定の意味を理解しているわけではないが、最低限使えるようになるポイントだけでもメモっておく。

<region>, <group>

基本的に、1つのキーにアサインする設定は<region>から始める。
<region>から次の<region>、または<region>からファイルの終焉までの間に、アサインするキーやベロシティ、使う音源ファイルなどの指定をする。
XMLのように閉じタグ</region>といったものはいらない。
<group>を使えば、次の<group>までの間に出てくる全ての<region>に対し、設定をまとめて記述することが可能。<group>の入れ子はできない。

<region>間に記述する設定は設定項目名=設定値という形式で、複数並べる場合はスペースを挟む。「=」の両端にスペースを入れてはいけない。

<group> loop_mode=no_loop lokey=36 hikey=43 pitch_keycenter=42 pan=0
<region> lovel=000 hivel=042 sample=piano_F#_weak.wav
<region> lovel=043 hivel=084 sample=piano_F#_medium.wav
<region> lovel=085 hivel=127 sample=piano_F#_strong.wav

設定は大別して音源定義(sample)、入力制御(Input Controlls)、再生パラメータ(performance parameters)の3つに分けられる。それぞれ「何を」「どのような条件で」「どういう風に」鳴らすかを指定する。各設定は上のサイトに詳しく載っているが、よく使うものだけでも。

音源定義

sample

「sample=sfzから音源ファイルまでの相対パス」と記述すると、MIDIのノート発音に合わせてその音源が鳴るようになる。

相対パスなので、sfzファイルと同じフォルダに音源があれば「sample=ongen.wav」
sfzと同じ階層にsampleフォルダがあり、その中に音源があれば「sample=sample\ongen.wav」
sfzの1つ上の階層のsampleフォルダの中に音源があれば「sample=..\sample\ongen.wav」となる。

音源定義しただけだと、全てのキーにこの音源がアサインされてしまう。
どのキーが鳴らされた時に、あるいはどの程度のベロシティの時に、この音源を使うか、それをインプットコントロールで指定する。

入力制御

lokey, hikey, key, pitch_keycenter

MIDIのノート番号がlokey以上hikey以下の時に音源を鳴らす。
MIDIノート名(C-1~G9)または数値(0~127)で指定する。
数値は、Cは12の倍数と覚えておくとやりやすい。

pitch_keycenterで、サンプルルート(音源の音高)を設定する。
pitch_keycenter=C4を設定しD4を鳴らそうとすると、(他の設定にも依るが)音源から1音高く加工された音が鳴る。

keyは1つのキーにのみ音源をアサインするための設定で、lokey、hikey、pitch_keycenterをまとめて同じ値にする。

lovel, hivel

ノートのベロシティがlovel以上hivel以下の時に音源を鳴らす。
強弱で複数に分かれている音源はこれで使い分けることができる。

amp_velcurve_Nの項目も参考。

loccNN, hiccNN

「NN」には0~127の数値が入る。
MIDIコントロールチェンジのNN番がloccNNhiccNNにある状態の時に音源を鳴らす。

たとえばサステインペダル(CC64)を押していない時(0-63)と押している時(64-127)で音源を変える場合は以下のように書く。

<region> locc64=000 hicc64=063 sample=no_sustain.wav
<region> locc64=064 hicc64=127 sample=sustain.wav

group, off_by

ハイハットなど、「別のノートが鳴らされると鳴るのをやめる」設定をする。
groupで任意のグループ番号を設定する。番号は0~4294967296の整数。
off_byで指定したグループ番号の音が鳴らされると、鳴るのをやめる。

再生パラメータ

offset

開始位置を指定。単位はサンプル数。
44100Hzの音源でoffset=44100とすると、音源の冒頭から1秒進んだところから鳴り始める…ってことかな?(未確認)

頭に空白のある音源を、元ファイルに手を加えることなく使用できる。

loop_mode

ループをどうするかの設定。

  • no_loop:ループ無し。ノートオフまで再生。
  • one_shot:ループ無し。ノートオフに関係なく、最初から最後まで再生。
  • loop_continuous:サンプルのループポイント1)でループ。ノートオフまで再生。
  • loop_sustain:サステインペダルを踏んでる時用の設定。

loop_sustainはよくわからん。

volume

ボリューム。-144~6(dB)の範囲で音量を調節。

pan, width, position

panは左右の位相を調整。-100~100(%)で大きくなるほど右に寄る。

widthは-100~100(%)で左右の広がりを調整。0でモノラル、負で左右入れ替え。
仕組みとしては、左右お互いに逆側の音をどの程度ミックスするか。

positionはステレオ音源のみ有効。widthの後に処理される。
-100~100(%)で位相を調整する。大きくなるほど右に寄る。

panとpositionの違いは、ステレオ音源に対し「pan=100」にすると、右側の音だけが鳴り左側が鳴らなくなるが、「width=0 position=100」とすると左右ミックスした音が右から鳴る、というところ(だと思う)

amp_veltrack, amp_velcurve_N

通常、MIDIノートのベロシティ値に対して音量は、Amplitude(dB) = 20*log(127^2 / Velocity^2)で変化するらしい。
これをいじるのがこの2つ。

amp_veltrackは-100~100(%)の数値で、上の式に倍率補正を行う。
amp_veltrack=50にすると、最大音量は100%の半分になる(?)。負なら、ベロシティが増えるにつれて弱くなる。

amp_velcurve_Nは0~1の数値で、音量カーブの上書きを行う。
「N」には1~127のベロシティ値が入り、そのベロシティでの音量倍率を指定する。
デフォルトはベロシティ0で0(最小音量)、127で1(最大音量)となっているが、
たとえば「amp_velcurve_10=0.8」とすると、ベロシティ0から10にかけて80%まで上がり、その後127で最大音量となる。
指定されていないベロシティでの数値は、線形補間される。

amp_velcurve_Nは音量によって複数に分かれた音源を使う際には指定した方がよい(?)
下はベロシティ0~42でweak.wavを、43~84でmedium.wavを、85以上でstrong.wavを再生する設定だが、amp_velcurve_Nが無いと、weak.wavは割り当てられた最大のベロシティである42でも、1/3ほどの音量でしか再生されないことになる。小さい音源がさらに小さく聞こえなくなってしまう…のかな?(未確認)
amp_velcurve_42=1とすることで、ベロシティ42で最大音量で再生されるようになる。
音源の境目で音量が変わりすぎるならlovelでのamp_velcurveも調整してやればよい。

<group> loop_mode=no_loop key=48
<region> lovel=000 hivel=042 amp_velcurve_42=1 sample=weak.wav
<region> lovel=043 hivel=084 amp_velcurve_84=1 sample=medium.wav
<region> lovel=085 hivel=127 sample=strong.wav

output

0~1024の範囲で出力チャンネルを指定できる。

ドラムセットのsfzを作り、キックは1へ、スネアは2へ、とパラアウトさせることが可能。ただし残念ながらrgc:audioのsfzプレイヤーは2out限定で、それ以上の出力が設定できない。sfz+プレイヤーはマルチアウトに対応しているが、sfzファイルの読み込みができない。こればかりは他のsfzファイルを読み込めるプレイヤーを使うしかない。

ampeg_xxx系

初期設定では、ノート発音からノートオフまで100%の音量でサンプルを再生し、ノートオフになったら即座に停止するようになっている。

しかしピアノやギターなどはある程度余韻を残した方がそれっぽくなる。また、音の立ち上がりが耳に障る時はアタックを弱めるなど、使う場面によって音量変化を微調整したい場合にこれらの数値をいじるとよい。

設定名効果範囲初期値
ampeg_delayアタックが始まるまでの時間0-100秒0
ampeg_start最初の音量割合0-100%0
ampeg_attackアタック0-100秒0
ampeg_holdアタック後、ディケイが始まるまで最大音量を保持する時間0-100秒0
ampeg_decayディケイ0-100秒0
ampeg_sustainサステイン0-100%100
ampeg_releaseリリース0-100秒0
値は全て小数値(floating point)

以下は細かい設定

サクラエディタ用kwd

サクラエディタで色分け表記するためのkwdファイル。
https://skydrive.live.com/redir?resid=9EC429109E7635A1!122

変換ツール

Extreme Sample Comverterが使える。

サウンドフォント(.sf2)やKONTAKT音源(.nki, .nkm)などなど、様々な音源ファイル形式を相互に変換できる。たまに変換に失敗したり、元音源を上手く読み込めなかったりするのはご愛敬。

Source Formatから変換元のファイル形式を選び、Destination Formatから変換したいファイル形式を選び、Convertするだけ。

デモ版の制限は『A short noise burst every few seconds added』となっているが、sfzはそもそも音源と別なので、あまり関係ない。

1)
デフォルトでは最初から最後まで。loop_startとloop_endで指定。
dtm/sfz.txt · 最終更新: 2016/08/01 by ikatakos
CC Attribution 4.0 International
Driven by DokuWiki Recent changes RSS feed Valid CSS Valid XHTML 1.0