Big Data |Machine Learning| Seguridad Informática | Diseño Web | Música Algorítmica | Live Coding
Codificación Iso 8859-1 a UTF-8
Cáculo MCD y MCM con Python sin librerías
Como recordatorio, las definiciones de MCD y MCM.
El máximo común divisor (MCD) de dos o más números naturales o enteros (no números con decimales) es el número más grande que les divide
El mínimo común múltiplo (MCM) de dos o más números naturales o enteros (no números con decimales) es el número más pequeño que es múltiplo de ambos.
#!/usr/bin/env python3 # Calculo del máximo común divisor (MCD) y minimo común múltiplo (MCM) de dos números def calculo_MCD_MCM(a,b): # La función recibe dos números enteros, se haya el mayor y el menor if a > b: max = a min = b else: max = b min = a # Buscamos el MCD partiendo del número menor, en orden descendente, el primero que # encuentre será el MCD y no necesitamos buscar más. for i in range(min,0,-1): if min % i == 0 and max % i == 0: MCD = i break # ya conocemos el MCD, descubrir el MCM es sencillo, solo necesitamos # dividir el resultado de multiplicar ambos números entre MCD MCM = (min * max)/MCD # Mostramos los resultados por pantalla print(' El Máximo común divisor y el Minimo común múltiplo de',min,'y',max,'\n son respectivamente', MCD,MCM,sep=' ') a = int(input(' primer numero para el calculo ')) b = int(input(' segundo numero para el calculo ')) calculo_MCD_MCM(a,b)
20 Puertas lógicas con dos entradas
Como dice el titulo del post, se pueden crear 20 puertas lógicas, de dos entradas, mediante la conexión de las puertas más conocidas, la puerta And ( & ), la puerta Or( | ), y la puerta Xor( ^ ) más el conector Not aplicado a una puerta o un conector.
A continuación mostraremos el código de cada una de ellas, en python3, comenzando por las tres fundamentales, And, Or y Xor, mostrando después de cada una, la salida que ofrece, a esas puertas no usuales las llamaremos Esp.
La puerta Xor, es de uso corriente en la vida cotidiana, " Si es Miércoles o Viernes como pescado", dado que no puede ser Miércoles y Viernes a la vez, esa seria la puerta indicada para resolver la operación booleana.
Como es bien conocido el conector Not, invierte el valor de la entrada o el resultado, si es True lo convierte en False y viceversa. Para lograr las mismas salidas de las denominadas puertas especiales, se pueden utilizar también otro tipo de conexiones.
boolean = [True, False] print('Puerta Lógica And\n') print('Val I','Val J','Res.','\n',sep='\t',) for i in boolean: for j in boolean: print(i, j, i and j, sep ='\t')Puerta Lógica And Val I Val J Res. True True True True False False False True False False False False
print('\nPuerta Lógica Or\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i or j, sep ='\t')Puerta Lógica Or Val I Val J Res. True True True True False True False True True False False False
print('\nPuerta Lógica Xor\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i ^ j, sep ='\t')Puerta Lógica Xor Val I Val J Res. True True False True False True False True True False False False
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i and (i ^ j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False True False True False False False False
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, j and (i ^ j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False False False True True False False False
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not i and not j, sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False False False True False False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i or (i and j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True True True False True False True False False False False
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, j or (i and j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True True True False False False True True False False False
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not (i ^ j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True True True False False False True False False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not j, sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False True False True False False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, not i, sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False False False True True False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,i or not j, sep ='\t')Puerta Lógica Esp Val I Val J Res. True True True True False True False True False False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,j or not i, sep ='\t')Puerta Lógica Esp Val I Val J Res. True True True True False False False True True False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,not (i and j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False True False True True False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j,(i ^ j) or not(i ^ j), sep ='\t')Puerta Lógica Esp Val I Val J Res. True True True True False True False True True False False True
print('\nPuerta Lógica Esp\n') print('Val I','Val J','Res.','\n',sep='\t') for i in boolean: for j in boolean: print(i, j, i and not i, sep ='\t')Puerta Lógica Esp Val I Val J Res. True True False True False False False True False False False False
El Dilema del prisionero y las mascarillas Quirúrgicas o FP2
Para este supuesto he partido del uso de dos tipos de mascarillas de protección, las quirúrgicas y las Fp2 con válvula.
Las mascarilla quirúrgicas tienen como principal objetivo impedir que el portador transmita virus y bacterias a otras personas, y sirven como una ligera protección propia.
Las mascarilla fp2 con válvula tienen como principal objetivo impedir ser infectado por virus y bacterias, pero permiten que por la válvula, que permite un uso más cómodo para el portador, salgan partículas infecciosas.
En el modelo aplicado del dilema existen escenarios diferentes en función del tipo de mascara utilizado por ambas personas y del estado de contagio, las dos contagiadas, solo una de ellas, o ambas sanas.
Existen otros factores a tener en cuenta, la distancia entre las personas, y el tiempo que permanecen a esa distancia. No es lo mismo cruzarse a un metro, que estar hablando a la misma distancia durante unos minutos.
Persona A Persona B Resultado A/B Mascarilla-Salud Mascarilla-Salud Quirúrgica Sana Quirúrgica Sana No varia Quirúrgica Sana Quirúrgica Infectada No varia Quirúrgica Infectada Quirúrgica Infectada No varia FP2 Sana FP2 Sana No varia FP2 Sana FP2 Infectada No varia FP2 Infectada FP2 Infectada No varia Quirúrgica Sana FP2 Sana No varia Quirúrgica Sana FP2 Infectada Puede variar A Quirúrgica Infectada FP2 Sana No varia Quirúrgica Infectada FP2 Infectada No varia
El único caso en el que alguna de las personas puede cambiar de estado, es decir contagiarse es cuando una de ellas, usa mascarilla FP2 y contagia a la otra que usa quirúrgica.
Parece que el dilema del prisionero aconseja que el uso de la mascarilla quirúrgica, asegura mejor el beneficio común, esto es evitar el contagio.
Simple Screen Recorder Video Streaming
El perfil puede escogerse entre los tres predeterminados Live_Stream(1000kbps, 2000kbps, o 3000kbps)
La configuración para este menester es sencilla, en la pantalla de configuración, en vez de dar un nombre al archivo en el que se grabará, se introducen los parámetros que nos da la plataforma en la que vamos a realizar la emisión en directo.
En el ejemplo escribiríamos o copiaríamos rmtp://a.rmtp.youtube.com/live2/
y a continuación la clave que en la imagen viene oculta, lo más sencillo es utilizar la opción copiar y seguidamente pegarla a continuación quedando de esta forma
rmtp://a.rmtp.youtube.com/live2/aqui_la_clave.
Al ser una transmisión en directo es aconsejable tener una buena conexión, en cuanto al formato el aconsejable es flv para video, en cuanto al audio esta vez no es aconsejable el audio sin comprimir, y optaremos por mp3, acc o vorbis, y un bitrate apropiado al tipo de transmisión (musical, tutorial, etc).
En la pantalla final iniciaremos la grabación y en unos segundos, la plataforma nos informa de que ya se esta emitiendo en directo.
Para finalizar la transmisión lo haremos desde la plataforma, y seguidamente pararemos Simple Screen Recorder.
Adjunto una emisión en directo de mi canal en youtube
Simple Screen Recorder, grabación de Escritorio y Vídeo Streaming
En su página web encontraras las instrucciones para instalarlo en diferentes distribuciones Arch Linux, Debian, Fedora, Gentoo, KaOS, Mageia, NixOS, OpenSUSE, Red Had Enterprise, CentOS, Scientific Linux, Slackware, Ubuntu y derivados ( Linux Mint) y Otros.
Una configuración ejemplo sería:
Grabar pantalla completa, tasa de fotogramas 30, grabar cursor, y la fuente de audio, en mi caso utilizo Jack, y si no preciso grabar el audio del micrófono, Record System Speakers
En la siguiente pantalla el tipo de grabación que es muy configurable, mi preferida es contenedor Matroska, codec de video H.264, rate 23, preset ultrafast y el codec de audio sin comprimir.
La elección de estos parámetros es que lo que me interesa es grabar con la mayor calidad posible, aunque el vídeo ocupe más espacio, pero con el menor consumo de cpu posible, hay que tener en cuenta que en función de lo que estemos haciendo, ya estamos haciendo consumo de cpu.
Una vez que hallamos terminado la grabación, podremos convertirlo a un formato que ocupe menos espacio para alojarlo por ejemplo en youtube, para ese proceso podremos utilizar ffmpeg, por ejemplo
o esta si no tenemos instalado el codec libfdk_acc
ffmpeg -i Escritorio.mkv -c:v copy -c:a aac -b:a 384k output.mp4
En la pantalla final podremos iniciar, pausar, finalizar o guardar la grabación.
En el siguiente post detallaremos como configurar Simple Screen Recorder para hacer Vídeo Streaming en Youtube, de una manera sencilla y con poco consumo de recursos.
Tutorial FoxDot 2
Etiquetas pre y code, propiedad overflow en post blogger
Para resolver este problema, hago uso de las etiquetas <pre><code>, por ese orden en las que encierro el código que previamente he escrito en mi editor favorito, cada uno tiene el o los suyos, encerrándolo a continuación con </code></pre>. De esta manera el código es mostrado tal y como lo hemos escrito, e incluso puede ser copiado para ser ejecutado sin la menor complicación.
Pero si se accede al post desde otros dispositivos diferentes a un ordenador, como pueden ser una tablet o un teléfono móvil, es corriente que el texto formateado, no se visualice correctamente. Hay entra en juego el uso de la propiedad Css overflow.
La overflow especifica si se debe recortar el contenido o agregar barras de desplazamiento cuando el contenido de un elemento es demasiado grande para caber en el área especificada y tiene los valores siguientes:
hidden - El desbordamiento se recorta y el resto del contenido será invisible.
scroll - El desbordamiento se recorta y se agrega una barra de desplazamiento para ver el resto del contenido
auto- Similar a scroll, pero agrega barras de desplazamiento solo cuando es necesario
<style>
.myo {
margin: .5em 0 1.5em;
border-bottom: 1px dotted #333333;
padding-bottom: 1.5em;
width: 100%;
overflow: auto;
}
</style>
<div class='myo>
<pre>
<code>
Este es el código
que tiene indentaciones
esta es igual
y esta es una mayor que las dos anteriores
Fin del código
</code>
</pre>
</div>
Incrustar Subtítulos en vídeos II
FFmpeg es una solución completa para grabar, convertir, editar y transmitir audio y video. Es un software de video de línea de comandos para Windows, Mac y Linux. Admite la conversión entre la mayoría de los formatos de video y audio. Admite la captura y codificación en tiempo real desde medios de transmisión, tarjetas de captura, etc. Pistas de video y audio multiplex (join) y demultipex (split) de todos los formatos de video. Editar (cortar, unir) todos los formatos de video. Filtros avanzados de video y audio. Soporte de subtítulos También se incluyen ffplay (reproductor de video básico) y ffprobe (identificador de video). Varios frontEnds / GUI están disponibles como WinFF , Avanti .
En esta segunda parte veremos la instrucción necesaria para hacer que ffmpeg incruste subtítulos con un formato diferente en cuanto al tamaño de la fuente, como al color de la misma.
ffmpeg -i video.in -vf "subtitles=archivo.srt:force_style='PrimaryColour=&H8800FFAF, FontSize=48'" -preset ultrafast video.video.out
Siendo video.in el archivo de video de entrada, video.out el archivo de video que contendrá los subtítulos, archivo.str el archivo con los subtítulos a incrustar. Con FontSize determinamos el tamaño de la fuente y ahora nos centraremos en PrimaryColour el valor &H es común para cualquier valor, 88 es el código hexadecimal para determinar la transparencia, y los seis siguientes es el codigo de color pero con la particularidad de que esta escrito al revés de como solemos utilizarlo, por ejemplo para un color rojo y una transparencia mediante el código seria 0000FF, resultando que habría que escribir &H800000FF, 80 la transparencia media y 0000FF.
En cuanto a las fuentes de las letras, el asunto se torna más complejo y dependerá mucho de las que tengamos instaladas y de la que sea la utilizada por defecto en nuestro sistema.
He escrito un script en python que genera un archivo de texto para poder usarlo como subtítulos. A tener en cuenta que la duración de los subtítulos ha de ser menor que el del vídeo, pudiendo ser usado con fines divulgativos o de ocio. En el script he configurado la duración de cada subtitulo en 5 segundos. El código del script es :
#!/usr/bin/env python3
# Crono recibe segundos muestra horas, minutos, segundos en formato 00:00:00
# Horas y Minutos son numeros enteros, posteriormente convertidos a strings
# En caso de len = 1, se antepone 0 para formato 00
def crono(v):
horas=int(v/3600)
minutos=int((v-(horas*3600))/60)
segundos=v-(horas*3600+minutos*60)
horas=str(horas)
minutos=str(minutos)
segundos=str(segundos)
if (len(horas))==1:
horas='0'+horas
if (len(minutos))==1:
minutos='0'+minutos
if (len(segundos))==1:
segundos='0'+segundos
display =horas+':'+minutos+':'+segundos+',00'
return display
# vtiempo determina la duración del subtitulo, en este caso 5 segundos (en el bucle for)
vtiempo = 0
# Texto que incluiremos para crear los subtitulos, que separamos con /
texto='Una linea de texto / otra linea de texto / otra linea de texto /
otra linea de texto / otra linea de texto / otra linea de texto /'
subtitulos=texto.split('/')
# Abrimos el archivo modo escritura, escribimos numero subtitulo,
# comienzo y fin del subtitulo y texto del mismo
archivo = open('carta.srt','w')
for i in range(len(subtitulos)):
linea1=str(i)+'\n'
linea2=crono(vtiempo)+' --> '+crono(vtiempo+5)+'\n'
archivo.write(linea1)
archivo.write(linea2)
archivo.write(subtitulos[vsubtitulo]+'\n'+'\n')
vtiempo +=5
# Cerramos el Archivo
archivo.close()
Incrustar subtitulos en videos
Autosub es una utilidad escrita en python, para el reconocimiento automático de voz y la generación de subtítulos. Toma un video o un archivo de audio como entrada, y genera un archivo de texto con la transcripción, por defecto con la extensión srt, que en un proceso posterior se puede incrustar por ejemplo al archivo de video origen.
Su uso para el Castellano no necesita más requisitos, pero si se desea crear subtítulos traduciendo del idioma original del video a otro idioma, precisa una key de Google Web Speech para generar transcripciones y es más complicado.
Pero si solo lo utilizamos para generar subtítulos en nuestro idioma, el proceso no presenta ninguna complicación, solo se precisa ejecutar por linea de comandos
autosub nombre_archivo -S es -D es
siendo es(Español) el idioma tanto de entrada como salida
El archivo con extensión srt, es en texto plano y por defecto se guarda en el mismo directorio que este activo, el formato es similar a este
00:00:03,256 --> 00:00:8,12
Este es el primer subtitulo
2
00:00:10,42 --> 00:00:15,15
Este es el segundo subtitulo
Para instalar autosub es preciso ffmpeg, y posteriormente instalar Autosub mediante pip install autosub, es decir en python2, no python3. Mas información en Autosub
Posteriormente usaremos ffmpeg para incrustar los subtítulos al video origen, generándose uno nuevo en el que estarán los subtítulos.
La instrucción para ese proceso también se realiza mediante la linea de comandos
ffmpeg -i video.in -vf subtitles=subtítulos.srt video.out
Siendo video.in el video origen, subtítulos.srt el nombre del archivo de texto en el que se encuentran los subtítulos y video.out el nombre del video que tendrá incrustados los subtítulos
Tutorial Básico FoxDot # 3
p1 >> play('X-o-')
y para hacer que se ejecute y comience a sonar, o deje de sonar, el cursor ha de estar en la linea en la que se encuentra,utilizando las combinaciones de teclas en el párrafo anterior.
Las instrucciones que siguen a continuación, detienen o hacen que solo suene, un player concreto.
p1 >> play('X-o-').stop()
p1 >> play('X-o-').solo()
Ahora abordaremos como lograr que la duración o sample por ejemplo, no sea el mismo para todos los sonidos del player. Pongamos como ejemplo
p1 >> play('X--o--')
porque lo que deseamos es que X y o, se ejecuten cada un tiempo, mientras que los guiones (-), deseamos que se ejecuten cada medio tiempo.
p1 >> play('X--o--', dur=[1,1/2,1/2,1,1/2,1/2])
Esa extraña expresión [1,1/2,1/2,1,1/2,1/2], es una lista, que es una clase de variable, que contiene varios datos. Una variable es un espacio de memoria en la que se almacenan datos, por ejemplo t=1, y si escribimos dur=t, se entiende que la duración sera de 1 tiempo, en el caso de esa lista, la duración será 1,1/2,1/2,1...y así sucesivamente.
Esa lista puede también ser definida en otra linea, para que el entorno sepa que existe y de esta manera utilizarla en diferentes players y también ha de ser ejecutada con la combinación de teclas Control + Enter.
En el caso de que existan varias lineas seguidas, al ejecutar una de ellas se ejecutan las demás.
lista = [1,1/2,1/2,1,1/2,1/2]
p1 >> play('X--o--', dur=lista)
p2 >> play('psspss', dur=lista)
var([1,1/2],[1,2]), es un tipo de variable que en este caso ofrece el mismo resultado que la antes citada [1,1/2,1/2,1,1/2,1/2]), y también se puede definir en una linea aparte o en un player
lista = var([1,1/2],[1,2])
p1 >> play('psspss', dur=lista)
Los parámetros amp, pan, sample y rate, también pueden hacer uso de las variables antes descritas, adecuadas a los valores que les sean propios.
p1 >> play ('X-o-', dur=[1,1/2],amp=[0.7,1], pan=[-1,1],sample=[0,1,0,1])
Tutorial Básico FoxDot # 2
Estos parámetros comunes son dur, amp y pan, y se establecen, cuando volverá a sonar el sample o nota (dur), el volumen (amp) y la distribución en el panorama estéreo (pan).
Todos ellos tienen valores por defecto que suelen ser 1 para dur y amp, 0 para pan. La instrucción
determina que la duración será de medio tiempo, una volumen de la mitad del preestablecido ( no todos los samples o instrumentos tiene la misma percepción sonora), y se escuchara totalmente por el canal izquierdo de altavoces o auriculares, siendo el valor pan=1 el que determina que solo se escuche por el canal derecho.
En cuanto al tiempo y la duración de los sonidos o notas, por defecto esta configurado a 120 bpm, esto es 120 golpes o negras por minuto, por lo que una negra tiene una duración de 1/2 segundo. Se puede variar la configuración relativa al tiempo mediante la instrucción
En este caso en un minuto sonarían 136 golpes o negras, la configuración por defecto es
Hay dos parámetros más que determinan el sonido de los samples, rate y sample, del parámetro sample hablamos ya en el articulo anterior, comentamos que determina cual de los samples incluidos en la carpeta suena.
El parámetro rate lo que determina es la velocidad a la que se reproducirá el sample, siendo la velocidad o rate predefinido el 1, el 2 seria el doble de velocidad, el 3 el triple. Esa velocidad hace que varíe el timbre del sonido y lo haga más agudo si se emplean valores mayores que 1, o más graves si se utilizan valores decimales como 0.7 o 0.3. Si escribimos un valor negativo el sample se reproduce de atrás hacia adelante.
En mi canal de Youtube este vídeo muestra los ejemplos de este articulo y el anterior.
Tutorial Básico FoxDot # 1
El funcionamiento del objeto play para hacer sonar un sonido es el que sigue, pongamos por ejemplo la instrucción
p1 >> play('X').
p1 es el nombre de la pista, play es el instrumento, en este caso el sampleador, que entra en la carpeta X (Mayúscula), y hace sonar el primer sample que encuentra en esa carpeta. Menos alguna carpeta, creo que solo una, todas las carpetas contiene más de un sonido, y se puede escoger sonar uno de los incluidos en la carpeta añadiendo la instrucción sample=numero_sample,
p1 >> play('X',sample=1)
haría sonar el sample segundo de la carpeta, esto es debido a que normalmente en informática el primer numero de una lista de elementos suele ser el 0, el segundo el 1, el tercero el 2, y así sucesivamente.
Pero que sucede si por error indicamos un numero mayor que el de samples que hay en una carpeta, por ejemplo sample=69 cuando solo hay 5 samples, pues no pasa nada anómalo, cuando llega al ultimo sample, sigue contando hasta 100 comenzado de nuevo por el primer sample de la lista, como os supongo curiosos os sacaré de dudas, el sample 69 de esa carpeta ejemplo que tiene 5 samples, recordemos del 0 al 4, seria el sample 3, esto es el cuarto de la carpeta.
La instrucciones play puede contener más referencias a samples que sonaran uno detrás de otro,
p1 >> play('X---')
hace sonar el sample numero 0 de la carpeta X mayúscula y a continuación tres veces el sample 0 de la carpeta - (guion). La sintaxis del instrumento play es play(), y se encierra entre comillas, simples o dobles, los samples que se desean hacer sonar
p1 >> play('X-o-').
Sobre FoxDot
No es mi primera experiencia en el uso de entornos dedicados al Live Coding, he usado también Tidal Cycles ( poco ), Sonic Pi ( bastante ), pero finalmente he optado por centrarme en FoxDot.
De FoxDot me gusta la sencillez del código utilizado para hacer sonar los samples o los sintetizadores preestablecidos.
Añadir nuevos sintetizadores es relativamente sencillo, y la conexión con sintetizadores externos vía midi y su sincronización con los diferentes 'players', así se denominan las diferentes pistas o instrumentos que suenan, también.
Live Coding 3
En esta ocasión, retomo el live coding puro, o casi, ya que utilizo algunas funciones que previamente he creado, de esta manera el tiempo hasta que comienzan a suceder cosas interesantes, se acorta.
He utilizado además el sintetizador por software ZynAddSubFX, que me gusta mucho.
Live coding 2 con FoxDot
Este segundo vídeo del canal dedicado al Live Coding es más corto, grabar y mostrar los procesos realizados desde cero aunque es interesante como muestra de los mismos, por otra parte hace que por ello la duración del vídeo se alargue.
En esta ocasión he optado por grabar solo la parte final, una vez realizado los procesos previos.
Primer live coding con FoxDot
Este es el primer vídeo del Canal que versará sobre Live Coding.
Herramientas utilizadas FoxDot, biblioteca Python fácil de usar que crea un entorno de programación interactivo y se comunica con el potente motor de síntesis de sonido SuperCollider
. Al ser Live Coding y grabado en directo hasta el minuto 1:02 aproximadamente no comienza a haber sonidoLa Luna Llena del 1 de Agosto
El martes día uno hay luna llena y un buen momento para realizar el estudio que se indica en el siguiente enlace Cristales No Empañados Al...
-
He necesitado conocer el máximo común divisor y el mínimo común múltiplo de dos números, para ello en vez de utilizar alguna de la múltiples...
-
Normalmente configuramos nuestro Sistema Operativo, para que los archivos estén codificados bajo el estándar ISO-8859-1, pudiendo suceder qu...
-
Había transcurrido casi un mes desde que tuve la brillante idea de aplicar técnicas de gigolos norteamericanos a españolas, y como podréis...