0

MP3 プレーヤーにフェードイン効果を実装しようとしています。私は FloatControl volumeControl = (FloatControl) line.getControl(FloatControl.Type.MASTER_GAIN); を使用しています。FloatControl.Type.VOLUME が例外 (Unavaliable Control) をスローするため、理由はわかりません。アルゴリズムがうまく機能しないため、アルゴリズムの助けが必要です。コードは次のとおりです。

public class FloatControlFader
{
    public static void fadeIn(final FloatControl control, final float from,
            final float to, final int seconds)
    {
        final float vps = ((to-from) / (seconds*10));//Volume incrased/100millisecond
        control.setValue(from);
        Thread t = new Thread(new Runnable(){

            public void run() {
                for(int i=0; i < seconds*10; i++)
                {
                    try
                    {
                        Thread.sleep(100);
                    }
                    catch (InterruptedException ex)
                    {

                    }
                    System.out.println(control.getValue()); //for DEBUG
                    control.setValue(control.getValue() + vps);
                }
            }

        });
        t.start();
    }
}

助けていただければ幸いです、ありがとう!

4

1 に答える 1

1

人間の耳は直線的に聞こえないので、一定の X vps ずつ増加しても滑らかなフェードのようには聞こえないことに注意してください。そこにログ機能を配置する必要があります。次に、線形増加を対数値にマッピングする必要があります。もちろん、これはすべて、ボリューム コントロールの単位がデシベル単位ではないことを前提としています。db ずつ増加している場合は問題ありません。

于 2010-09-03T19:12:36.947 に答える