package com.brackeen.javagamebook.sound;

/**
    Klasa FilterSequence dzidziczy po SoundFilter i pozwala na
    łączenie ze sobą kilku obiektów SoundFilters.
    <p>Klasa nie została zamieszczona w ksiażce.
    @see FilteredSoundStream
*/
public class FilterSequence extends SoundFilter {

    private SoundFilter[] filters;

    /**
        Tworzy nowy obiekt FilterSequence z podaną tablicą
        obiektów SoundFilter. Próbka jest przesyłana kolejno
        przez wszystkie obiekty SoundFilter w kolejności zapisu 
        w tablicy.
    */
    public FilterSequence(SoundFilter[] filters) {
        this.filters = filters;
    }


    /**
        Zwraca maksymalny rozmiar pozostałycch danych we wszystkich obiektach SoundFilter
        w bieżacym obiekcie FilterSequence.
    */
    public int getRemainingSize() {
        int max = 0;
        for (int i=0; i<filters.length; i++) {
            max = Math.max(max, filters[i].getRemainingSize());
        }
        return max;
    }

    /**
        Resetuje wszystkie obiekty SoundFilter w bieżącym FilterSequence.
    */
    public void reset() {
        for (int i=0; i<filters.length; i++) {
            filters[i].reset();
        }
    }


    /**
        Filtruje dźwięk przez kolejne obiekty SoundFilter z bieżącego
        FilterSequence.
    */
    public void filter(byte[] samples, int offset, int length) {
        for (int i=0; i<filters.length; i++) {
            filters[i].filter(samples, offset, length);
        }
    }
}
