したらばTOP ■掲示板に戻る■ 全部 1-100 最新50 | |

C++でVST作りの指摘・質問

1管理人:2010/12/10(金) 18:06:52
「C++でVST作り」内の誤記やサンプルコードのバグ、指摘・質問等がございましたらこちらへお願いいたします。

C++でVST作り→http://www39.atwiki.jp/vst_prog/

222minty:2024/03/08(金) 12:38:09
うつぼかずら様

返信ありがとうございます。生成された波形を詳しく見たところ、どうやら音量(=振幅)変化で波形が不連続になることによってクリッピングノイズが発生しているようでした。こういった場合、フェードイン/フェードアウト処理を行って解決するのがやはり一般的でしょうか。
また、今回の件に関係あるか分かりませんが、DAW(ableton live 11)でparam1のオートメーションを書いた際、何故かオートメーション記述よりも3-8ms程度先に処理が行われてしまうようです。例えば、1:00:000の時点でparam1 = 0となるようなオートメーションを書くと、0:59:995時点でparam1=0となる、といった具合です。他のボリュームコントロールプラグインにて同様の処理を行うと正しい時刻で処理が行われる為、DAWの設定の問題ではなさそうです。
DAW側の設定も含めかなりいろいろ調べましたが正直なぜこのような事になっているのかさっぱり分からなかったので、もし何か知見がございましたらご教授いただければと思います。

223管理人★:2024/03/08(金) 19:27:36
mintyさん

急激な音量変化であれば確かにノイズが発生する可能性はありますね。
フェードイン/フェードアウトのような処理にすれば解決すると思います。

タイミングのずれはVST3プラグインのパラメーター実装方法1(https://www.utsbox.com/?p=737)に記載がある下記の通りです。
サンプルプログラムのタイミングについては、厳密なものとなっておりません。

厳密なタイミングにするには、getPoint()関数の引数sampleOffsetを参照する必要があるかと思います。

>パラメーターの操作(変更)は処理するサンプル(numSamples)内で複数回 操作されていることがあるため
>キュー(queue)という形式をとっています。
>例えば、「タグ(ID) 100のパラメーター」が処理するサンプル(numSamples)内で「10サンプル目に値が0.1」
>「20サンプル目に1.0」「30サンプル目に0.5」と操作された場合、下記のような形でIParamValueQueueクラスに変更情報が格納されます。


>前述の通り、パラメーターの操作(変更)は処理するサンプル内で複数回 操作されていることがあるのですが、
>今回のサンプルプログラムでは、最後に変更された値のみを反映しています。
>これは、一般的に処理するサンプルの長さが2〜5ミリ秒程度(※)のため、キュー(queue)の内容に合わせて1つ1つを処理(反映)しても、
>最後に変更された値のみを処理(反映)しても、聴覚的な差がほとんどないためです。
>(※一般的にnumSamplesは100〜200程度の値になる。サンプリングレートを44100Hzで換算すると2〜5ミリ秒程度)

224名無しさん:2024/03/15(金) 11:15:32
こんにちは、初めまして
コンプレッサーの記事のほうにコメントをいれてみたのですが、うまく書き込めないようで、こちらにも書いてみます。
重複していましたら、申し訳ありません。

ゲインの計算ですが、間違っていないでしょうか。

gainL = threshold + (tmpL - threshold) / ratio;
ここは、
gainL = (threshold + (tmpL - threshold) / ratio)/ tmpL;
ではないかと思いますが、私の理解が間違っていますでしょうか?

225管理人★:2024/03/15(金) 12:20:21
ご指摘ありがとうございます。
確かに計算式がおかしいですね。
この計算式だとthresholdを超えると一気に音量が下がって、そのあとまた上がってしまいますね…。

ご指摘の通り、いただいた計算式
 gainL = (threshold + (tmpL - threshold) / ratio)/ tmpL;
もしくは、
 gainL = 1.0f - (tmpL - threshold) / ratio;
のような計算式にすべきですね。

(どのような計算式が良いのかはわかりませんのでご了承ください。)

226たこきむち:2024/10/11(金) 13:37:03
はじめまして。
素人質問で申し訳ありませんが、お教えください。
簡単なデジタルフィルタの実装 のページ
バンドパスフィルタのオクターブに関する説明で、
「カットオフ周波数が440Hzで帯域幅が1オクターブなら、220Hz〜880Hzで、」
とありますが、私の方でalpha=の式のbwに値を入れて計算しますと、bw=2と設定することで、
-3dB点が上記周波数となる気が致します。
bwに代入する値としては、±1オクターブ = 2bw というイメージで考えれば
よろしかったでしょうか。

227管理人★:2024/10/13(日) 00:54:11
たこきむちさん

ご指摘ありがとうございます。
確認が取れていないですが、こちらの記載が間違えているかもしれません。


新着レスの表示


名前: E-mail(省略可)

※書き込む際の注意事項はこちら

※画像アップローダーはこちら

(画像を表示できるのは「画像リンクのサムネイル表示」がオンの掲示板に限ります)

掲示板管理者へ連絡 無料レンタル掲示板