Wie bringe ich 2 BarVisualizers zum Laufen?

RezaScript

Bekanntes Mitglied
Hallo, ich verwende audio-visualizer-android und möchte 2 BarVisualizers zum Laufen bringen. So bringe ich 1 BarVisualizer zum Laufen:

Java:
int audioSessionId = mediaPlayer.getAudioSessionId();
if (audioSessionId != -1) {
    _barTop.setAudioSessionId(audioSessionId);
}

Das klappt wunderbar.
Und so versuche ich 2 BarVisualizers zum Laufen zu bringen:

Java:
int audioSessionId = mediaPlayer.getAudioSessionId();
if (audioSessionId != -1) {
    _barTop.setAudioSessionId(audioSessionId);
    _barBottom.setAudioSessionId(audioSessionId);
}

Das klappt so nicht. Die App crasht und ich bekomme den Error:
java.lang.IllegalStateException: setCaptureSize() called in wrong state: 2
Kann mir jemand weiterhelfen?
 

RezaScript

Bekanntes Mitglied
Die Library unterstützt das anscheinend nicht. Mir hat jemand anders mit einem "Hack" geholfen.

Und zwar kopiert er einfach den Visualizer mit folgendem Code:

Java:
public class CopyBarVisualizer extends BarVisualizer {
    private List<UpdateListener> listeners = new ArrayList<>();

    public CopyBarVisualizer(Context context) {
        super(context);
    }

    public CopyBarVisualizer(Context context, @Nullable AttributeSet attrs) {
        super(context, attrs);
    }

    public CopyBarVisualizer(Context context, @Nullable AttributeSet attrs, int defStyleAttr) {
        super(context, attrs, defStyleAttr);
    }

    public void addUpdateListener(UpdateListener listener) {
        listeners.add(listener);
    }

    public void copyFrom(CopyBarVisualizer other) {
        other.addUpdateListener(new UpdateListener() {
            @Override
            public void update(byte[] data) {
                mRawAudioBytes = data;
                CopyBarVisualizer.this.invalidate();
            }
        });
    }

    @Override
    public void invalidate() {
        super.invalidate();
        for (UpdateListener listener : listeners) {
            listener.update(mRawAudioBytes);
        }
    }

    public interface UpdateListener {
        void update(byte[] data);
    }
}

Initialisieren geht dann so:
Java:
copyVisualizer.setAudioSessionId(audioSessionId);
copyVisualizer2.copyFrom(copyVisualizer);

Das funktioniert eigentlich ziemlich gut aber nur mit 2 Visualizers. Wenn ich mehr als 2 haben möchte, also so

Java:
copyVisualizer.setAudioSessionId(audioSessionId);
copyVisualizer2.copyFrom(copyVisualizer);
copyVisualizer3.copyFrom(copyVisualizer);

bekomm ich die Fehlermeldung
Attempt to invoke virtual method 'void com.example.app.classes.CopyBarVisualizer.copyFrom(com.example.app.classes.CopyBarVisualizer)' on a null object reference

Versteht jemand was darunter?
 

Neue Themen


Oben