通过耳机和扬声器快速切换播放声音或在两者上连续播放

时间:2016-01-05 13:22:30

标签: android audio audiotrack

Playing sound over speakers while playing music through headphones

这家伙和我现在解决的问题完全相同。我阅读了他的所有回复,因为有些过时了,有些根本没有工作,或者大多数设备都没有,所以我决定采用快速切换可能是更好的方法。我也无法直接与他联系。

我需要在耳机上连续播放音调以便为我的外围设备供电,有时候(每秒3-4次会非常好)播放一个非常短暂但仍然可听到的“嘟嘟”声。至关重要的是耳​​机应尽可能短时间内中断或根本不中断。

这就是我现在正在做的事情:我有一个主要的连续AudioTrack用于电源,一个用于“嘟嘟”。它的工作方式就像我想要的那样,但是2个音轨之间的切换速度非常慢 - 我手机上的时间长达600ms,朋友的手机上的时间长达200ms。如果我想每秒播放超过2次的哔哔声,这太多了。如果我给命令计时,那么一直占用的是beepTrack.play()。

powerThread = new Thread(new Runnable() {
        @Override
        public void run() {
            while(running) {
                if (systemAudioManager.isWiredHeadsetOn()) {
                    powerTrack.write(powerSamples, 0, powerSamples.length);
                }

            }
        }
    });

private void playBeep() {
    beepTrack = new AudioTrack(
            BEEP_STREAM_TYPE,
            BEEP_SAMPLE_RATE,
            AudioFormat.CHANNEL_OUT_MONO,
            AudioFormat.ENCODING_PCM_16BIT,
            minBeepBufferSize,
            AudioTrack.MODE_STREAM
    );

    beepTrack.setStereoVolume(AudioTrack.getMaxVolume() / 2, AudioTrack.getMaxVolume() / 2);
    powerTrack.stop();

    //Delay, otherwise my power track isn't stopped and starts sounding over speakers
    try {
        Thread.sleep(50);
    } catch (InterruptedException e) {
        e.printStackTrace();
    }
    //Main time consumer
    beepTrack.play();
    beepTrack.write(beepSamples, 0, beepSamples.length / 2);

    beepTrack.stop();
    powerTrack.play();
}

0 个答案:

没有答案