Speel geluid in linker- of rechter luidspreker met behulp van android AudioTrack

stemmen
0

Ik ben het afspelen van geluid met de hulp van AudioTrack in mijn APP maar ik wil geluid af te spelen op specifieke luidspreker / oor betekent linker luidspreker of rechter luidspreker of beide luidsprekers.

Volgende code ik gebruik om geluid af te spelen.

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;
}

Met de volgende code Ik roep deze functie om geluid af te spelen.

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

Volgende code om te stoppen met het afspelen van geluid.

soundAtSpecificFrequency.pause();

Kunt u mij vertellen wat kan de mogelijke oplossing in dit geval of een andere alternatieve oplossing?

Bedankt voor uw kostbare tijd.

De vraag is gesteld op 21/11/2014 om 05:57
user
In andere talen...                            


1 antwoorden

stemmen
1

AudioTrackmaakt gebruik van ruwe PCM samples om geluiden te spelen. De PCM-monsters worden weergegeven in de volgende volgorde (het eerste monster wordt gespeeld door de linker luidspreker en het tweede monster wordt gespeeld door de rechter luidspreker):

LRLRLRLRLR

Dus moet je je samples array die u doorgeven aan te passen AudioTrack.

Dit kan ook helpen.

In uw geval gewoon doen het volgende:

// 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;
}
antwoordde op 21/11/2014 om 06:12
bron van user

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