Audio

Dans cette partie, nous verrons l'ajout de la bibliothèque pour l'utilisation du codec audio WM8994 ainsi que son utilisation. La communication avec le codec se fera à l'aide de l'interface SAI.

Documentation

Codec WM8994

Un Codec est un dispositif matériel permettant de mettre en oeuvre l'encode ou le décodage d'un flux de données numérique, en vue d'une transmission ou d'un stockage.

Codec WM8994

I/O Codec WM8994

Celui-ci présente

Lien doc WM8994

SAI

Diagramme SAI

Diagramme SAI

Lien doc SAI

DMA

Lien doc DMA

Ajout de la bibliothèque

On active l'interface SAI dans Multimedia avec une liaison Maitre et une laison Esclave synchrone.

Diagramme SAI

Les requêtes se font alors avec le DMA avec la configuration suivante

Diagramme SAI

Une fois tout ceci fait, on peut rajouter les headers et fichiers sources dans notre projet.

Fonctions principales

Initialisations

Initialiser l'enregistrement

uint8_t BSP_AUDIO_IN_InitEx (
    uint16_t InputDevice    /* INPUT_DEVICE_DIGITAL_MICROPHONE_2 or INPUT_DEVICE_INPUT_LINE_1 */
    uint32_t AudioFreq,     /* Audio frequency to be configured for the SAI peripheral */
    uint32_t BitRes,        /* Audio frequency to be configured */
    uint32_t ChnlNbr        /* Channel number */
)

Initialiser le périphérique de sortie

uint8_t BSP_AUDIO_OUT_Init (
    uint16_t OutputDevice,  /* OUTPUT_DEVICE_SPEAKER, OUTPUT_DEVICE_HEADPHONE,
                            or OUTPUT_DEVICE_BOTH */
    uint8_t Volume,         /* Initial volume level (from 0 (Mute) to 100 (Max)) */
    uint32_t AudioFreq      /* Audio frequency used to play the audio stream */
    )

Gestion du stream audio

Jouer un stream audio depuis un buffer de données

uint8_t BSP_AUDIO_OUT_Play (
    uint16_t *pBuffer,  /* Pointer to the buffer */
    uint32_t Size)      /* Number of audio data in BYTES unit */
*** Dans la mémoire, les octets sont alternés entre canal gauche puis canal droit

Pause

uint8_t BSP_AUDIO_OUT_Pause(void)

Resume

uint8_t BSP_AUDIO_OUT_Resume(void)

Arrêt

uint8_t BSP_AUDIO_OUT_Stop(
    uint32_t Option 
    /*  - CODEC_PDWN_SW: for software power off (by writing registers).
                            Then no need to reconfigure the Codec after power on.
        - CODEC_PDWN_HW: completely shut down the codec (physically).
                            Then need to reconfigure the Codec after power on. */
    )

Régler le volume de sortie

uint8_t BSP_AUDIO_OUT_SetVolume(
    uint8_t Volume  /* Volume level to be set in percentage from 0% to 100% (0 for
                       Mute and 100 for Max volume level) */
)

Callbacks de transfert SAI

void HAL_SAI_TxCpltCallback(
    SAI_HandleTypeDef *hsai /* SAI handle */
)
void HAL_SAI_TxHalfCpltCallback(
    SAI_HandleTypeDef *hsai /* SAI handle */
)

Callbacks d'enregistrement

void BSP_AUDIO_IN_HalfTransfer_CallBack(void)
void BSP_AUDIO_IN_TransferComplete_CallBack(void)

Code erreur

AUDIO_OK                            ((uint8_t)0)
AUDIO_ERROR                         ((uint8_t)1)
AUDIO_TIMEOUT                       ((uint8_t)2)