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

# Captura de voz - VoiceID

## Introducción <a href="#id-1-introduccion" id="id-1-introduccion"></a>

El *Componente* tratado en el documento actual recibe el nombre de ***Voice Component***. Éste se encarga de realizar la captura de voz del usuario y la posterior extracción de las plantillas correspondientes. Sus principales funcionalidades son las siguientes:

* Entrada de cierto número de frases para posteriormente leer cada una en un paso.
* Gestión interna del micrófono.
* Gestión de permisos.
* Análisis de los silencios.
* Análisis del progreso.
* Asistente en los procesos de captura.
* Generación de las plantillas con las características de la voz y puntuaciones.

En el apartado de [Lanzamiento simplificado](/sdks/sdk-mobile/ios-sdk/inicializacion/lanzamiento-simplificado.md) se detallan los pasos necesarios para la integración básica del SDK. En esta sección se añade la información para el lanzamiento de este componente.

## **Dependencias**

Para evitar conflictos y problemas de compatibilidad, en caso de querer instalar el componente en un proyecto que contenga una versión antigua de las librerías de Facephi (*Widgets*), éstos deberán eliminarse por completo antes de la instalación de los componentes de la **SDKMobile**.

### Cocoapods

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

* Para instalar el componente actual deberá incluirse la siguiente entrada en el Podfile de la aplicación:

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

* Una vez instaladas las dependencias, se podrá hacer uso de las diferentes funcionalidades del componente.

### **SPM**

* Las dependencias obligatorias que deberán haberse instalado previamente son:

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

* Para instalar el componente de Selphid deberá incluirse en los módulos del proyecto:

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

## Permisos

En la aplicación cliente donde se vayan a integrar los componentes es necesario incorporar el siguiente elemento en el fichero **Info.plist**:

```
Es necesario permitir el uso del micrófono (NSMicrophoneUsageDescription - Privacy - Microphone Usage Description)
```

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

| **Controlador** | **Descripción**                         |
| --------------- | --------------------------------------- |
| VoiceController | Controlador principal de captura de voz |

## Lanzamiento simplificado

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

## Configuración básica

Para lanzar el componente actual, se deberá crear un objeto *VoiceConfigurationData* que será la configuración del controlador del componente.

La configuración básica necesaria para es la siguiente:

```swift
static var voiceIDConfiguration: VoiceConfigurationData {
    let configVoiceID = VoiceConfigurationData(
            phrases: ["Tu nombre completo y tu dirección",
                      "Tu número de documento con letra"])
    return configVoiceID
}
```

Se puede editar el listado de frases que se van a mostrar al usuario.

## Recepción del resultado <a href="#id-7-recepcion-del-resultado" id="id-7-recepcion-del-resultado"></a>

Los controllers devolverán la información necesaria en formato SdkResult.

### Recepción de errores <a href="#id-71-recepcion-de-errores" id="id-71-recepcion-de-errores"></a>

En la parte del error, dispondremos del enumerado común *ErrorType*:

* VOC\_CANCEL\_BY\_USER: El usuario ha cancelado el proceso
* VOC\_CANCEL\_LAUNCH: Se ha hecho una cancelación general del SDK
* VOC\_COMPONENT\_LICENSE\_ERROR: La licencia del componente no es correcta
* VOC\_EMPTY\_LICENSE: El String de licencia está vacío
* VOC\_INITIALIZATION\_ERROR: Error de inicialización
* VOC\_INTERNAL\_LICENSE\_ERROR: Error interno relacionado con la licencia
* VOC\_NO\_DATA\_ERROR: Los datos de entrada son nulos
* VOC\_OPERATION\_NOT\_CREATED: No hay ninguna operación en curso
* VOC\_PERMISSION\_DENIED: El usuario ha rechazado los permisos
* VOC\_TIMEOUT: Timeout en el proceso

### Recepción de ejecución correcta - *data* <a href="#id-72-recepcion-de-ejecucion-correcta-data" id="id-72-recepcion-de-ejecucion-correcta-data"></a>

En la parte de *data*, dispondremos de la clase *VoiceResult*.

El campo *data* es variable y dependerá de qué componente se ha devuelto el resultado. En el caso de este componente, los campos devueltos son los siguientes:

**audios**

Contiene un listado de audios capturados en formato ByteArray.

**tokenizedAudios**

Contiene el listado de audios capturados en formato tokenizado de Facephi.

## Información avanzada

Este apartado amplía la información del componente.

### Configuración avanzada del componente <a href="#id-5-configuracion-del-componente" id="id-5-configuracion-del-componente"></a>

Para configurar el componente actual, una vez inicializado, se deberá crear un objeto

*VoiceConfigurationData* y pasarlo como parámetro al SDKController durante el lanzamiento del componente.

En el siguiente apartado se mostrarán los campos que forman parte de esta clase y para qué se utiliza cada uno de ellos.

**phrases**

Indica la/las frases necesarias para capturar.

**vibrationEnabled**

Indica la activación de la vibración cuando el widget termine satisfactoriamente.

**showTutorial**

Indica si el componente activa la pantalla de tutorial. En esta vista se explica de forma intuitiva cómo se realiza la captura.

**extractionTimeout**

Establece el tiempo máximo que se puede realizar la captura.

**showDiagnostic**

Mostrar pantallas de diagnóstico al final del proceso

**enableQualityCheck**

Activa o desactiva la comprobación de calidad del audio. Se recomienda tenerla siempre activa.

**showPreviousTip**

Muestra una pantalla previa al lanzamiento de la captura con información sobre el proceso a realizar y un botón para el lanzamiento.

## Personalización del componente

Aparte de los cambios que se pueden realizar a nivel de SDK (los cuales se explican en el documento de *Personalización del SDK*), este componente en concreto permite la modificación de su interfaz.

### Textos

Los textos pueden ser customizados sobreescribiendo el valor de las siguientes claves en un **Localizable.strings**. Las claves que contienen el sufijo ***\_alt*** son los literales utilizados en las etiquetas de accesibilidad necesarias para la funcionalidad de ***voice over***.

| **Name**                                               | **Value**                                                                   |
| ------------------------------------------------------ | --------------------------------------------------------------------------- |
| voice\_component\_success\_records\_message            | %d/%d grabaciones exitosas                                                  |
| voice\_component\_read\_message                        | Di en voz alta:                                                             |
| voice\_component\_speech\_message                      | Habla claro y cercano al micrófono                                          |
| voice\_component\_speech\_noisy\_message               | Hay demasiado ruido. Intenta estar en un entorno silencioso.                |
| voice\_component\_success\_message                     | Grabación registrada                                                        |
| voice\_component\_phrase\_generic\_error\_message      | Por favor, repite la frase.                                                 |
| voice\_component\_phrase\_long\_silence\_message       | Habla durante 2 segundos o más.                                             |
| voice\_component\_phrase\_long\_reverberation\_message | Demasiado eco. Prueba en otro entorno.                                      |
| voice\_component\_tip\_title                           | Reconocimiento de voz                                                       |
| voice\_component\_tip\_message                         | Habla claro y en voz alta.\n\nAsegúrate de estar en un entorno silencioso   |
| voice\_component\_tip\_button                          | COMENZAR                                                                    |
| voice\_component\_exit\_alert\_accept                  | Aceptar                                                                     |
| voice\_component\_exit\_alert\_cancel                  | Cancel                                                                      |
| voice\_component\_exit\_alert\_question                | ¿Seguro que finalizar el proceso?                                           |
| voice\_component\_multiple\_speakers\_error\_message   | Se ha detectado voces de fondo. Asegúrate de estar en un entorno silencioso |
| voice\_component\_short\_recorded\_speech\_message     | La grabación ha sido muy corta.                                             |
| voice\_component\_quality\_check\_error\_message       | La calidad del audio es insuficiente.                                       |
| voice\_component\_close\_button\_alt                   | Cerrar                                                                      |
| voice\_component\_logo\_alt                            | Logo                                                                        |
| voice\_component\_tip\_anim\_alt                       |                                                                             |
| voice\_component\_timeout\_title                       | Tiempo superado                                                             |
| voice\_component\_timeout\_desc                        | No hemos podido identificarte. Inténtalo de nuevo.                          |

De este modo, si se desea modificar por ejemplo el texto “*COMENZAR*” de la clave `voice_component_tip_button_message` para el idioma **es**, se deberá ir al archivo **Localizable.strings** de la carpeta **es.lproj** si es que existe (si no, se deberá crear) y ahí, añadir:

```xml
"voice_component_success_records_message" = "%d/%d grabaciones exitosas";
"voice_component_read_message" = "Di en voz alta:";
"voice_component_speech_message" = "Habla claro y cercano al micrófono";
"voice_component_speech_noisy_message" = "Hay demasiado ruido. Intenta estar en un entorno silencioso.";
"voice_component_success_message" = "Grabación registrada";
"voice_component_phrase_generic_error_message" = "Por favor, repite la frase.";
"voice_component_phrase_long_silence_message" = "Habla durante 2 segundos o más.";
"voice_component_phrase_long_reverberation_message" = "Demasiado eco. Prueba en otro entorno.";
"voice_component_tip_title" = "Reconocimiento de voz";
"voice_component_tip_message" = "Habla claro y en voz alta.\n\nAsegúrate de estar en un entorno silencioso";
"voice_component_tip_button" = "COMENZAR";
"voice_component_exit_alert_accept"="Aceptar";
"voice_component_exit_alert_cancel"="Cancelar";
"voice_component_exit_alert_question" = "¿Seguro que quiere finalizar el proceso?";
"voice_component_multiple_speakers_error_message" = "Se ha detectado voces de fondo. Asegúrate de estar en un entorno silencioso";
"voice_component_short_recorded_speech_message" = "La grabación ha sido muy corta.";
"voice_component_quality_check_error_message" = "La calidad del audio es insuficiente.";
"voice_component_close_button_alt" = "Cerrar";
"voice_component_logo_alt" = "Logo";
"voice_component_tip_anim_alt"="Animación en la que aparece una persona que sujeta el teléfono delante de su cara y habla directamente dirigiéndose a él. Antes de empezar, si usas lector de pantalla, utiliza auriculares.";
"voice_component_timeout_title"="Tiempo superado";
"voice_component_timeout_desc"="No hemos podido identificarte. Inténtalo de nuevo.";

```

Si un mensaje no se especifica en el fichero del idioma, este se rellenará con el mensaje por defecto.

### Animaciones <a href="#id-84-animaciones" id="id-84-animaciones"></a>

Las animaciones a usar se inicializan similarmente en la variable animations con un diccionario, teniendo como valor una string con el nombre de la animación que se encuentre en xcassets que se desee usar.

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