¿Hay una manera de convertir los datos PCM a PWM impulsion para que pueda enviar un microcontrolador de sello básico para reproducir audio en un altavoz externo?
(sin usar un IC)
Convierta su archivo de sonido en un archivo WAV:
mplayer -ao pcm music.mp3
Cree una versión de 8 bits mono sin firmar a la frecuencia de muestreo deseada:
sox audiodump.wav -c 1 -r 8000 -u -1 converted.wav
Convierta las muestras en un archivo de encabezado C (obtenga wav2c ):
wav2c converted.wav sounddata.h sounddata
(Para tu sello BASIC, necesitarás convertir esta matriz a algún otro formato).
Luego, en su aplicación, debe leer una muestra de la matriz cada vez que caduque la duración de la frecuencia de muestreo y transmitirla desde su pin de PWM.
Para generar muestras RAW desde un archivo de audio, puede usar mplayer
mplayer -af resample=48000,channels=2:2:0:1:0:0,format=s16le
-ao pcm:nowaveheader:file=outfile.raw
infile.mp3
Esto genera muestras de little-endian en bruto de 16 bits a outfile.raw
. Luego puede proceder como sugirió Joby (solo use una herramienta bin2c, y no wav2c).
He intentado realizar dicho procedimiento antes (leí Enide! - Reproductor de sonido PIC (PCM para Convertidor de PWM) ), pero no regonice el sonido original.
Llamé a la declaración: pin PWM, deber, ciclos, que "convierte un valor digital a salida analógica a través de la modulación de ancho de pulso, donde Ciclos es una variable / constante (0-65535) que especifica un aproximado número de milisegundos de salida PWM ".
Esto significa que solo puedo enviar una muestra por milisegundo. Así que mi frecuencia de muestreo debería ser 1000 Hz. ¿Es cierto?
Me pregunto por qué no reconocí el sonido. Tal vez se deba a la forma en que convertí el archivo WAV en mi computadora.
Lea otras preguntas en las etiquetas microcontroller pwm wave