Kotlin

Añadir un renderizador de audio personalizado

Implementarás un sencillo renderizador de audio para el audio de los flujos suscritos.

En 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.

En BaseAudioDevice.initRenderer cuando la aplicación inicializa el renderizador de audio. La dirección NoiseAudioDevice de este método crea un nuevo 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
}

En 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
}

En 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
Captura de audio para su uso por un editor
9
Añadir un renderizador de audio personalizado
10
Ejecutar la aplicación
11
Conclusión