1. Introducción
En algunos escenarios, es necesario usar periféricos como IIS del microcontrolador para reproducir datos de audio de onda sinusoidal. Este artículo presenta un "método estúpido" para generar datos de punto fijo de onda sinusoidal de frecuencia fija y amplitud fija, registrar y resumir para aprender y usar.
Introducción en dos pasos
总体步骤概述:
1,使用Audition生成制定波形,并转成pcm格式;
2,写个main函数将所需要的数据读取并打印,然后运行重定向到txt中;
3,将txt中的数据复制到IIS的播放buffer中进行播放即可;
Este artículo utiliza una señal sinusoidal con una frecuencia de muestreo de 48K, una amplitud de -6db y una frecuencia de 1KHz como ejemplo.
2.1 Use Audition para generar la forma de onda especificada y convertirla al formato pcm
Abra Audition, genere un tono:
cree un nuevo archivo de audio, haga clic en Aceptar:
establezca la frecuencia y la amplitud de la señal de onda. Inicio:
establezca la frecuencia y la amplitud del final de la señal de onda:
haga clic en "Aceptar". listo:
use la tecla de acceso directo de audición "Alt+Z" para ver la frecuencia de la señal de forma de onda generada, haga clic en "Escanear selección" para ver que la frecuencia de los canales izquierdo y derecho es de 1 KHz: para convertir los datos de punto flotante actuales en datos
fijos -punto de datos, utilice la tecla de método abreviado "Ctrl + S", guarde el archivo en formato .pcm y guárdelo en la ruta especificada:
Hasta ahora, nuestros archivos fuente de audio han sido generados y preparados.
2. Escriba una función principal para leer e imprimir los datos requeridos y luego redirigirlo a txt
El código de función principal es el siguiente:
aquí IN_32BITPCM_FILE usa el archivo pcm recién generado;
DATA_SAMPLE_LEN se establece en 96, porque el período de frecuencia de 1KHz es 1ms, el número de puntos de muestreo de 48K de frecuencia de muestreo es 1ms es 48, y porque es estéreo, así que lea aquí Tome 96 puntos de muestreo.
#include <stdio.h>
#define IN_32BITPCM_FILE "-6db_1K_48KSr.pcm"
#define READ_DATA_SAMPLE_LEN 96
int main()
{
int ret = -1;
FILE *fp = NULL;
int buffer[READ_DATA_SAMPLE_LEN] = {
0};
fp = fopen(IN_32BITPCM_FILE,"rb");
if(fp == NULL) {
printf("%s: open file failed \n",__func__);
return -1;
}
fseek(fp,0,SEEK_SET);
ret = fread(buffer,sizeof(char),READ_DATA_SAMPLE_LEN*sizeof(buffer[0]),fp);
if(ret <=0 ) {
printf("%s: ERROR:read file data failed \n",__func__);
fclose(fp);
return -1;
}
for(int i=0; i< READ_DATA_SAMPLE_LEN; i++){
printf("0x%08X, ", buffer[i]);
if(((i+1)%8) == 0){
printf("\n");
}
}
fclose(fp);
return ret;
}
Abra MINGW64 para compilar la función principal en este momento y genere un archivo .exe de manera predeterminada:
ejecute un archivo .exe y redirija el resultado de la impresión a test.txt:
abra test.txt para ver los datos de punto fijo de onda sinusoidal generados y encuentre el datos que queremos Ya perfectamente ordenados:
2.3 A continuación, copie los datos en la matriz especificada
Observaciones: para hacer coincidir los datos generados con el búfer de la reproducción de audio, aquí puede copiar algunas copias más de los datos del ciclo y luego hacer un bucle para obtener los datos de la matriz que almacena los datos que generan el ciclo completo y copiar a la matriz de búfer de reproducción de audio.
tres, resumen
Este artículo presenta principalmente un método estúpido para generar ondas sinusoidales de datos de punto fijo como referencia. El seguimiento presentará cómo usar el algoritmo CORDIC para generar formas de onda sinusoidales de varias frecuencias, amplitudes y frecuencias de muestreo. Bienvenido a discutir e intercambiar ~