Wiedergabe starten in der linken oder rechten Lautsprecher mit Android-Audiotrack

stimmen
0

Ich spiele Sound mit Hilfe von Audiotrack in meiner APP, aber ich möchte Ton in bestimmten Lautsprecher spielen / Ohr bedeutet linken Lautsprecher oder rechten Lautsprecher oder beide Lautsprecher.

Folgender Code verwende ich Ton zu spielen.

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

Mit folgendem Code Ich rufe diese Funktion Ton zu spielen.

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

Im Anschluss an Code zu stoppen Sound zu spielen.

soundAtSpecificFrequency.pause();

Können Sie mir bitte sagen, die mögliche Lösung in diesem Fall oder jede andere alternative Lösung, was Sie können?

Vielen Dank für Ihre kostbare Zeit.

Veröffentlicht am 21/11/2014 um 05:57
vom benutzer
In anderen Sprachen...                            


1 antworten

stimmen
1

AudioTrackverwendet rohe PCM-Samples Sounds zu spielen. Die PCM-Abtastwerte werden in der folgenden Reihenfolge wiedergegeben (die erste Probe wird von dem linken Lautsprecher und die zweite Probe wiedergegeben wird durch die rechten Lautsprecher wiedergegeben):

LRLRLRLRLR

So haben Sie Ihre Proben Array ändern , die Sie weitergeben AudioTrack.

Dies könnte auch helfen.

In Ihrem Fall tun nur die folgenden:

// 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;
}
Beantwortet am 21/11/2014 um 06:12
quelle vom benutzer

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