0

vol以下のコードでわかるように、変数を使用して Java でサウンドを再生する関数があります。この変数volは 0 から 1 の間の 10 進数です。私が を演奏するとき0、サウンドは基本的に可能な限り最小の音量になり、1 で演奏するときは可能な限り大きな音量になります。プログラムのサウンドがどのような決定を下しているかを知るにはどうすればよいですか? 与えられた の decibles を知りたいですvol

public static final AudioFormat DEFAULTAUDIOFORMAT = new AudioFormat(44100, 16, 2, true, true);

private void generateTone() {
        int channels = DEFAULTAUDIOFORMAT.getChannels();
        int sampleSizeInBytes = DEFAULTAUDIOFORMAT.getSampleSizeInBits() /8;
        float sampleRate = DEFAULTAUDIOFORMAT.getSampleRate();
        int timedSample = (int) (sampleRate * msecs / 1000f);
        int len = timedSample * channels * sampleSizeInBytes;
        int shapeLen = (int) (.05 * timedSample);
        buf = new byte[len];
        double scale;
        for ( int i = 0, j = 0; i < timedSample; ++i )
        {
            int wave = (int)(vol * 32767.0 * Math.sin(2.0 * Math.PI * hz * i / sampleRate));
            scale = 1.0;
            if (i <= shapeLen) {
                scale = i/(double)shapeLen;
            }
            else if (i >= timedSample - shapeLen) {
                scale = 1.0-((i- timedSample + shapeLen)/(double)(shapeLen-1));
            }
            wave = (int)(scale * wave);
            buf[j++] = (byte)(wave >>> 8);
            buf[j++] = (byte) wave;
            buf[j++] = (byte)(wave >>> 8);
            buf[j++] = (byte) wave;
         }
    }
4

2 に答える 2

1

ステップ 1: SPL メーターを見つけます。何らかの製造または実験室での操作がある場合、安全担当者はそれを持っているか、誰が知っている必要があります. そうでない場合は、仕事の後に駐車場でぶらぶらして、馬鹿げた大音量のステレオを備えた車を持っている人を見つけて尋ねることができます.

ステップ 2: ユーザーにとって意味のある参照を確立します。携帯の着信音?おそらく、デバイスから 1 メートル離れた屋外で測定してください。(おそらく、ジーンズのポケットにも入っているかもしれません... :) .) 自動車用デバイス?デバイスから運転席までの共通の距離で車内を測定します。製造?オペレーターが座っている共通の距離でセメントの床の上を測定します。あなたはアイデアを得る。

ステップ 3: メーターをセットアップし、基準測定値を取得します。それは単なる推測であるため、おそらく最小から最大まで約10回の読み取りを行い、ポイント間の直線を補間するだけです. あなたが数学オタクなら、曲線を当てはめることができます。

ステップ 4: 以前のデータを使用して、Vol レベルに基づいて参照 SPL を検出するルックアップ テーブルをソフトウェアに配置します。

ステップ 5: アバウト ボックスなどのどこかに、測定に使用した参照環境を説明します。

ステップ 6: 音の出力値は参考値であり、出力レベルが労働安全ガイドラインを満たしていることを証明するものではないことを、製品に大きな免責事項として記載します。

Java とはまったく関係ありませんが、

音圧レベルのデシベルは、通常の人が聞くことができる最も静かな音に対する、特定の場所で空気中に発生する圧力の比率です。

電圧や消費電力など、サウンドシステムについて述べることができる絶対的な量ではありません。「これは 90 dB SPL の信号です」と言っても意味がありません。参照用のステートメントは、次のようにする必要があります。

「これは、3mx3m の無音スタジオで、ラウドスピーカーから 2 メートル離れた軸上で測定された 90dB-SPL 信号です。」

制御された環境でシステム全体を測定する必要があり、その後、ソース コードの制御信号がシステムの出力での圧力にどのように関連するかを予測するための経験的モデルを開発できます。

于 2012-11-15T21:00:05.633 に答える
0

デシベルは次のように定義されます10 * Math.log10(v1/v2)。 ここv1で、 は現在の音量の値で、v2は基準となる最低音量です。

于 2012-11-15T19:44:37.580 に答える