> For the complete documentation index, see [llms.txt](https://docs.facephi.com/llms.txt). Markdown versions of documentation pages are available by appending `.md` to page URLs; this page is available as [Markdown](https://docs.facephi.com/docs.facephi-pt-br/sdks/sdk-mobile/android-sdk/componentes-modulos/captura-de-voz.md).

# Captura de voz - VoiceID

## Introdução <a href="#id-1-introduccion" id="id-1-introduccion"></a>

A Captura Facial é realizada com o ***Componente de voz***.

Este componente é responsável por realizar a captura de voz do usuário e a extração posterior dos templates correspondentes. Seus principais processos são:

* Gerenciamento interno do microfone e das permissões.
* Entrada de um certo número de frases para depois ler cada uma em uma etapa.
* Análise dos silêncios.
* Análise do progresso.
* Assistente nos processos de captura.
* Geração dos templates com as características da voz e pontuações.

Na seção de [Lançamento simplificado](/docs.facephi-pt-br/sdks/sdk-mobile/android-sdk/inicializacion/lanzamiento-simplificado.md) são detalhados os passos necessários para a integração básica do SDK. Nesta seção é adicionada a informação para o lançamento deste componente.

## Dependência <a href="#id-2-dependencia" id="id-2-dependencia"></a>

A dependência específica do componente é:

```
implementation "com.facephi.androidsdk:voice_component:$version"
```

## Controladores disponíveis <a href="#id-3-controladores-disponibles" id="id-3-controladores-disponibles"></a>

<table data-header-hidden><thead><tr><th width="193.87109375"></th><th></th></tr></thead><tbody><tr><td><strong>Controlador</strong></td><td><strong>Descrição</strong></td></tr><tr><td>VoiceController</td><td>Controlador principal de captura de voz</td></tr></tbody></table>

\
Lançamento simplificado
-----------------------

Uma vez iniciado o SDK e criada uma nova operação, será possível lançar o componente. Será possível fazer uso de qualquer um de seus controladores para executar sua funcionalidade.

Lançamento da captura:

```kotlin
val response = SDKController.launch(
    VoiceController(VoiceConfigurationData(...))
)
when (response) {
    is SdkResult.Error -> Napier.d("ERROR - ${response.error.name}")
    is SdkResult.Success -> response.data
}
```

## Configuração básica <a href="#id-5-configuracion-basica" id="id-5-configuracion-basica"></a>

Para iniciar o componente atual, deverá ser criado um objeto *VoiceConfigurationData* que será a configuração do controlador do componente.

A configuração básica necessária é a seguinte:

```kotlin
VoiceConfigurationData(
  phrases = arrayOf(
            "Seu nome completo e seu endereço",
            "Seu número de documento com letra",
        )
)
```

É possível editar a lista de frases que serão exibidas ao usuário.

## Recebimento do resultado <a href="#id-6-recepcion-del-resultado" id="id-6-recepcion-del-resultado"></a>

O lançamento retornará as informações no formato SdkResult. Podendo diferenciar-se entre um lançamento correto e um incorreto:

```
when (response) {
    is SdkResult.Error -> Napier.d("ERROR - ${response.error}")
    is SdkResult.Success -> response.data
}
```

### Recebimento de erros <a href="#id-61-recepcion-de-errores" id="id-61-recepcion-de-errores"></a>

Os erros serão retornados como um objeto 'VoiceError'.

Lista de erros:

* VOC\_ACTIVITY\_RESULT\_MSG\_ERROR: O resultado da atividade está incorreto
* VOC\_APPLICATION\_CONTEXT\_ERROR: O contexto de aplicação necessário é nulo
* VOC\_CANCEL\_BY\_USER: O usuário cancelou o processo
* VOC\_CANCEL\_LAUNCH: Foi feito um cancelamento geral do SDK
* VOC\_COMPONENT\_LICENSE\_ERROR: A licença do componente não está correta
* VOC\_EMPTY\_LICENSE: A String de licença está vazia
* VOC\_FETCH\_DATA\_ERROR: Erro na coleta do resultado
* VOC\_FLOW\_ERROR: Erro no processo de flow
* VOC\_INITIALIZATION\_ERROR: Erro de inicialização
* VOC\_INTERNAL\_LICENSE\_ERROR: Erro interno relacionado à licença
* VOC\_MANAGER\_NOT\_INITIALIZED: Os gerenciadores estão nulos
* VOC\_NO\_DATA\_ERROR: Os dados de entrada estão nulos
* VOC\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em curso
* VOC\_PERMISSION\_DENIED: O usuário recusou as permissões
* VOC\_TIMEOUT: Timeout no processo

### Recebimento do resultado correto - *data* <a href="#id-62-recepcion-del-resultado-correcto-data" id="id-62-recepcion-del-resultado-correcto-data"></a>

Na parte de SdkResult.Success - *data*, teremos a classe *VoiceResult*.

Os campos retornados no resultado são os seguintes:

**audios**

Contém uma lista de áudios capturados em formato ByteArray.

**tokenizedAudios**

Contém a lista de áudios capturados em formato tokenizado da Facephi.

***

## Informações avançadas <a href="#id-7-informacion-avanzada" id="id-7-informacion-avanzada"></a>

Esta seção amplia as informações do componente.

### Configuração avançada do componente <a href="#id-71-configuracion-avanzada-del-componente" id="id-71-configuracion-avanzada-del-componente"></a>

Para iniciar o componente atual, deverá ser criado um objeto *VoiceConfigurationData* que será a configuração do controlador do componente.

A seguir, estão detalhados todos os campos que fazem parte desta classe.

* `phrases`: Indica a(s) frase(s) necessária(s) para capturar..
* `vibrationEnabled`: Indica a ativação da vibração quando o Widget terminar com sucesso.
* `showTutorial`: Indica se o componente ativa a tela de tutorial. Nesta visualização, é explicado de forma intuitiva como a captura é realizada.
* `extractionTimeout`: Define o tempo máximo que a captura pode ser realizada.
* `showDiagnostic`: Mostra telas de diagnóstico ao final do processo.
* `enableQualityCheck`: Ativa ou desativa a verificação de qualidade do áudio. Recomenda-se mantê-la sempre ativa.
* `showPreviousTip`: Mostra uma tela prévia ao lançamento da captura com informações sobre o processo a ser realizado e um botão para o lançamento.

***

## Personalização do componente <a href="#id-8-personalizacion-del-componente" id="id-8-personalizacion-del-componente"></a>

Além das alterações que podem ser feitas no nível do SDK (as quais são explicadas no documento de [Personalização do SDK](/docs.facephi-pt-br/sdks/sdk-mobile/android-sdk/personalizacion.md)), este componente específico permite a modificação de sua interface.

### Textos <a href="#id-81-textos" id="id-81-textos"></a>

Os textos podem ser personalizados adicionando um arquivo XML de recursos no aplicativo cliente e substituindo os valores padrão.

```kotlin
<?xml version="1.0" encoding="utf-8"?>
<resources>
    <!-- Previous Tip -->
    <string name="voice_widget_tip_message">Fale com clareza e em voz alta.<br/><br/>Certifique-se de estar em um ambiente silencioso.</string>
    <string name="voice_widget_tip_message_alt">Fale com clareza e em voz alta. Certifique-se de estar em um ambiente silencioso.</string>
    <string name="voice_widget_tip_title">Reconhecimento de fala</string>
    <string name="voice_widget_tip_button">Continuar</string>
    <string name="voice_widget_tip_anim_alt">Animação na qual aparece uma pessoa segurando o telefone em frente ao rosto e falando diretamente com ele. Antes de começar, se você estiver usando um leitor de tela, use fones de ouvido.</string>
    <!-- Process -->
    <string name="voice_widget_success_message">Gravação registrada</string>
    <string name="voice_widget_speech_message">Fale claramente e perto do microfone</string>
    <string name="voice_widget_speech_more_message">Continue falando</string>
    <string name="voice_widget_speech_empty_message" translatable="false"></string>
    <string name="voice_widget_read_message">Diga em voz alta:</string>
    <string name="voice_widget_speech_noisy_message">Há muito ruído de fundo, tente ir para um ambiente silencioso</string>
    <string name="voice_widget_success_records_message">gravações bem-sucedidas</string>
    <string name="voice_widget_phrase_generic_error_message">Repita a frase, por favor.</string>
    <string name="voice_widget_phrase_long_silence_message">Fale por 2 segundos ou mais.</string>
    <string name="voice_widget_phrase_long_reverberation_message">Há muito eco. Tente um ambiente diferente.</string>
    <string name="voice_widget_quality_check_error_message">A qualidade do áudio é insuficiente.</string>
    <string name="voice_widget_multiple_speakers_error_message">Vozes de fundo detectadas. Certifique-se de estar em um ambiente silencioso.</string>
    <!-- Diagnostic -->
    <string name="voice_widget_timeout_title">Tempo excedido</string>
    <string name="voice_widget_timeout_desc">Não foi possível identificá-lo. Tente novamente.</string>
    <string name="voice_widget_internal_error_title">Houve um problema técnico</string>
    <string name="voice_widget_internal_error_desc">Pedimos desculpas. A captura não pôde ser realizada</string>
    <string name="voice_widget_exit_alert_accept">Aceitar</string>
    <string name="voice_widget_exit_alert_cancel">Cancelar</string>
    <string name="voice_widget_exit_alert_question">Tem certeza de que deseja finalizar o processo?</string>
    <string name="voice_widget_back_button_alt">Voltar</string>
    <string name="voice_widget_close_button_alt">Fechar</string>
    <string name="voice_widget_logo_alt">Logo</string>

</resources>

```

```
                                                                                    |
```

### Animações <a href="#id-82-animaciones" id="id-82-animaciones"></a>

Se desejar modificar as animações (lottie) do SDK, é preciso incluir as animações com o mesmo nome na pasta res/raw/ da aplicação.

```
voice_anim_enroll_ko.json
voice_anim_enroll_ok.json
voice_anim_enroll_progress.json
voice_anim_intro.json
```

### Views externas <a href="#id-83-vistas-externas" id="id-83-vistas-externas"></a>

É possível modificar completamente as telas do componente mantendo sua funcionalidade e navegação. Para isso, devem ser implementadas as interfaces a seguir:

Tela de dica prévia:

```kotlin

interface IVoicePreviousTipView {
    @Composable
    fun Content(
        onContinue: () -> Unit,
        onClose: () -> Unit
    )
}

```

Tela de diagnóstico de erro:

```kotlin

interface IVoiceErrorDiagnosticView {
    @Composable
    fun Content(
        error: VoiceError,
        onRetry: () -> Unit,
        onClose: () -> Unit,
    )
}

```

Telas de captura:

```kotlin

interface IVoiceEnrollRecordingView {
    @Composable
    fun Content(
        phrase: String,
        numberRecordedPhrases: Int,
        numberTotalPhrases: Int,
        voiceAmplitude: Float,
        recordingProgress: Int,
        onClose: () -> Unit,
    )
}

```

```kotlin

interface IVoiceEnrollSuccessView {
    @Composable
    fun Content(
        phrase: String,
        numberRecordedPhrases: Int,
        numberTotalPhrases: Int,
        onClose: () -> Unit,
    )
}

```

```kotlin

interface IVoiceEnrollErrorView {
    @Composable
    fun Content(
        phrase: String,
        numberRecordedPhrases: Int,
        numberTotalPhrases: Int,
        onClose: () -> Unit,
    )
}

```

Uma vez criadas as classes que implementam as interfaces, no lançamento do componente será possível adicionar o parâmetro "customViews" para que sejam usadas no SDK.

<br>
