El desafío es: generar un archivo de audio hecho de ruido blanco.
Requisitos e instrucciones:
- Su programa debe generar un archivo de audio que contenga solo ruido blanco, lo que significa que su intensidad es la misma para todas las frecuencias (razonables) y no nulas [vea un diagrama de ejemplo ];
- Uno debe poder reproducir el archivo de audio en la última versión de VLC [al momento de escribir su respuesta];
- El programa no necesita aleatoriedad,
rand
funciones o lectura criptográficamente fuertes,/dev/rand
está bien; - El programa debe poder generar al menos 1 hora de audio, al menos en teoría (lo que significa que las limitaciones del sistema como el tamaño máximo de archivos no se aplican);
- Su puntaje es el número de bytes en su código fuente, más todos los bonos que aplican;
- Usar cualquier biblioteca externa de terceros está bien;
- El programa debe funcionar sin acceso a Internet.
Los bonos son:
- -15%: permite especificar el formato del archivo de audio (al menos dos opciones; el número de opciones posibles no cambia la puntuación);
- -10%: permite especificar la duración del archivo de audio;
- -5%: permite especificar la tasa de bits del archivo de audio.
La configuración se puede almacenar en variables, archivos o como parámetros de línea de comando, según su elección. Los porcentajes se calculan a partir del número original de bytes, antes de que se aplique cualquier bonificación.
Respuestas:
MATLAB, 25
escribe un nuevo archivo WAV en el disco llamado
a
. Tiene una frecuencia de muestreo de 8 kHz y 16 bits por muestra en formato entero con signo. Los datos de origen se distribuyen uniformemente en el intervalo[0,1]
, que se asigna al intervalo[0,32767]
después de la conversión a formato entero.MATLAB, 28-4 (10% + 5%) = 24
No estoy seguro de lo que significaba el OP sobre cómo se podrían almacenar las configuraciones en las variables, pero lo interpreté de una manera favorable para este caso. Asumiendo que:
La velocidad de bits deseada (en bits / segundo) la proporciona el usuario en la variable
b
. Los bits por muestra están codificados en 16.La duración deseada del archivo (en muestras) se da en la variable
d
.El resultado es:
MATLAB, 16-4 (15% + 10%) = 12
Agregando otra capa de sordidez en busca de bonos, hago otra suposición: la función deseada para usar para generar el archivo debe especificarse en la variable
f
. Entonces el código se simplifica a:Los valores permitidos para la función son:
o
Cada función hará que el fragmento anterior escriba un archivo del formato apropiado (WAV o
.au
) a una frecuencia de muestreo de 8 kHz con la duración especificada. Quité la bonificación por la especificación de la tasa de bits aquí, porque el valorauwrite
predeterminado es 8 bits por muestra en lugar de 16 como lowavwrite
hace. No veo una manera de armonizar los dos sin usar más personajes.fuente
Bash, 34
Si no desea "aleatoriedad" del disco duro, (mucho más lento)
SPIN, 28
fuente
/dev
.Mathematica 52-5 = 47
g
exporta un archivo .wav de ruido blanco des
segundos y 8000 bps.Ejemplo: se exporta un archivo de ruido blanco de 6 segundos.
fuente
Supercollider, 89 - 10% = 80.1 bytes
Lamentablemente, a pesar de haber sido creado deliberadamente para la generación de sonido / audio, este lenguaje no va a ganar aquí. Pero es la primera aparición de Supercollider en Code Golf, ¡así que es genial!
Este envío se pierde principalmente porque la configuración de la grabación y su realización es un proceso detallado debido al diseño cliente / servidor de este lenguaje. Aún así, es un lenguaje genial con mucho poder en muy poco código cuando le pides que haga cosas más complejas que el simple ruido blanco.
La duración del archivo se establece cambiando el valor de wait (). Podría ponerlo en una variable, pero realmente no tiene sentido, ya que Supercollider no tiene ningún estándar para hablar. La interactividad está en manipular el código en vivo mientras el servidor todavía está jugando. Esencialmente, el IDE es la E / S (a menos que cree una IU para su creación).
Aquí está la versión de golf:
Aquí hay una versión de golf con la opción de grabar en aiff o wav, y especificar un formato de muestra (int16, int8 y float son todas las opciones). Desafortunadamente, incluso con todos los bonos, la versión anterior tiene mejores resultados. Esto sería 139-30% = 97.3 bytes.
Y aquí hay una versión no protegida de este último, para que pueda ver lo que está sucediendo.
fuente
Bash + ALSA, puntuación: 44 (52 caracteres - (10% + 5%) bonificaciones)
Más largo que la otra
bash
respuesta, pero acepta duración y tasa de bits. También agrega un encabezado razonablemente correcto al archivo, por lo que debe ser razonablemente portátil:Guardar como un script,
chmod +x
y ejecutar:Tenga en cuenta que la salida .wav es stdout, por lo que debe redirigirse a un archivo.
fuente
C
127115 bytesLa mayoría del código escribe el encabezado para un archivo * .au. Esto imprime un archivo de sonido pseudoaleatorio a la salida estándar.
La frecuencia de muestreo se puede ajustar cambiando el
8000
.La duración se puede ajustar presionando
ctrl-c
cuando quieras parar :-)fuente
JavaScript, 167 bytes
PRECAUCIÓN: Disminuya el volumen antes de ejecutar. El ruido blanco es desagradable
No genere archivos, quizás no sea lo que se esperaba.
Hack de -4 bytes de reproducción de ruido solo en el canal izquierdo
fuente