Join FlipAndroid.COM Telegram Group: https://t.me/joinchat/F_aqThGkhwcLzmI49vKAiw


¿Mezclar dos corrientes audio en una sola corriente audio en android?

Estoy tratando de mezclar dos flujos de audio para obtener una sola secuencia de salida es posible en android? En mi caso, tengo un flujo de entrada procedente de Micrófono, es decir, estoy grabando el discurso de los usuarios usando AudioRecord. Quiero mezclar esta grabación con un clip de sonido corto y luego crear una nueva secuencia que es una mezcla de ambas corrientes y luego enviarlo a través de un socket Datagram. He investigado mucho y aquí es lo que llegué a conocer.

En primer lugar, SoundPool puede ayudarme a lograr mi objetivo, pero creo que no puedo proporcionar micrófono como fuente de entrada.

Actualmente estoy guardando la grabación de MIC en un búfer y después la corriente sobre el zócalo del datagrama. Pensé que puedo guardar el clip de sonido en otro búfer y luego agregar tanto el búfer (que sé que es una idea tonta, ya que hay varias propiedades de sonido que tendré que gestionar).

También puede ser que puedo guardar la grabación de micrófono a un archivo y la grabación de clip de sonido a un archivo diferente y mezclarlos, sin embargo, creo que no puedo hacer esto, ya que estoy tratando de transmitir la grabación a través del socket Datagram.

Creo que lo que estoy tratando de lograr puede ser posible utilizando la API de sonido de Java. Pero no es compatible con Android.

Para resumir, lo que estoy tratando de lograr como mi objetivo final es inyectar un efecto de sonido en una llamada basada en VoIP (SIP) (efecto de sonido como grillos de sonido junto con mi voz).

Espero haber dado una explicación clara sobre mi problema.

Pregunta 1: ¿Cómo puedo lograr esto? Pregunta 2: ¿Puedo crear un archivo JAR usando la API de sonido de Java y usarlo en mi proyecto? (Sobre esto, creo que no es posible)

Aquí hay algunos códigos de mi grabación de audio y reproducción de audio.

Este es mi código para la grabación de audio:

public void run() { // TODO Auto-generated method stub try{ int minbuffer = AudioRecord.getMinBufferSize(sample, config, format); DatagramSocket socket = new DatagramSocket(); Log.d(TAG, "Socket Created"); socket.setBroadcast(true); byte[] ubuff = new byte[minbuffer]; DatagramPacket packet; Log.d(TAG, "Packet Created"); InetAddress dest = InetAddress.getByName("10.10.1.126"); //InetAddress dest = InetAddress. //InetSocketAddress dest= new InetSocketAddress(host, port); Log.d(TAG, "Address"+dest); rec = new AudioRecord(MediaRecorder.AudioSource.MIC,sample, config,format,minbuffer); rec.startRecording(); while(status == true){ minbuffer = rec.read(ubuff, 0,ubuff.length); Log.d(TAG, "Reading While"); packet = new DatagramPacket(ubuff, ubuff.length,dest,port); socket.send(packet); } }catch(Exception e){ Log.d(TAG, "Bad Datagram"); } } }); stream.start(); 

Este es mi código para la reproducción de audio:

  @Override public void run() { // TODO Auto-generated method stub try{ android.os.Process.setThreadPriority(Process.THREAD_PRIORITY_URGENT_AUDIO); AudioManager mm = (AudioManager)getSystemService(AUDIO_SERVICE); DatagramSocket rSocket = new DatagramSocket(8080); Log.d(TAG, "Recive Socket"); int m_buf = AudioRecord.getMinBufferSize(sample, config, format); byte[] _buff = new byte[m_buf]; AudioTrack rSpeaker = new AudioTrack(mm.STREAM_MUSIC,sample,config, format,m_buf,AudioTrack.MODE_STREAM); mm.setSpeakerphoneOn(false); mm.setStreamVolume(AudioManager.STREAM_MUSIC, 100, AudioManager.MODE_IN_COMMUNICATION); Log.d(TAG, "zzRecorder"); rSpeaker.setPlaybackRate(sample); rSpeaker.play(); while(true){ try{ DatagramPacket rPacket = new DatagramPacket(_buff, _buff.length); rSocket.receive(rPacket); _buff = rPacket.getData(); rSpeaker.write(_buff, 0, m_buf); Log.d(TAG, "Yo Start Write"); }catch(Exception e){ } } }catch(Exception e){ } } }); rvStrm.start(); 

  • Tutorial de socket Bluetooth de Android para comunicación sin bloqueo
  • La conexión TLS que usa SSLSocket es lenta en el sistema operativo Android
  • ¿Cómo crear socket Raw en Android?
  • Asynchronous socket I / O en Android
  • ¿Se eliminan los paquetes si no recibo activamente un DatagramSocket?
  • Android e IPv6 en Java
  • SSLSocket se bloquea en getInputStream cuando el dispositivo android está en wifi
  • Conectar al dispositivo con la dirección Bluetooth en String
  • One Solution collect form web for “¿Mezclar dos corrientes audio en una sola corriente audio en android?”

    Creo que esto debe ser útil para usted,

    http://www.jsresources.org/examples/AudioConcat.html

    El enlace es un ejemplo de código abierto para cómo concatenar / mezclar archivos de audio. Creo que la fuente en la que estarás más interesado será

    MixingAudioInputStream.java

    http://www.jsresources.org/examples/MixingAudioInputStream.java.html

    No sé sobre el apoyo de Java Sound API, pero AFAIK Java Sound API es para la captura de audio y reproducción básica. Usted todavía tendrá que hacer su propia manera de mezclar, ¿no?

    ATB

    FlipAndroid es un fan de Google para Android, Todo sobre Android Phones, Android Wear, Android Dev y Aplicaciones para Android Aplicaciones.