Kotlin

Adicionando um renderizador de áudio personalizado

Você implementará um renderizador de áudio simples para o áudio dos fluxos aos quais está inscrito.

O NoiseAudioDevice O método construtor configura um arquivo para salvar o áudio recebido. Isso é feito simplesmente para ilustrar um uso do renderizador de áudio do driver de áudio personalizado.

O BaseAudioDevice.initRenderer O método é chamado quando o aplicativo inicializa o renderizador de áudio. O NoiseAudioDevice A implementação desse método instancia um novo objeto `File`, no qual o aplicativo gravará os dados de áudio:

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
}

O BaseAudioDevice.startRendering O método é chamado quando o dispositivo de áudio deve começar a reproduzir o áudio dos fluxos aos quais está inscrito. O NoiseAudioDevice A implementação desse método inicia o capturer thread a ser executado na fila após 1 segundo:

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

O renderer O thread obtém 1 segundo de áudio do barramento de áudio chamando a função readRenderData método do AudioBus objeto. Em seguida, ele grava os dados de áudio no arquivo (para fins de amostragem). E, se o dispositivo de áudio ainda estiver sendo usado para reproduzir amostras de áudio, ele define um temporizador para executar o rendererHandler retomar o thread após 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)
        }
    }
}

Driver de áudio personalizado

Aprenda a usar um driver de áudio personalizado para personalizar o áudio dos fluxos do emissor e do assinante. Você utilizará o driver de áudio personalizado quando quiser iniciar e interromper a reprodução de seu próprio arquivo de áudio, bem como realizar qualquer ação que não faça parte do comportamento padrão do chat de vídeo ao vivo fornecido pelo SDK.

Disponível em:
Kotlin Swift
Etapas
1
Introdução
2
Introdução
3
Criando um novo projeto
4
Adicionando o SDK do Android
5
Configurando a autenticação
6
Solicitação de permissões
7
Adicionando um driver de áudio personalizado
8
Gravação de áudio para uso por uma editora
9
Adicionando um renderizador de áudio personalizado
10
Executando o aplicativo
11
Conclusão