Riproduci suono altoparlante sinistra o destra usando AudioTrack Android

voti
0

Sto giocando il suono con l'aiuto di AudioTrack nella mia app, ma voglio giocare audio altoparlante specifico / orecchio significa diffusore sinistro o diffusore destro o entrambi altoparlante.

A seguito di codice che sto usando per riprodurre l'audio.

private AudioTrack generateTone(double freqHz, int durationMs)
{
    int count = (int)(44100.0 * 2.0 * (durationMs / 1000.0)) & ~1;
    short[] samples = new short[count];
    for(int i = 0; i < count; i += 2){
        short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
        samples[i + 0] = sample;
        samples[i + 1] = sample;
    }
    AudioTrack track = new AudioTrack(AudioManager.STREAM_MUSIC, 44100,
        AudioFormat.CHANNEL_OUT_STEREO, AudioFormat.ENCODING_PCM_16BIT,
        count * (Short.SIZE / 8), AudioTrack.MODE_STATIC);

    track.write(samples, 0, count);
    return track;
}

Con codice seguente che io chiamo questa funzione per riprodurre il suono.

AudioTrack soundAtSpecificFrequency =   generateTone(500, 6000);
soundAtSpecificFrequency.play();

In seguito il codice per interrompere la riproduzione del suono.

soundAtSpecificFrequency.pause();

Potete per favore dirmi cosa può fare il possibile soluzione in questo caso o qualsiasi altra soluzione alternativa?

Grazie per il tuo tempo prezioso.

È pubblicato 21/11/2014 alle 05:57
dall'utente
In altre lingue...                            


1 risposte

voti
1

AudioTrackusa campioni PCM prime per riprodurre i suoni. I campioni PCM vengono riprodotti nel seguente ordine (il primo campione è svolto dal diffusore sinistro e il secondo campione è svolto dal diffusore destro):

LRLRLRLRLR

Quindi, è necessario modificare l'array campioni che si passa a AudioTrack.

Ciò potrebbe aiutare anche.

Nel tuo caso basta fare quanto segue:

// only play sound on left
for(int i = 0; i < count; i += 2){
    short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
    samples[i + 0] = sample;
    samples[i + 1] = 0;
}
// only play sound on right
for(int i = 0; i < count; i += 2){
    short sample = (short)(Math.sin(2 * Math.PI * i / (44100.0 / freqHz)) * 0x7FFF);
    samples[i + 0] = 0;
    samples[i + 1] = sample;
}
Risposto il 21/11/2014 a 06:12
fonte dall'utente

Cookies help us deliver our services. By using our services, you agree to our use of cookies. Learn more