android AudioTrack kullanarak sol veya sağ hoparlör ses çal

oy
0

Benim APP AudioTrack yardımıyla ses oynuyorum ama belirli hoparlör sesi oynamak istiyorum / kulak sol hoparlör veya sağ hoparlör ya da her ikisi hoparlör anlamına gelir.

kod takiben i ses çıkarması kullanıyorum.

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

kod aşağıdaki ile i sesi çalmak için bu işlevi arıyorum.

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

kodunu takiben ses çalma durdurmak için.

soundAtSpecificFrequency.pause();

Bana söyleyebilir misiniz ne olabilir bu durumda ya da başka herhangi bir alternatif çözümde olası çözüm?

değerli zaman için teşekkür ederiz.

Oluştur 21/11/2014 saat 05:57
kullanıcı
Diğer dillerde...                            


1 cevaplar

oy
1

AudioTracksesleri oynatmak için ham PCM örnekleri kullanır. PCM örnekleri (İlk örnek sol hoparlörden tarafından oynanır ve ikinci numune sağ hoparlör tarafından oynanır) aşağıdaki sırayla çalınır:

LRLRLRLRLR

Yani geçmek için numuneler diziyi değiştirmek zorunda AudioTrack.

Bu da yardımcı olabilir.

Senin durumunda sadece aşağıdakileri yapın:

// 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;
}
Cevap 21/11/2014 saat 06:12
kaynak kullanıcı

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