Cada tipo de datos ocupa un tamaño fijo y no puedes variarlo, lo que puedes hacer es cambiar el tipo de datos, por ejemplo de float (8 bytes) a single (4 bytes); con esto, lógicamente, no podrás representar los mismos valores.
Si no te vale ninguno de los tipos de datos que hay disponibles podrías implementar algún tipo de
algoritmo de compresión o (más sencillo) escalar los datos.
Para lo segundo simplemente tienes que multiplicar el array que generas por un número y convertirlo a array de enteros con o sin signo, el número por el que multipliques dependerá de la señal que generas, por ejemplo si el máximo de tu señal es 1 multiplicas por 255 para aprovechar todo el rango disponible (la mitad si trabajas con signo). En la recepción harías lo contrario: 'desescalar' el valor y convertirlo a flotante. Los problemas de este método son que perderás mucha resolución y que el rango de la señal de entrada debe ser pequeño, la ventaja simplemente que es sencillo.