Serum 謹製の WaveTable って大量にインストールされているけど、音色のリストって潤沢になればなるほど探したり辿ったりするのが面倒くさくなったり聞かないとわからなかったりで、時間かかって萎えちゃいますね。
UVI Falconのようなグラフィック表示希望。
![UVI Falcon Wavetable [WaveList]](https://www.makou.com/wp-content/uploads/2015/11/15110410.png)
■目次
FormulaによるWavatable生成
さて、その Serumの謹製 WaveTableはMacだと下記のディレクトリに保管されていて、マニュアルもその一つ上の階層にあります。
/Library/Audio/Presets/Xfer Records/Serum Presets/Tables
また Systemのフォルダには WaveTable生成用の formula(式)がまとまっていて、たとえば…
[sin(x*pi)+(0.16*(sin(2*x*pi)+sin(3*x*pi)+sin(4*x*pi)))][Organ-ish]
[0.95-sqrt(acos(pi*x*(y-1)))][acCOSting]
という感じ。
マニュアルに載っている関数、定数、変数や論理演算子も転載しておきます。
Name | Arguments | Explanation |
---|---|---|
sin | 1 | sine function |
cos | 1 | cosine function |
tan | 1 | tangens function |
asin | 1 | arcus sine function |
acos | 1 | arcus cosine function |
atan | 1 | arcus tangens function |
sinh | 1 | hyperbolic sine function |
cosh | 1 | hyperbolic cosine |
tanh | 1 | hyperbolic tangens function |
asinh | 1 | hyperbolic arcus sine function |
acosh | 1 | hyperbolic arcus tangens function |
atanh | 1 | hyperbolic arcur tangens function |
log2 | 1 | logarithm to the base 2 |
log10 | 1 | logarithm to the base 10 |
log | 1 | logarithm to the base 10 |
ln | 1 | logarithm to base e (2.71828…) |
exp | 1 | e raised to the power of x |
sqrt | 1 | square root of a value |
sign | 1 | sign function -1 if x<0; 1 if x>0 |
rint | 1 | round to nearest integer |
abs | 1 | absolute value |
min | var. | min of all arguments |
max | var. | max of all arguments |
sum | var. | sum of all arguments |
avg | var. | mean value of all arguments |
Operator | Meaning | Priority |
---|---|---|
&& | logical and | 1 |
|| | logical or | 2 |
<= | less or equal | 4 |
>= | greater or equal | 4 |
!= | not equal | 4 |
== | equal | 4 |
> | greater than | 4 |
< | less than | 4 |
+ | addition | 5 |
– | subtraction | 5 |
* | multiplication | 6 |
/ | division | 6 |
^ | raise x to the power of y | 7 |
Name | Explanation |
---|---|
pi | pi (3.141592658979323846264338) |
e | e (2.718281828182818281828) |
w | current time-value getting plotted, from 0.0 to 1.0 same as (x+1)/2 |
x | current time-value getting plotted, from -1.0 to 1.0 |
y | current table number, from 0.0 to 1.0 *See Below |
z | current table number, from -1.0 to 1.0 *See Below equivalent: (y*2)-1 |
q | When a ‘q’ is preset in the formula, the function plots to the FFT bins instead of plotting the to the waveform display. q iterates from 1 to 512 for the respective harmonics/bins. ** |
in | the current (“old”) visible waveform value of the plotting table (changes to each old table, if using ‘y’ or ‘z’ which plots all tables) |
sel | Similar to “in”, but only the currently selected wavetable (does not change to each table, uses the selected table when processing the formula begins). |
rand | a random number from -1.0 to 1.0, stays the same for all tables (precalculated for every time position). |
取り込みによるWavetable作成
波形インポートによるWavetable作成について。
波形表示ウィンドウへのドラッグ
メイン画面またはWavetable編集画面の波形表示ウィンドウにオーディオファイルをドラッグしてくるとオリジナルのWavetableが生成されます。
フロッピーボタンをクリックして保存。index数次第でファイルサイズの多寡が定まります。
fixed frame sizeでのimportが推奨されていますね。
formula入力画面にオーディオファイルのルートノート(C1とかA0とか)を入力しておくのも大事。
ルートノートってのは元となるオーディオサンプルの音程のことで、サンプラーでよく使われる用語です。
ルートノートを指定しておくと、その音程に対応する1周期分のサンプル数(≒時間)をもとにオーディオサンプルを分析してくれます。
このサンプル数はSerum自身が44.1kHzを前提として計算しているので、ぶっ込むオーディオファイルも44.1kHzで用意するのが妥当です。
Indexへのドラッグをシビアにやるなら
WaveTable編集画面下部のIndex欄にオーディオファイル群をドラッグしてくると、順にIndexに登録してくれます。
元のオーディオファイルを1周期分で切り出しておくと非常に良好な状態でIndex化されます(次の項で例を示します)。
ちなみにUVI FalconのWaveTableはFalcon Factory.ufsの中に格納されてる気配で、簡単にはエディットできなそう。
Wavetableを自作できるのは、あとはLogicのRetroSynthくらいかな…。
1周期ごとに切り取る
オーディオデータをLogic上でスライスしちゃうことが可能です。
まずはメインウィンドウのスナップメニューでスナップ単位を「サンプル」にし(スクリーンショットでは指定し忘れました)、ゼロクロッシングでのスナップもOnにしておきます。

邪魔になりそうな、左端(パンの耳とでも言っておきましょう)を切り落としておきます。画面の横ズームはなるべく大きく表示させたほうがやりやすいでしょう。

1周期になるような場所を厳密に選んで、optionを押しながらハサミで切り、リージョン群を大量に生成します。
これによって、ほぼ同じ長さのオーディオリージョンがゼロクロス位置で裁断されるように切られます。
ちょっとでも場所がズレていると、どこかのリージョンから裁断位置がおかしくなってしまうので、ここで切ろうと思った箇所でズームを最大まで拡大して切るべし。

あとは、Logicのブラウザでオーディオリージョンのリストを表示させて、shift+Uでよけいなリージョンを消し、使うリージョン群を別名で保存(書き出す)します。
最後にこのオーディオファイル群をSerumのWavetable編集画面のindexリスト部分にまとめてドラッグしてくると、こんな感じにきれいに波形が0から始まる形でWavetableを構築することができます。
先ほど上に載せた「ゼロクロスがズレていっちゃう」データと元は同じ波形データなんですけど、比べてどうです? こっちのほうがちゃんとしていそうでしょ。
すり替えによるスライス


高周波な倍音が強くてスライス箇所を定めづらい場合は、基音と同じサイン波なり三角波なりのオーディオデータを作成して一旦1サイクルごとスライスしたのち(Logicのプロジェクトを閉じて)、スライスすべきオーディオデータとファイル名を入れ替えてやることで正確な1サイクルのスライスを得ることができます。
めったにないことですが、取り込む対象の音色を発する音源…これはソフトシンセでもハードシンセでも声でもいいのですが、そのピッチがサイン波側のピッチと完全に一致しないと結局スライス位置がズレます。
Tone2 Icarusはわずか1セントですが他のシンセよりピッチが高いので、この手法で完璧にスライスするには、あらかじめピッチを1セント下げておく必要があります。
正確にIndexするために元音は低い音程で鳴らす
蛇足ながら、豊かな倍音をなるべく正確にオーディオデータとして記録するためには、元の音色をなるべく低い音程で鳴らすべきです。
また低い音程で書き出したほうが圧倒的にオーディオをスライスしやすく、一石二鳥。
IcarusのWavetableをSerumに移植するには
Icarusから書き出したWavetable(serumもそうだがWAVデータになる)をSerumにドラッグしてくる際に、formula欄に2048を指定しておくとよいかと思います。
なお、LogicのRetro SynthのTableはSerumやIcarusと仕組みが違って倍音の分布を検出してからIndexを得る仕組みになっているっぽく、早い話、基音を検出しにくい音色はWavetable化されにくいようです。
冒険
和音のWaveTable登録
実験的に和音で鳴らしたサウンドをWaveTableにimportしてみると、再生音を2オクターブ〜4オクターブ下げることで雰囲気が出ました。
AbsynthのWaveTableの在り方に近いかもしれません。
ただこれ、ループでグリッチ乗りやすいのと、最小公倍数がどうしても大きくなってしまってサンプリングレートが低くなりがちなのが残念なところです。
ノイズのWaveTable登録
ノイズとはランダムな発音を指すのでWaveTableには不向き…と思い込んでいたら、PlogueのTableWarp2というプラグインでそれがなされていました。
それを参考にLFOやEGでIndexが切り替わるようにしてノイズを登録したら、難しいけどそれなりな感じでノイズを発音させることもできました。
SerumのNoiseオシレーターに登録できるともっといいんですけどねえ。
音程1周期のサンプル数って、
(サンプリング周波数)/440×2(音程差)/12
ってとこだと思うんで、キリのいい数字は出てこない。
その辺踏まえてSerum側でも1セント単位でピッチの補正を加えてくれるのですが、それでも取り込む波形の1周期がIndexに完全に一致することはほぼありません。
結果、取り込んだあとIndexを動かすとこういう風にゼロクロスの位置がズレていくように見えるんですよね。
これは仕組み上しかたなくて、「なんとなくWavetable作ってみた!」ってんならこれでいい。
問題があるとすればIndexの継ぎ目にグリッチが発生して、ノイジーに聞こえるってこと。
どうしてもそれを回避したいなら、放り込む元波形データの1周期ずつをキレイに切って書き出して、それらをまとめてIndexの欄にドラッグしてやるしかありません。
上の例のようなわかりやすい波形なら頑張れば人力でも切り出せるのだけど、倍音が多くて複雑な波形だと、作業してるうちにどこが1周期のはじめだかわからなくなります。
1周期の切り出しポイントが間違っていたとき何が起きるかというと、鳴らしてみたときにIndexの境目で音量が萎んだりIndex切替時に不規則な揺れが発生します。つまりかっこ悪い。
作業上の理想は、それ向けに自動で波形を切り出してくれるソフトを使うことなのだけども、まあ見かけた記憶ありません。
じゃあ、しょうがない。ちょっとだけ工夫して人力でもラクに切り出してやりましょう。
ザクザク作ってみたものをGumroadで販売しています。