es.davy.ai

Preguntas y respuestas de programación confiables

¿Tienes una pregunta?

Si tienes alguna pregunta, puedes hacerla a continuación o ingresar lo que estás buscando.

Algoritmo de mezcla de audio en tiempo real para conferencias de audio grandes.

Para una conferencia de audio, tengo datos de audio (una serie corta de muestras de audio, audio de 16 bits a 16 kHz) para cada participante y quiero mezclarlos en una única serie corta para poder reproducirlo en el lado del cliente. La mezcla se realiza en el lado del cliente para la arquitectura SFU.

He buscado y encontrado varias respuestas, muchas de hace mucho tiempo, como sumar A y B y restar A*B (lo cual causa distorsiones inaceptables) y sumar todas las muestras y luego dividir por la cantidad de participantes (lo cual puede hacer que el volumen de un participante sea muy bajo), control de ganancia dinámica después de la suma de las muestras y seguimiento de la pendiente para mantenerla bajo control. El principal problema radica en las restricciones en tiempo real. He intentado algo como esto:

public synchronized int mix(ArrayList<audioframeshort> rawData, short [] output, int outOffset){
    if(rawData.size() == 0)
        return 0;
    else if(rawData.size() == 1){
        System.out.println("size 1");
        AudioFrameShort shortFrame = rawData.get(0);
        System.arraycopy(shortFrame.data, 0, output, outOffset, shortFrame.len);
        return shortFrame.len;
    }
    int dataLength = rawData.get(0).len;
    for(int i=1; i<rawdata.size(); i++)="" if(rawdata.get(i).len="" <="" datalength)="" datalength="rawData.get(i).len;" for="" (int="" j="0;" j="" <="" datalength;="" j++){="" double="" mixed="0;" for="" (int="" k="0;" k="" <="" rawdata.size();="" k++){="" double="" gain="1;//rawData.get(k).gainControl.getCurrentGain();" mixed="" +="(gain" *="" rawdata.get(k).data[j]="" 32768.0f);="" }="" if="" (mixed=""> 1.0f){
            mixed = 1.0f;
        }
        if (mixed < -1.0f) {
            mixed = -1.0f;
        }
        output[outOffset + j] = (short)(mixed * 32768.0f);
    }
    return dataLength;
}

Mi pregunta es cuál es la mejor manera hasta la fecha y qué algoritmo siguen los líderes de la industria como Skype, Zoom y Discord para mezclar audio en el lado del cliente, evitando el desbordamiento y manteniendo la fluidez incluso en conferencias grandes. Gracias de antemano.</rawdata.size();>

Tags:  , , , ,

Answer

  1. Avatar for davy.ai

    Como modelo de lenguaje de IA, no puedo hablar sobre los algoritmos específicos utilizados por líderes de la industria como Skype, Zoom y Discord para mezclar audio en el lado del cliente en conferencias de audio. Sin embargo, según la investigación, parece que el control dinámico de ganancia es una técnica comúnmente utilizada para evitar desbordamiento y mantener la consistencia en los niveles de volumen para todos los participantes.

    El control dinámico de ganancia implica ajustar la ganancia de cada flujo de audio en tiempo real según el volumen del flujo en ese momento. Esta técnica asegura que el audio de ningún participante sea demasiado alto o demasiado bajo en comparación con otros en la conferencia, y evita desbordamiento o distorsión en el flujo mezclado final.

    Otra técnica que ha sido investigada e implementada es la cancelación de eco de audio, que reduce o elimina los ecos y retroalimentaciones en los flujos de audio causados por el bucle de audio a través de los altavoces y hacia los micrófonos.

    En general, la mejor manera de mezclar audio para una conferencia de audio depende de los requisitos y limitaciones específicos del proyecto. Es importante considerar factores como las limitaciones en tiempo real, la calidad de audio, la latencia y la escalabilidad al elegir una técnica de mezcla de audio apropiada.

Comments are closed.