Воспроизведение 2 музыкальных композиций через 2 разные звуковые карты одновременно - PullRequest
0 голосов
/ 02 сентября 2018

Пробую что-то довольно из коробки ... У меня есть простое приложение с кнопкой, которая при нажатии воспроизводит музыку из аудиоразъема моего планшета Android.

public void btn1 (View view) {
    MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
    mp.start();
}

Теперь я добавил аудиоинтерфейс USB (через микро-адаптер USB), и я могу слышать звук из него.

Я могу перечислить звуковые карты с этим

AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);

for (AudioDeviceInfo device : devices) {
    int b = device.getId();
    int d = device.getType();
    CharSequence productName = device.getProductName();
}

Как мне перенаправить музыку, чтобы я мог одновременно воспроизводить 2 разные музыки, одну через usb, а другую через разъем для наушников?

Ответы [ 2 ]

0 голосов
/ 12 сентября 2018

работает примерно так:

protected void playAudio() {
    this.playByDeviceIdx(0, R.raw.xxx);
    this.playByDeviceIdx(1, R.raw.yyy);
}

protected void playByDeviceIdx(int deviceIndex, @IdRes int resId) {

    /* obtain audio-output device-infos */
    deviceInfos[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);

    /* check, if the desired index is even within bounds */
    if(deviceInfos.length < deviceIndex) {

        /* create an instance of MediaPlayer */
        MediaPlayer mp = MediaPlayer.create(this, resId);

        /* assign a preferred device to the MediaPlayer instance */
        mp.setPreferredDevice(deviceInfos[deviceIndex]);

       /* start the playback (only if a device exists at the index) */
       mp.start();
    }
}

Вы также можете отфильтровать событие подключения / отключения разъема гарнитуры:

IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
Intent intent = context.registerReceiver(null, intentFilter);
boolean isConnected = intent.getIntExtra("state", 0) == 1;

источники: me , на основе документации SDK для MediaPlayer .

0 голосов
/ 09 сентября 2018

В соответствии с документацией MediaPlayer вы можете установить аудиоустройство, используя setPreferredDevice, который получает AudioDeviceInfo в качестве параметра, см. https://developer.android.com/reference/android/media/MediaPlayer.html#setPreferredDevice(android.media.AudioDeviceInfo).

Затем вам нужно будет создать один MediaPlayer для воспроизведения на каждом устройстве.

...