Kotlin

Añadir un renderizador de audio personalizado

Implementarás un renderizador de audio sencillo para el audio de las transmisiones a las que estés suscrito.

El NoiseAudioDevice configura un archivo para guardar el audio entrante en un archivo. Esto se hace simplemente para ilustrar un uso del renderizador de audio del controlador de audio personalizado.

El BaseAudioDevice.initRenderer El método se invoca cuando la aplicación inicializa el renderizador de audio. El NoiseAudioDevice La implementación de este método crea una nueva instancia del objeto `File`, en el que la aplicación escribirá los datos de audio:

override fun initRenderer(): Boolean {
    rendererBuffer = ByteBuffer.allocateDirect(SAMPLING_RATE * 2)
    val documentsDirectory = context.getExternalFilesDir(Environment.DIRECTORY_DOCUMENTS)

    rendererFile = File(documentsDirectory, "output.raw")
    if (rendererFile?.exists() == false) {
        try {
            rendererFile?.parentFile?.mkdirs()
            rendererFile?.createNewFile()
        } catch (e: IOException) {
            e.printStackTrace()
        }
    }
    return true
}

El BaseAudioDevice.startRendering se llama cuando el dispositivo de audio debe empezar a reproducir el audio de los flujos suscritos. El método NoiseAudioDevice de este método inicia el capturer hilo que se ejecutará en la cola después de 1 segundo:

override fun startRenderer(): Boolean {
    rendererStarted = true
    rendererHandler?.postDelayed(renderer, rendererIntervalMillis)
    return true
}

El renderer obtiene 1 segundo de audio del bus de audio llamando a la función readRenderData método del AudioBus objeto. A continuación, escribe los datos de audio en el archivo (con fines de muestreo). Y, si el dispositivo de audio todavía se está utilizando para renderizar muestras de audio, establece un temporizador para ejecutar la función rendererHandler después de 0,1 segundos:

private var rendererHandler: Handler? = null

private val renderer: Runnable = object : Runnable {
    override fun run() {
        rendererBuffer?.clear()
        audioBus.readRenderData(rendererBuffer, SAMPLING_RATE)
        try {
            val stream = FileOutputStream(rendererFile)
            stream.write(rendererBuffer?.array())
            stream.close()
        } catch (e: FileNotFoundException) {
            e.printStackTrace()
        } catch (e: IOException) {
            e.printStackTrace()
        }
        if (rendererStarted && !audioDriverPaused) {
            rendererHandler?.postDelayed(this, rendererIntervalMillis)
        }
    }
}

Controlador de audio personalizado

Aprenda a utilizar un controlador de audio personalizado para personalizar el audio de la transmisión del editor y del suscriptor. Utilizará el controlador de audio personalizado cuando desee iniciar y detener el audio reproducir su propio archivo de audio y hacer cualquier cosa fuera del comportamiento predeterminado del chat de vídeo en directo proporcionado por el SDK.

Disponible en:
Kotlin Swift
Pasos
1
Introducción
2
Primeros pasos
3
Crear un nuevo proyecto
4
Añadir el SDK de Android
5
Configuración de la autenticación
6
Solicitud de permisos
7
Añadir un controlador de audio personalizado
8
Grabación de audio para su uso por parte de una editorial
9
Añadir un renderizador de audio personalizado
10
Ejecutar la aplicación
11
Conclusión