java - tipos - tarjeta de sonido pc
Tocando 2 músicas a través de 2 tarjetas de sonido diferentes al mismo tiempo (2)
Intentando algo bastante fuera de la caja ... Tengo una aplicación sencilla con un botón que cuando se presiona, reproduce música desde la toma de audio de mi tableta Android.
public void btn1 (View view) {
MediaPlayer mp = MediaPlayer.create(this, R.raw.xxx);
mp.start();
}
Ahora he agregado una interfaz de audio usb (a través de un adaptador micro usb) y puedo escuchar el audio.
Soy capaz de listar las tarjetas de sonido con esto
AudioDeviceInfo[] devices = audioManager.getDevices(AudioManager.GET_DEVICES_OUTPUTS);
for (AudioDeviceInfo device : devices) {
int b = device.getId();
int d = device.getType();
CharSequence productName = device.getProductName();
}
¿Cómo dirijo la música para que pueda reproducir 2 canciones diferentes a la vez, una a través de usb y la otra a través del conector para auriculares?
De acuerdo con la documentación de MediaPlayer
, puede configurar el dispositivo de audio usando setPreferredDevice
que recibe un AudioDeviceInfo
como un parámetro, vea https://developer.android.com/reference/android/media/MediaPlayer.html#setPreferredDevice(android.media.AudioDeviceInfo) .
Luego tendrás que crear un MediaPlayer
para jugar en cada dispositivo.
Funciona de esta manera:
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();
}
}
También puede filtrar el evento de enchufe / desenchufe del auricular:
IntentFilter intentFilter = new IntentFilter(Intent.ACTION_HEADSET_PLUG);
Intent intent = context.registerReceiver(null, intentFilter);
boolean isConnected = intent.getIntExtra("state", 0) == 1;
fuentes: me , basado en la documentación del SDK para el MediaPlayer .