2

私は現在、44100Hz のサンプル レートで 16 ビットのウェーブ ファイルをロードしている小さなプロジェクトに取り組んでいます。通常の再生では、オーディオは問題ないように見えますが、音量を変更するために振幅サイズなどを操作し始めるとすぐに、静的ノイズが少し発生し始めます。

私がやっていることは、この 16 ビット タイプ a short の場合にバッファからサンプルを取得し、これを -1 から 1 の範囲の float に変換して、ミキシングやその他の効果を開始することです。これで音量も変更します.1を掛けるだけで同じ出力が得られますが、音量を変更し始めるとすぐに静的ノイズが聞こえます. 1.0 を超えるときと 1.0 を下回るときに発生します。そして、スケールが大きくなったり小さくなったりすると悪化します。

ノイズを低減または除去する方法を知っている人はいますか?

4

2 に答える 2

4

「静的」、別名「クリックとポップ」は、出力信号の不連続性の結果です。不連続性の完全な例を次に示します。

http://en.wikipedia.org/wiki/File:Discontinuity_jump.eps.png

オーディオのバッファをシステムに送信して再生し、次のバッファですべてのサンプルを 1.1 倍すると、不連続性が生じる可能性があります。たとえば、値が [-0.5, 0.5] の正弦波を含むバッファーを考えてみます。この波の一部を出力デバイスに送信すると、最後のサンプルはたまたま 0.5 になります。

次のバッファーでは、1.1 を掛けてボリュームを調整しようとします。新しいバッファの最初のサンプルは 0.5 に近くなります (前のサンプルが 0.5 だったため)。これに 1.1 を掛けると 0.55 になります。

あるサンプルから次のサンプルへの 0.05 の変化は、おそらくクリックまたはポップのように聞こえます。これらを十分に作成すると、静的に聞こえます。

解決策は、ボリュームの変更をバッファー上で「ランプ」することです。たとえば、100 サンプルのバッファーに 1.1 のゲインを適用する場合、前のゲインが 1.0 だった場合、ゲイン 1 から開始して 100 サンプルすべてをループし、最後のサンプルに到達するまでゲインをスムーズに増やします。その時点で、ゲインは 1.1 になります。

このコードの例が必要な場合は、juce::AudioSampleBuffer::applyGainRamp: を参照してください。

http://www.rawmaterialsoftware.com/api/classAudioSampleBuffer.html

于 2012-05-02T02:11:03.107 に答える
1

char* を使用してデータに移動することにより、さまざまなビット データ型を抽象化していましたが、その使用法を正しいデータ型ポインターにキャストしませんでした。これは、データを与えるときにバイトが切り取られたことを意味します。これにより、特にノイズと音量の変更のバグが作成されました。

私の実装の欠陥であり、オーディオデータを扱うときにこれについて考えていませんでした。同じようなことをする人へのヒントとして、データを変更するときはよく見て、抽象化を使用するときはデータの型を確認してください。

私を助けようとしてくれた人たちに感謝します.リンクは本当に興味深く、オーディオプログラミングについてより多くのことを学びました.

于 2012-05-21T20:55:42.247 に答える