Diskuze: Android - získání AudioTrack ID z jiné classy do EQ

Aktivity (2)
Avatar
Filip Barák
Člen
Avatar
Filip Barák:18. března 22:48

Zdravím, mám jednoduchý signal generátor AudioTrack, který generuje jednoduchou vlnu (sinus, čtverec...) v samostatné classe. Kód vypadá asi nějak takto

private double tuneFreq; // = 440;

    private int sr = 44100;
    private int buffsize = AudioTrack.getMinBufferSize(sr,
            AudioFormat.CHANNEL_OUT_MONO, AudioFormat.ENCODING_PCM_16BIT);
    private AudioTrack audioTrack = new AudioTrack(AudioManager.STREAM_MUSIC,
            sr, AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT, buffsize,
            AudioTrack.MODE_STREAM);


    @Override
    public void run() {
        super.run();
        isRunning = true;

        short samples[] = new short[buffsize];
        int amp = 32767;
        double twopi = 8. * Math.atan(1.);
        double ph = 0.0;

        audioTrack.play();

        while (isRunning) {

            double fr = tuneFreq;
            for (int i = 0; i < buffsize; i++) {
                samples[i] = (short) (amp * Math.sin(ph));
                if (samples[i] > (short) 0.0) {
                    samples[i] = (short) amp;
                }

                if (samples[i] < (short) 0.0) {
                    samples[i] = (short) -amp;
                }
                ph += twopi * fr / sr;
            }
            audioTrack.write(samples, 0, buffsize);

        }
        audioTrack.stop();
        audioTrack.release();

    }

V hlavní classe, ve které tento kód volám (generátor hraje po zmáčknutí tlačítka) mám zároveň Equalizér, který potřebuje při svém vzniku AudioSessionId, které jednoduše zavolám

audioTrack.getAudioSessionId.

Problém je, že je to ID s každým zapnutím generátoru jiné (s každým zmáčknutím tlačítka) a vygeneruje se až za

audioTrack.play();

ale EQ potřebuju mít zapnutý a nastavený už za onCreate v hlavní classe.
EQ volám

Generator g = new Generator();
mEqualizer = new Equalizer(0, g.getAudioID());
mEqualizer.setEnabled(true);

Zkusil jsem: v classe generátoru mám

public int getAudioID() {

       return audioTrack.getAudioSessionId();

který volám při vzniku EQ.
Bohužel, po zapnutí generátoru se ID změní a EQ tudíž nefunguje.
Zkoušel jsem volat ID a celý Equalizer až poté, co volám spuštění generátoru v hlavní classe (po zmáčknuté tlačítka, v OnTouchListeneru), i tak jsem dostával jiné ID z getAudioID a ze samotného generátoru.

Chci docílit: Jak dostat do Equalizeru vždy aktuální AudioTrack ID ?
Díky za každou radu.

Editováno 18. března 22:49
 
Odpovědět 18. března 22:48
Děláme co je v našich silách, aby byly zdejší diskuze co nejkvalitnější. Proto do nich také mohou přispívat pouze registrovaní členové. Pro zapojení do diskuze se přihlas. Pokud ještě nemáš účet, zaregistruj se, je to zdarma.

Zobrazeno 1 zpráv z 1.