videos - youtube musica gratis
¿Cómo sintetizar programáticamente la música? (8)
Echa un vistazo a Boodler , la "herramienta de Boodler sonoro de código abierto".
Nota: esta NO es una pregunta de "música para programación".
Mi pregunta es:
Quiero escribir un programa de computadora que pueda sintetizar ritmos repetitivos (que puedo controlar a través de la línea de comandos) para que la música llegue a mis oídos.
Tengo curiosidad si existen herramientas para hacer esto (y si no, qué bibliotecas usar).
La idea general es:
1) la computadora sabe lo que estoy haciendo (por los comandos que estoy ejecutando, ya sea que esté en Vim, si mis programas se están compilando, etc.)
2) la computadora conoce mi estado de ánimo general (recuento de fallas del compilador debido a ''make''; número de segfaults, códigos de salida distintos a cero; número de confirmaciones de git)
3) la computadora conoce el estado de mi cerebro (según la velocidad de escritura; estoy programando o pensando)
Me encantaría utilizarlos para algún tipo de bio-feedback para controlar la música.
Esta es también la razón por la que la música debe sintetizarse mediante programación (en lugar de solo algunas pistas existentes).
No sé cómo lo haría, pero podría echar un vistazo a Bootchart , que hace un montón de monitoreo de procesos. Es posible que pueda ser útil para averiguar qué está sucediendo en este momento.
Para el lado de la música real de las cosas, echa un vistazo a Chuck . Te permite sintetizar sonidos mediante programación. Here''s un video de YouTube que muestra un ejemplo de Chuck en el trabajo. Otro video que destaca cómo funciona Chuck y cómo producir sonidos básicos.
Tienes que :
recopila los datos de entrada en los que basarás tu música.
Decide cómo esas variables de entrada afectarán la música.
idear algoritmos para crear melodías y ritmos
codifíquelo todo en un paquete de sintetizador musical
Sus elementos "conozca su estado de ánimo" y "conozca su estado cerebral", probablemente sean problemas de investigación abiertos que valgan la pena de un doctorado si tuviera que hacer un progreso significativo en ellos.
Una vez que llegue a ese último paso, sugiero Csound .
Csound es un sistema de diseño de sonido, síntesis musical y procesamiento de señales, que proporciona instalaciones para la composición y el rendimiento en una amplia gama de plataformas. No se limita a ningún estilo de música, ya que se ha utilizado durante muchos años en la creación de música clásica, pop, tecno, ambiental, experimental y (por supuesto) informática, así como música para cine y televisión.
Como nota aparte, una vez tuve la visión de que la sala de servidores debería reflejar ambientalmente el estado de los servidores. Así que instalé chrips de cricket con frecuencia basada en el promedio de carga, aullidos de lobos para eventos de inicio de sesión seguidos del registro del sistema, y búhos saltones para (en ese momento relativamente poco frecuentes) visitas a páginas web ...
En ese caso, fue simplemente abofeteado en Python con un raspado de registro básico ...
JFugue es una biblioteca de código abierto (Java / JVM) para "programar música sin las complejidades de MIDI". ver artículo
Es fácil de comenzar y puede servir como base para su programa, tanto para ritmos como para melodías.
Music as Data es un proyecto muy interesante, aparentemente inspirado en SuperCollider y Chuck.
Está diseñado específicamente para que sea fácil de hackear / experimentar con en vivo, básicamente un kit de herramientas para crear DSL musicales.
archaeopteryx es probablemente bastante cerca de la parte de la generación del ritmo.
Canon en d en c
Resultado: https://www.youtube.com/watch?v=JISozfHATms
C Principal:
#include <math.h>
#include <stdint.h>
#include <stdio.h>
#include <stdlib.h>
typedef uint16_t point_type_t;
double PI2;
void write_ampl(FILE *f, point_type_t ampl) {
uint8_t bytes[2];
bytes[0] = ampl >> 8;
bytes[1] = ampl & 0xFF;
fwrite(bytes, 2, sizeof(uint8_t), f);
}
/* https://en.wikipedia.org/wiki/Piano_key_frequencies */
double piano_freq(unsigned int i) {
return 440.0 * pow(2, (i - 49.0) / 12.0);
}
/* Chord formed by the nth note of the piano. */
point_type_t piano_sum(unsigned int max_ampl, unsigned int time,
double sample_freq, unsigned int nargs, unsigned int *notes) {
unsigned int i;
double sum = 0;
for (i = 0 ; i < nargs; ++i)
sum += sin(PI2 * time * piano_freq(notes[i]) / sample_freq);
return max_ampl * 0.5 * (nargs + sum) / nargs;
}
enum notes {
A0 = 1, AS0, B0,
C1, C1S, D1, D1S, E1, F1, F1S, G1, G1S, A1, A1S, B1,
C2, C2S, D2, D2S, E2, F2, F2S, G2, G2S, A2, A2S, B2,
C3, C3S, D3, D3S, E3, F3, F3S, G3, G3S, A3, A3S, B3,
C4, C4S, D4, D4S, E4, F4, F4S, G4, G4S, A4, A4S, B4,
C5, C5S, D5, D5S, E5, F5, F5S, G5, G5S, A5, A5S, B5,
C6, C6S, D6, D6S, E6, F6, F6S, G6, G6S, A6, A6S, B6,
C7, C7S, D7, D7S, E7, F7, F7S, G7, G7S, A7, A7S, B7,
C8,
};
int main(void) {
FILE *f;
PI2 = 2 * acos(-1.0);
const double SAMPLE_FREQ = 44100;
point_type_t ampl;
point_type_t max_ampl = UINT16_MAX;
unsigned int t, i;
unsigned int samples_per_unit = SAMPLE_FREQ * 0.375;
unsigned int *ip[] = {
(unsigned int[]){4, 2, C3, E4},
(unsigned int[]){4, 2, G3, D4},
(unsigned int[]){4, 2, A3, C4},
(unsigned int[]){4, 2, E3, B3},
(unsigned int[]){4, 2, F3, A3},
(unsigned int[]){4, 2, C3, G3},
(unsigned int[]){4, 2, F3, A3},
(unsigned int[]){4, 2, G3, B3},
(unsigned int[]){4, 3, C3, G4, E5},
(unsigned int[]){4, 3, G3, B4, D5},
(unsigned int[]){4, 2, A3, C5},
(unsigned int[]){4, 3, E3, G4, B4},
(unsigned int[]){4, 3, F3, C4, A4},
(unsigned int[]){4, 3, C3, G4, G4},
(unsigned int[]){4, 3, F3, F4, A4},
(unsigned int[]){4, 3, G3, D4, B4},
(unsigned int[]){2, 3, C4, E4, C5},
(unsigned int[]){2, 3, C4, E4, C5},
(unsigned int[]){2, 3, G3, D4, D5},
(unsigned int[]){2, 3, G3, D4, B4},
(unsigned int[]){2, 3, A3, C4, C5},
(unsigned int[]){2, 3, A3, C4, E5},
(unsigned int[]){2, 2, E3, G5},
(unsigned int[]){2, 2, E3, G4},
(unsigned int[]){2, 3, F3, A3, A4},
(unsigned int[]){2, 3, F3, A3, F4},
(unsigned int[]){2, 3, C3, E4},
(unsigned int[]){2, 3, C3, G4},
(unsigned int[]){2, 3, F3, A3, F4},
(unsigned int[]){2, 3, F3, A3, C5},
(unsigned int[]){2, 3, G3, B3, B4},
(unsigned int[]){2, 3, G3, B3, G4},
(unsigned int[]){2, 3, C4, E4, C5},
(unsigned int[]){1, 3, C4, E4, E5},
(unsigned int[]){1, 3, C4, E4, G5},
(unsigned int[]){1, 2, G3, G5},
(unsigned int[]){1, 2, G3, A5},
(unsigned int[]){1, 2, G3, G5},
(unsigned int[]){1, 2, G3, F5},
(unsigned int[]){3, 3, A3, C4, E5},
(unsigned int[]){1, 3, A3, C4, E5},
(unsigned int[]){1, 3, E3, G3, E5},
(unsigned int[]){1, 3, E3, G3, F5},
(unsigned int[]){1, 3, E3, G3, E5},
(unsigned int[]){1, 3, E3, G3, D5},
};
f = fopen("canon.raw", "wb");
for (i = 0; i < sizeof(ip) / sizeof(int*); ++i) {
unsigned int *cur = ip[i];
unsigned int total = samples_per_unit * cur[0];
for (t = 0; t < total; ++t) {
ampl = piano_sum(max_ampl, t, SAMPLE_FREQ, cur[1], &cur[2]);
write_ampl(f, ampl);
}
}
fclose(f);
return EXIT_SUCCESS;
}
Generar canon.raw
:
gcc -std=c99 -o main main.c -lm
./main
Juega canon.raw
directamente:
sudo apt-get install ffmpeg
ffplay -autoexit -f u16be -ar 44100 -ac 1 canon.raw
o conviértalo a un formato de audio más común y luego juegue con un reproductor de audio más común:
ffmpeg -f u16be -ar 44100 -ac 1 -i canon.raw canon.flac
vlc canon.flac
o convertirlo en un video para YouTube:
wget -O canon.png https://upload.wikimedia.org/wikipedia/commons/thumb/3/35/The_C_Programming_Language_logo.svg/564px-The_C_Programming_Language_logo.svg.png
ffmpeg -loop 1 -y -i canon.png -i canon.flac -shortest -acodec copy -vcodec vp9 canon.mkv
como se explica: https://superuser.com/questions/1041816/combine-one-image-one-audio-file-to-make-one-video-using-ffmpeg/1041818#1041818
Aquí hay una vista más orientada a la física de la generación de audio: ¿Cómo se representa el audio con números?
Probado en Ubuntu 18.04. GitHub aguas arriba .