звук Java, эффект исчезновения, используя FloatControl - PullRequest
0 голосов
/ 03 сентября 2010

Я пытаюсь реализовать эффект затухания в моем 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();
    }
}

Буду признателен за любую помощь, спасибо!

1 Ответ

1 голос
/ 03 сентября 2010

Помните, что человеческое ухо не слышит линейно, так что увеличение при стабильном X vps не будет звучать как плавное затухание. Вы должны поместить туда функцию журнала. Затем вам нужно отобразить линейные увеличения в лог-значения. Это, конечно, все, если предположить, что блоки управления громкостью не в децибелах. Если вы увеличиваете на дБ, то все в порядке.

...