1

C ++アプリケーションにPCMオーディオ(G.711)のチャンクがいくつかあります。これらのチャンクのそれぞれで異なる音量を視覚化したいと思います。

私の最初の試みは、各チャンクのサンプル値の平均を計算し、それをボリュームインジケーターとして使用することでしたが、これはうまく機能しません。無音のチャンクでは0を取得し、音声のあるチャンクでは値が異なりますが、値はわずかに異なるだけで、実際の音量とは似ていないようです。

体積を計算するためのより良いアルゴリズムは何でしょうか?

G.711オーディオは対数PCMだと聞きました。それをどのように考慮に入れるべきですか?

4

2 に答える 2

3

注:私はG.711 PCMオーディオを自分で使用したことはありませんが、値を処理する前に、エンコードされた振幅から実際の振幅への正しい変換を実行していると思います。

音の波形がゼロのいずれかの側で振動するため、ほとんどのサンプルの平均値はほぼゼロになると予想されます。

大まかな量の計算はrms(二乗平均平方根)になります。つまり、サンプルの二乗の移動平均を取り、その平均の平方根を取ります。これにより、音があるときにポジティブな量が得られます。量は、波形で表される電力に関連しています。

人間の音量の知覚に関連するものについては、リプレイゲインで使用されるテクニックの種類を調査することをお勧めします。

于 2010-03-26T22:59:52.587 に答える
2

野心的な場合は、ITU WebサイトからG.711をダウンロードして、数週間(またはそれ以上)の実装に費やすことができます。

それよりも怠惰な(または賢明な)場合は、代わりにG.191をダウンロードできます。これには、G.711でエンコードされたデータを圧縮および解凍するためのソースコードが含まれています。

デコードすると、ボリュームの視覚化がはるかに簡単になります。

于 2010-03-26T23:01:42.573 に答える