Sistema Embarcado LockWise
Sistema de fechadura inteligente com autenticação por voz, controle MQTT e aplicativo móvel
Carregando...
Procurando...
Nenhuma entrada encontrada
Referência ao ficheiro audio_stream.c
#include "audio_common.h"
#include "audio_element.h"
#include "audio_hal.h"
#include "audio_pipeline.h"
#include "audio_stream.h"
#include "board.h"
#include "config.h"
#include "driver/gpio.h"
#include "esp_crt_bundle.h"
#include "esp_heap_caps.h"
#include "esp_http_client.h"
#include "esp_log.h"
#include "esp_timer.h"
#include "freertos/queue.h"
#include "freertos/semphr.h"
#include "freertos/task.h"
#include "i2s_stream.h"
#include "lock.h"
#include "math.h"
#include "mqtt.h"
#include "raw_stream.h"
#include "system_utils.h"
#include <string.h>
#include <sys/time.h>
#include <time.h>

Macros

#define AUDIO_SAMPLE_RATE   44100
 Taxa de amostragem do áudio em Hz.
 
#define AUDIO_BITS   16
 Número de bits por amostra de áudio.
 
#define AUDIO_CHANNELS   1
 Número de canais de áudio (mono)
 
#define VAD_FRAME_MS   30
 Duração do frame VAD em ms.
 
#define VAD_SAMPLES   ((AUDIO_SAMPLE_RATE * VAD_FRAME_MS) / 1000.)
 Número de amostras por frame VAD.
 
#define VAD_TRIGGER_FRAMES   6
 Número de frames consecutivos para acionar VAD.
 
#define VAD_COOLDOWN_MS   2000
 Tempo de cooldown após acionamento VAD em ms.
 
#define BYTES_PER_SEC   (AUDIO_SAMPLE_RATE * AUDIO_CHANNELS * (AUDIO_BITS / 8))
 Bytes por segundo de áudio.
 

Funções

static void audio_init_pipeline (void)
 Inicializa o pipeline de áudio ESP-ADF.
 
static void vad_task (void *arg)
 Tarefa de detecção de atividade de voz (VAD).
 
static void http_stream_task (void *arg)
 Tarefa de streaming HTTP de áudio.
 
void audio_stream_task (void *pvParameters)
 Tarefa principal de controle do streaming de áudio.
 
void audio_stream_init (void)
 Inicializa a tarefa de streaming de áudio.
 
void audio_stream_send_cmd (audio_stream_cmd_t cmd)
 Envia um comando para a tarefa de streaming de áudio.
 

Variáveis

TaskHandle_t idle_blink_task
 Handle da tarefa de piscar idle (acessível de audio_stream.c)
 
audio_board_handle_t g_board_handle
 Handle global da placa de áudio ESP-ADF.
 
static const char * TAG = "\033[1mLOCKWISE:\033[92mAUDIO\033[0m\033[92m"
 
static QueueHandle_t audio_stream_queue
 Fila para comandos de streaming de áudio.
 
static audio_pipeline_handle_t pipeline
 Handle do pipeline de áudio ESP-ADF.
 
static audio_element_handle_t i2s
 Elemento I2S do pipeline de áudio.
 
static audio_element_handle_t raw
 Elemento raw do pipeline de áudio.
 
static volatile bool streaming_enabled = false
 Flag indicando se o streaming está habilitado.
 
static volatile bool recording_active = false
 Flag indicando se a gravação está ativa.
 
static SemaphoreHandle_t stream_gate
 Semáforo para controle de gate do streaming.
 
static size_t pcm_bytes_sent = 0
 Contador de bytes PCM enviados.
 
static int64_t last_stream_us = 0
 Timestamp do último streaming em microssegundos (não usado)
 
static TaskHandle_t fast_blink_task = NULL
 Handle da tarefa de piscar rápido do LED.
 

Documentação das macros

◆ AUDIO_BITS

#define AUDIO_BITS   16

Número de bits por amostra de áudio.

◆ AUDIO_CHANNELS

#define AUDIO_CHANNELS   1

Número de canais de áudio (mono)

◆ AUDIO_SAMPLE_RATE

#define AUDIO_SAMPLE_RATE   44100

Taxa de amostragem do áudio em Hz.

◆ BYTES_PER_SEC

#define BYTES_PER_SEC   (AUDIO_SAMPLE_RATE * AUDIO_CHANNELS * (AUDIO_BITS / 8))

Bytes por segundo de áudio.

◆ VAD_COOLDOWN_MS

#define VAD_COOLDOWN_MS   2000

Tempo de cooldown após acionamento VAD em ms.

◆ VAD_FRAME_MS

#define VAD_FRAME_MS   30

Duração do frame VAD em ms.

◆ VAD_SAMPLES

#define VAD_SAMPLES   ((AUDIO_SAMPLE_RATE * VAD_FRAME_MS) / 1000.)

Número de amostras por frame VAD.

◆ VAD_TRIGGER_FRAMES

#define VAD_TRIGGER_FRAMES   6

Número de frames consecutivos para acionar VAD.

Documentação das funções

◆ audio_init_pipeline()

static void audio_init_pipeline ( void  )
static

Inicializa o pipeline de áudio ESP-ADF.

Configura os elementos I2S e raw, registra-os no pipeline e inicia o pipeline.

◆ audio_stream_init()

void audio_stream_init ( void  )

Inicializa a tarefa de streaming de áudio.

Esta função configura o pipeline de áudio, inicializa as tarefas de VAD (Voice Activity Detection) e streaming HTTP, além de criar as filas e semáforos necessários para o gerenciamento do áudio.

◆ audio_stream_send_cmd()

void audio_stream_send_cmd ( audio_stream_cmd_t  cmd)

Envia um comando para a tarefa de streaming de áudio.

Parâmetros
cmdComando a ser enviado (AUDIO_STREAM_START ou AUDIO_STREAM_STOP).

◆ audio_stream_task()

void audio_stream_task ( void *  pvParameters)

Tarefa principal de controle do streaming de áudio.

Parâmetros
pvParametersParâmetros da tarefa (não usado).

Processa comandos da fila para iniciar ou parar streaming de áudio.

◆ http_stream_task()

static void http_stream_task ( void *  arg)
static

Tarefa de streaming HTTP de áudio.

Parâmetros
argParâmetros da tarefa (não usado).

Grava áudio por um tempo configurado, envia via HTTP POST para o back-end e processa a resposta.

◆ vad_task()

static void vad_task ( void *  arg)
static

Tarefa de detecção de atividade de voz (VAD).

Parâmetros
argParâmetros da tarefa (não usado).

Executa detecção contínua de voz baseada em RMS, acionando streaming quando voz é detectada.

Documentação das variáveis

◆ audio_stream_queue

QueueHandle_t audio_stream_queue
static

Fila para comandos de streaming de áudio.

◆ fast_blink_task

TaskHandle_t fast_blink_task = NULL
static

Handle da tarefa de piscar rápido do LED.

◆ g_board_handle

audio_board_handle_t g_board_handle
extern

Handle global da placa de áudio ESP-ADF.

◆ i2s

audio_element_handle_t i2s
static

Elemento I2S do pipeline de áudio.

◆ idle_blink_task

TaskHandle_t idle_blink_task
extern

Handle da tarefa de piscar idle (acessível de audio_stream.c)

◆ last_stream_us

int64_t last_stream_us = 0
static

Timestamp do último streaming em microssegundos (não usado)

◆ pcm_bytes_sent

size_t pcm_bytes_sent = 0
static

Contador de bytes PCM enviados.

◆ pipeline

audio_pipeline_handle_t pipeline
static

Handle do pipeline de áudio ESP-ADF.

◆ raw

audio_element_handle_t raw
static

Elemento raw do pipeline de áudio.

◆ recording_active

volatile bool recording_active = false
static

Flag indicando se a gravação está ativa.

◆ stream_gate

SemaphoreHandle_t stream_gate
static

Semáforo para controle de gate do streaming.

◆ streaming_enabled

volatile bool streaming_enabled = false
static

Flag indicando se o streaming está habilitado.

◆ TAG

const char* TAG = "\033[1mLOCKWISE:\033[92mAUDIO\033[0m\033[92m"
static