SerumのWavetable作成手法(補遺)

既に元記事に追記してあるのですが、人知れずの追記だったんで、改めてここでSerumにおけるWavetable作成をもう少しうまくやる方法について触れておきます。

音程1周期のサンプル数って、

(サンプリング周波数)/440×2(音程差)/12

ってとこだと思うんで、キリのいい数字は出てこない(試算したもの→ 1周期のサンプル数試算 – Google スプレッドシート)。
その辺踏まえてSerum側でも1セント単位でピッチの補正を加えてくれるのですが、それでも取り込む波形の1周期がIndexに完全に一致することはほぼありません。
結果、取り込んだあとIndexを動かすとこういう風にゼロクロスの位置がズレていくように見えるんですよね。

indexを動かしていく様子(animation gif)
indexを動かしていく様子(animation gif)

これは仕組み上しかたなくて、「なんとなくWavetable作ってみた!」ってんならこれでいい。
問題があるとすればIndexの継ぎ目にグリッチが発生して、ノイジーに聞こえるってこと。
どうしてもそれを回避したいなら、放り込む元波形データの1周期ずつをキレイに切って書き出して、それらをまとめてIndexの欄にドラッグしてやるしかありません。
上の例のようなわかりやすい波形なら頑張れば人力でも切り出せるのだけど、倍音が多くて複雑な波形だと、作業してるうちにどこが1周期のはじめだかわからなくなります。
1周期の切り出しポイントが間違っていたとき何が起きるかというと、鳴らしてみたときにIndexの境目で音量が萎んだりIndex切替時に不規則な揺れが発生します。つまりかっこ悪い。

作業上の理想は、それ向けに自動で波形を切り出してくれるソフトを使うことなのだけども、まあ見かけた記憶ありません。
じゃあ、しょうがない。ちょっとだけ工夫して人力でもラクに切り出してやりましょう。

Indexへのドラッグをシビアにやるなら

1周期ごとに切り取る

オーディオデータをLogic上でスライスしちゃうことが可能です。
まずはメインウィンドウのスナップメニューでスナップ単位を「サンプル」にし(スクリーンショットでは指定し忘れました)、ゼロクロッシングでのスナップもOnにしておきます。

スナップでのゼロクロス指定
スナップでのゼロクロス指定

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

左端のパンの耳を切り落としておく
左端のパンの耳を切り落としておく

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

Optionを押しながらハサミで切る (animation gif)
Optionを押しながらハサミで切る (animation gif)

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

きれいに切り出したオーディオファイル群を読み込んだ場合 (animation gif)
きれいに切り出したオーディオファイル群を読み込んだ場合 (animation gif)

すり替えによるスライス

高周波な倍音が強くてスライス箇所を定めづらい場合は、基音と同じサイン波なり三角波なりのオーディオデータを作成して一旦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化されにくいようです。