> 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/ios-sdk/modulos/captura-de-voz.md).

# Captura de voz - VoiceID

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

O *Componente* tratado no documento atual recebe o nome de ***Componente de voz***. Ele se encarrega de realizar a captura de voz do usuário e a posterior extração dos templates correspondentes. Suas principais funcionalidades são as seguintes:

* Entrada de um certo número de frases para depois ler cada uma em uma etapa.
* Gerenciamento interno do microfone.
* Gerenciamento de permissões.
* 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/ios-sdk/inicializacion/lanzamiento-simplificado.md) são detalhadas as etapas necessárias para a Integração básica do SDK. Nesta seção, são adicionadas as informações para o lançamento deste componente.

## **Dependências**

Para evitar conflitos e problemas de compatibilidade, caso queira instalar o componente em um projeto que contenha uma versão antiga das bibliotecas da Facephi (*Widgets*), eles deverão ser totalmente removidos antes da instalação dos componentes da **SDKMobile**.

### CocoaPods

```sh
pod 'FPHISDKMainComponent', '~> $VERSION'
```

* Para instalar o componente atual, deverá ser incluída a seguinte entrada no Podfile da aplicação:

```sh
pod 'FPHISDKVoiceIDComponent', '~> $VERSION'
```

* Uma vez instaladas as dependências, será possível usar as diferentes funcionalidades do componente.

### **SPM**

* As dependências obrigatórias que deverão ter sido instaladas previamente são:

```swift
//HTTPS
https://github.com/facephi-clienters/SDK-SdkPackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-SdkPackage-SPM.git
```

* Para instalar o componente de Selphid, deverá ser incluído nos módulos do projeto:

<pre class="language-swift"><code class="lang-swift"><strong>//HTTPS
</strong>https://github.com/facephi-clienters/SDK-VoicePackage-SPM.git
//SSH
git@github.com:facephi-clienters/SDK-VoicePackage-SPM.git
</code></pre>

## Permissões

No aplicativo cliente onde os componentes serão integrados, é necessário incorporar o seguinte elemento no arquivo **Info.plist**:

```
É necessário permitir o uso do microfone (NSMicrophoneUsageDescription - Privacy - Microphone Usage Description)
```

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

| **Controlador** | **Descrição**                            |
| --------------- | ---------------------------------------- |
| VoiceController | Controlador principal de captação de voz |

## Lançamento simplificado

```swift
let controller = VoiceController(data: voiceConfigurationData, output: { sdkResult in
        // Do whatever with the result
        ...
    }, viewController: viewController)
SDKController.shared.launch(controller: controller)
```

## Configuração básica

Para lançar o componente atual, será necessário criar um objeto *VoiceConfigurationData* que será a configuração do controlador do componente.

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

```swift
static var voiceIDConfiguration: VoiceConfigurationData {
    let configVoiceID = VoiceConfigurationData(
            phrases: ["Seu nome completo e seu endereço",
                      "Seu número de documento com letra"])
    return configVoiceID
}
```

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

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

Os controllers devolverão a informação necessária no formato SdkResult.

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

Na parte de erro, teremos o enum comum *ErrorType*:

* VOC\_CANCEL\_BY\_USER: O usuário cancelou o processo
* VOC\_CANCEL\_LAUNCH: Foi feita uma 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\_INITIALIZATION\_ERROR: Erro de Inicialização
* VOC\_INTERNAL\_LICENSE\_ERROR: Erro interno relacionado à licença
* VOC\_NO\_DATA\_ERROR: Os dados de entrada são nulos
* VOC\_OPERATION\_NOT\_CREATED: Não há nenhuma operação em andamento
* VOC\_PERMISSION\_DENIED: O usuário recusou as permissões
* VOC\_TIMEOUT: Timeout no processo

### Recebimento de execução bem-sucedida - *data* <a href="#id-72-recepcion-de-ejecucion-correcta-data" id="id-72-recepcion-de-ejecucion-correcta-data"></a>

Na parte de *data*, teremos a classe *VoiceResult*.

O campo *data* é variável e dependerá de qual componente retornou o resultado. No caso deste componente, os campos retornados são os seguintes:

**audios**

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

**tokenizedAudios**

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

## Informações avançadas

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

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

Para configurar o componente atual, uma vez inicializado, deverá ser criado um objeto

*VoiceConfigurationData* e passá-lo como parâmetro para o SDKController durante a inicialização do componente.

Na seção seguinte, serão mostrados os campos que fazem parte desta classe e para que cada um deles é usado.

**phrases**

Indica a(s) frase(s) necessárias 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. Nessa visualização é explicado de forma intuitiva como a captura é realizada.

**extractionTimeout**

Define o tempo máximo que a captura pode durar.

**showDiagnostic**

Exibir 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 anterior 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

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*), este componente em específico permite a modificação de sua interface.

### Textos

Os textos podem ser personalizados sobrescrevendo o valor das seguintes chaves em um **Localizable.strings**. As chaves que contêm o sufixo ***\_alt*** são os literais utilizados nas etiquetas de acessibilidade necessárias para a funcionalidade de ***VoiceOver***.

| **Nome**                                               | **Valor**                                                                          |
| ------------------------------------------------------ | ---------------------------------------------------------------------------------- |
| voice\_component\_success\_records\_message            | %d/%d gravações bem-sucedidas                                                      |
| voice\_component\_read\_message                        | Diga em voz alta:                                                                  |
| voice\_component\_speech\_message                      | Fale claramente e perto do microfone                                               |
| voice\_component\_speech\_noisy\_message               | Há ruído demais. Tente estar em um ambiente silencioso.                            |
| voice\_component\_success\_message                     | Gravação registrada                                                                |
| voice\_component\_phrase\_generic\_error\_message      | Por favor, repita a frase.                                                         |
| voice\_component\_phrase\_long\_silence\_message       | Fale por 2 segundos ou mais.                                                       |
| voice\_component\_phrase\_long\_reverberation\_message | Eco demais. Tente em outro ambiente.                                               |
| voice\_component\_tip\_title                           | Reconhecimento de voz                                                              |
| voice\_component\_tip\_message                         | Fale claramente e em voz alta.\n\nCertifique-se de estar em um ambiente silencioso |
| voice\_component\_tip\_button                          | COMEÇAR                                                                            |
| voice\_component\_exit\_alert\_accept                  | selphid\_selector\_exit\_alert\_accept                                             |
| voice\_component\_exit\_alert\_cancel                  | Cancelar                                                                           |
| voice\_component\_exit\_alert\_question                | Tem certeza de que deseja finalizar o processo?                                    |
| voice\_component\_multiple\_speakers\_error\_message   | Foram detectadas vozes de fundo. Certifique-se de estar em um ambiente silencioso  |
| voice\_component\_short\_recorded\_speech\_message     | A gravação foi muito curta.                                                        |
| voice\_component\_quality\_check\_error\_message       | A qualidade do áudio é insuficiente.                                               |
| voice\_component\_close\_button\_alt                   | Fechar                                                                             |
| voice\_component\_logo\_alt                            | Logo                                                                               |
| voice\_component\_tip\_anim\_alt                       |                                                                                    |
| voice\_component\_timeout\_title                       | Tempo esgotado                                                                     |
| voice\_component\_timeout\_desc                        | Não conseguimos identificá-lo(a). Tente novamente.                                 |

Dessa forma, se quiser modificar, por exemplo, o texto “*COMEÇAR*” da chave `voice_component_tip_button_message` para o idioma **é**, deverá ir ao arquivo **Localizable.strings** da pasta **es.lproj** se existir (caso contrário, deverá ser criado) e então adicionar:

```xml
"voice_component_success_records_message" = "%d/%d gravações bem-sucedidas";
"voice_component_read_message" = "Diga em voz alta:";
"voice_component_speech_message" = "Fale claramente e perto do microfone";
"voice_component_speech_noisy_message" = "Há ruído demais. Tente estar em um ambiente silencioso.";
"voice_component_success_message" = "Gravação registrada";
"voice_component_phrase_generic_error_message" = "Por favor, repita a frase.";
"voice_component_phrase_long_silence_message" = "Fale por 2 segundos ou mais.";
"voice_component_phrase_long_reverberation_message" = "Eco demais. Tente em outro ambiente.";
"voice_component_tip_title" = "Reconhecimento de voz";
"voice_component_tip_message" = "Fale claramente e em voz alta.\n\nCertifique-se de estar em um ambiente silencioso";
"voice_component_tip_button" = "COMEÇAR";
"voice_component_exit_alert_accept"="Aceitar";
"voice_component_exit_alert_cancel"="Cancelar";
"voice_component_exit_alert_question" = "Tem certeza de que deseja finalizar o processo?";
"voice_component_multiple_speakers_error_message" = "Foram detectadas vozes de fundo. Certifique-se de estar em um ambiente silencioso";
"voice_component_short_recorded_speech_message" = "A gravação foi muito curta.";
"voice_component_quality_check_error_message" = "A qualidade do áudio é insuficiente.";
"voice_component_close_button_alt" = "Fechar";
"voice_component_logo_alt" = "Logo";
"voice_component_tip_anim_alt"="Animação em que aparece uma pessoa segurando o telefone diante do rosto e falando diretamente para ele. Antes de começar, se usar leitor de tela, utilize fones de ouvido.";
"voice_component_timeout_title"="Tempo esgotado";
"voice_component_timeout_desc"="Não conseguimos identificá-lo(a). Tente novamente.";

```

Se uma mensagem não for especificada no arquivo de idioma, ela será preenchida com a mensagem padrão.

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

As animações a serem usadas são inicializadas de forma semelhante na variável animations, com um dicionário, tendo como valor uma string com o nome da animação que estiver no xcassets que se deseja usar.

```
case voice_anim_enroll
case voice_anim_enroll_error
case voice_anim_enroll_ok
case voice_anim_intro
```
