Tutorial AVS: Indicadores de Estado utilizando sonidos
By: Francisco Rivas
Tags: Tutorial, Tutoriales, Español, Alexa, Av

Una vez copiado el archivo, lo descomprimimos así:

$ unzip Alexa\ Sound\ Library\ for\ AVS.zip -x ‘__MACOS*’**

Archive: Alexa Sound Library for AVS.zip

creating: Alexa Sound Library for AVS/

inflating: Alexa Sound Library for AVS/.DS_Store

inflating: Alexa Sound Library for AVS/Alexa sound library for AVS.pdf

creating: Alexa Sound Library for AVS/ful/

inflating: Alexa Sound Library for AVS/ful/ful_alerts_notification_01.mp3

inflating: Alexa Sound Library for AVS/ful/ful_alerts_notification_03.mp3

inflating: Alexa Sound Library for AVS/ful/ful_state_bluetooth_connected.mp3

inflating: Alexa Sound Library for AVS/ful/ful_state_bluetooth_disconnected.mp3

inflating: Alexa Sound Library for AVS/ful/ful_state_privacy_mode_off.wav

inflating: Alexa Sound Library for AVS/ful/ful_state_privacy_mode_on.wav

inflating: Alexa Sound Library for AVS/ful/ful_system_alerts_melodic_01.mp3

inflating: Alexa Sound Library for AVS/ful/ful_system_alerts_melodic_01_short.wav

inflating: Alexa Sound Library for AVS/ful/ful_system_alerts_melodic_02.mp3

.

.

.

<resto de salida eliminada por espacio>

¿Qué tenemos en el directorio?



$ ls -1

Alexa sound library for AVS.pdf

ful/

license.txt

med/

sml/

ful/ med/ sml/: Contienen archivos de audio *,mp3 y *.wav . De acuerdo a la documentación, la diferencia entre los archivos que encontramos en cada directorio es la calidad de estos. He comprobado esta información:



/ful $ ls -larth

total 2.1M

-rw-r — r — 1 pi pi 94K Jul 31 22:36 ful_utility_500ms_blank.wav

-rw-r — r — 1 pi pi 122K Jul 31 22:36 ful_ui_wakesound.wav

-rw-r — r — 1 pi pi 89K Jul 31 22:36 ful_ui_wakesound_touch.wav

-rw-r — r — 1 pi pi 132K Jul 31 22:36 ful_ui_endpointing.wav

-rw-r — r — 1 pi pi 132K Jul 31 22:36 ful_ui_endpointing_touch.wav

-rw-r — r — 1 pi pi 376K Jul 31 22:36 ful_system_alerts_melodic_02_short.wav

-rw-r — r — 1 pi pi 190K Jul 31 22:36 ful_system_alerts_melodic_02.mp3

-rw-r — r — 1 pi pi 376K Jul 31 22:36 ful_system_alerts_melodic_01_short.wav

-rw-r — r — 1 pi pi 190K Jul 31 22:36 ful_system_alerts_melodic_01.mp3

-rw-r — r — 1 pi pi 66K Jul 31 22:36 ful_state_privacy_mode_on.wav

-rw-r — r — 1 pi pi 85K Jul 31 22:36 ful_state_privacy_mode_off.wav

-rw-r — r — 1 pi pi 40K Jul 31 22:36 ful_state_bluetooth_disconnected.mp3

-rw-r — r — 1 pi pi 43K Jul 31 22:36 ful_state_bluetooth_connected.mp3

-rw-r — r — 1 pi pi 56K Jul 31 22:36 ful_alerts_notification_03.mp3

-rw-r — r — 1 pi pi 46K Jul 31 22:36 ful_alerts_notification_01.mp3

Debo decir que no observo tal diferencia, a excepción de sml_ui_wakesound.wav que se diferencia en 33K aproximadamente de los demás ( med y ful ).

Luego mirando la información del archivo de audio en cuestión:



$ file ful/ful_alerts_notification_01.mp3

ful/ful_alerts_notification_01.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 256 kbps, 48 kHz, JntStereo $ file med/med_alerts_notification_01.mp3

med/med_alerts_notification_01.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 256 kbps, 48 kHz, JntStereo $ file sml/sml_alerts_notification_01.mp3

sml/sml_alerts_notification_01.mp3: Audio file with ID3 version 2.3.0, contains: MPEG ADTS, layer III, v1, 256 kbps, 48 kHz, JntStereo

La verdad no he podido notar una diferencia importante. Decidí probar por ultima vez con otra herramienta:



$ sox — i ful/ful_ui_wakesound.wav

Input File : ‘ful/ful_ui_wakesound.wav’

Channels : 2

Sample Rate : 48000

Precision : 16-bit

Duration : 00:00:00.65 = 31065 samples ~ 48.5391 CDDA sectors

File Size : 124k

Bit Rate : 1.54M

Sample Encoding: 16-bit Signed Integer PCM



$ sox — i med/med_ui_wakesound.wav

Input File : ‘med/med_ui_wakesound.wav’

Channels : 2

Sample Rate : 48000

Precision : 16-bit

Duration : 00:00:00.65 = 31065 samples ~ 48.5391 CDDA sectors

File Size : 124k

Bit Rate : 1.54M

Sample Encoding: 16-bit Signed Integer PCM



$ sox — i sml/sml_ui_wakesound.wav

Input File : ‘sml/sml_ui_wakesound.wav’

Channels : 2

Sample Rate : 48000

Precision : 16-bit

Duration : 00:00:00.47 = 22653 samples ~ 35.3953 CDDA sectors

File Size : 90.7k

Bit Rate : 1.54M

Sample Encoding: 16-bit Signed Integer PCM

De nuevo es el archivo sml_ui_wakesound.wav el que se diferencia. He reportado esto aquí.

He decidido utilizar un par de archivos de audio con formato mp3 y wav respectivamente. En la documentación se sugiere utilizar aplicaciones del sistema operativo para reproducir los archivos de audio, específicamente play .

El comando play funciona perfectamente para archivos wav .

Para poder reproducir archivos mp3 tenemos varias opciones sox (utilizando play ) y mpg123 , entre otras. En un principio he utilizado mpg123 , sin embargo, aunque reproducía el archivo, la salida en la terminal (logs) no era muy clara. Investigando un poco me di cuenta de que play también puede reproducir mp3 aunque pensaba que no por el error que me estaba arrojando, en mis primeras pruebas:

play FAIL formats: no handler for file extension `mp3'

Lo que hice fue instalar una librería que le da a play la capacidad de reproducir mp3 . Et voilà!

$ sudo apt-get install libsox-fmt-mp3

Reading package lists... Done

Building dependency tree

Reading state information... Done

The following NEW packages will be installed:

libsox-fmt-mp3

0 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.

Need to get 52.1 kB of archives.

After this operation, 71.7 kB of additional disk space will be used.

Get:1

Fetched 52.1 kB in 2s (17.5 kB/s)

Selecting previously unselected package libsox-fmt-mp3:armhf.

(Reading database ... 155172 files and directories currently installed.)

Preparing to unpack .../libsox-fmt-mp3_14.4.1-5_armhf.deb ...

Unpacking libsox-fmt-mp3:armhf (14.4.1-5) ...

Setting up libsox-fmt-mp3:armhf (14.4.1-5) ... Reading package lists... DoneBuilding dependency treeReading state information... DoneThe following NEW packages will be installed:libsox-fmt-mp30 upgraded, 1 newly installed, 0 to remove and 0 not upgraded.Need to get 52.1 kB of archives.After this operation, 71.7 kB of additional disk space will be used.Get:1 http://ftp.cica.es/mirrors/Linux/raspbian/raspbian stretch/main armhf libsox-fmt-mp3 armhf 14.4.1-5 [52.1 kB]Fetched 52.1 kB in 2s (17.5 kB/s)Selecting previously unselected package libsox-fmt-mp3:armhf.(Reading database ... 155172 files and directories currently installed.)Preparing to unpack .../libsox-fmt-mp3_14.4.1-5_armhf.deb ...Unpacking libsox-fmt-mp3:armhf (14.4.1-5) ...Setting up libsox-fmt-mp3:armhf (14.4.1-5) ... $ play sounds/ful_alerts_notification_01.mp3

sounds/ful_alerts_notification_01.mp3:

File Size: 46.2k Bit Rate: 256k

Encoding: MPEG audio

Channels: 2 @ 16-bit

Samplerate: 48000Hz

Replaygain: off

Duration: 00:00:01.44

In:99.7% 00:00:01.44 [00:00:00.00] Out:69.1k [ | ] Hd:3.9 Clip:0

Done.

He seleccionado ful_ui_wakesound.wav y ful_alerts_notifications_01.mp3 . Los copiamos al directorio sounds/ , ubicado en el mismo directorio que el SDK, esto no es imprescindible pero es recomendable por tener todo un poco más organizado.

$ cp ful_ui_wakesound.wav ful_alerts_notification_01.mp3 /home/pi/Downloads/sounds/

$ ls -1 sounds/

ful_ui_wakesound.wav

ful_alerts_notification_01.mp3

Modificando la UI

El siguiente paso, es modificar el archivo UIManager.cpp que se encuentra en el directorio src de la aplicación de ejemplo SampleApp:

Por supuesto, puedes utilizar el editor de tu preferencia, yo prefiero vim .

$ vim avs-device-sdk/SampleApp/src/UIManager.cpp

Nota: Es importante que la aplicación no se este ejecutando al momento de hacer los cambios.

Agregar la librería cstdlib (1).

Esta librería proporciona acceso a funciones como int system(const char* command); que vamos a utilizar para ejecutar la aplicación que se encarga de reproducir el archivo de audio. Viene de stdlib.h original de C, ahora en C++.

Agregamos la siguiente línea:

#include <cstdlib>

Así: